环境:
一. 进行项目的必要配置
如果不大清楚,可以看 STM32CubMX工程创建(点亮LED)
二. 串口选择
查看 STM32F4探索者 开发板的原理图,如下图所示,我们可以看到USB转串口是在USART1
因此我们在 STM32CubeMX 中如下图进行勾选,并进行配置
- 序号一,代表串口处于异步模式
- 序号二,关闭串口的硬件流控的功能
- 序号三,波特率设置,一般是根据通信的芯片进行选择,这里选择是115200 bps
- 序号四,代表字长,这里选择 8 bit
- 序号五,代表校验方式,这里选择无
- 序号六,代表停止位,这里选择 1 bit
这里的配置一般与之通信的芯片相对应,当你通信不起来的时候,一般要注意查一下这里
之后就可以点击代码生成了
三. 生成的代码
我们可以在 usart.c 中,找到我们生成的代码
- 序号一,是串口的一个实例
- 序号二,就是对我们的选择的串口进行配置以及初始化,初始化内容就是我们第二部分所说
四. 串口相关库函数
在 functions 可以找到使用串口的相关函数,接收和发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 第一个参数,串口实例,如 huart1
- 第二个参数,发送的数据
- 第三个参数,发送的数据的大小
- 第四个参数,超时时间
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 第一个参数,串口实例,如 huart1
- 第二个参数,接收的数据的缓存块(数组)
- 第三个参数,接收 N 个字节的数据
- 第四个参数,超时时间,如果没有接收 N 个字节,就是超时
五. 串口测试
在 主函数 中进行如下添加:
功能为
- 发送 hello usart1rn ,之后接收10个字节数据,若接收到10个字节数据,就发送接收到的数据,若在5000ms之内没有接收到数据,就打印接收超时
- 运行结果
从上图,我们可以看到接收函数,只有接收够且只有10个字节,才会返回成功,否则都是接收超时
注意 :
首先我们要把代码放在 main 函数中,并且,按照 STM32CubeMX 的规则,要把用户增加的代码放置在 BEGIN 和 END 之间,如上图中的
/* USER CODE BEGIN WHILE */
//用户代码
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//用户代码
/* USER CODE END 3 */
否则,再次使用 STM32CubeMX 生成代码时,会丢失不在BEGIN 和 END 之间的代码
环境:
一. 进行项目的必要配置
如果不大清楚,可以看 STM32CubMX工程创建(点亮LED)
二. 串口选择
查看 STM32F4探索者 开发板的原理图,如下图所示,我们可以看到USB转串口是在USART1
因此我们在 STM32CubeMX 中如下图进行勾选,并进行配置
- 序号一,代表串口处于异步模式
- 序号二,关闭串口的硬件流控的功能
- 序号三,波特率设置,一般是根据通信的芯片进行选择,这里选择是115200 bps
- 序号四,代表字长,这里选择 8 bit
- 序号五,代表校验方式,这里选择无
- 序号六,代表停止位,这里选择 1 bit
这里的配置一般与之通信的芯片相对应,当你通信不起来的时候,一般要注意查一下这里
之后就可以点击代码生成了
三. 生成的代码
我们可以在 usart.c 中,找到我们生成的代码
- 序号一,是串口的一个实例
- 序号二,就是对我们的选择的串口进行配置以及初始化,初始化内容就是我们第二部分所说
四. 串口相关库函数
在 functions 可以找到使用串口的相关函数,接收和发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 第一个参数,串口实例,如 huart1
- 第二个参数,发送的数据
- 第三个参数,发送的数据的大小
- 第四个参数,超时时间
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 第一个参数,串口实例,如 huart1
- 第二个参数,接收的数据的缓存块(数组)
- 第三个参数,接收 N 个字节的数据
- 第四个参数,超时时间,如果没有接收 N 个字节,就是超时
五. 串口测试
在 主函数 中进行如下添加:
功能为
- 发送 hello usart1rn ,之后接收10个字节数据,若接收到10个字节数据,就发送接收到的数据,若在5000ms之内没有接收到数据,就打印接收超时
- 运行结果
从上图,我们可以看到接收函数,只有接收够且只有10个字节,才会返回成功,否则都是接收超时
注意 :
首先我们要把代码放在 main 函数中,并且,按照 STM32CubeMX 的规则,要把用户增加的代码放置在 BEGIN 和 END 之间,如上图中的
/* USER CODE BEGIN WHILE */
//用户代码
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//用户代码
/* USER CODE END 3 */
否则,再次使用 STM32CubeMX 生成代码时,会丢失不在BEGIN 和 END 之间的代码
举报