关于串口相关的基本知识可以看这篇文章https://blog.csdn.net/weixin_62599865/article/details/129963991?spm=1001.2014.3001.5501
一.使用非中断的方式进行串口通信
串口发送/接收函数:
HAL_UART_Transmit();
串口发送数据,使用超时管理机制
HAL_UART_Receive();
串口接收数据,使用超时管理机制
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size, uint32_t Timeout)
作用:以阻塞的方式发送指定字节的数据
形参
1
:
UART_HandleTypeDef
结构体类型指针变量
形参
2
:指向要发送的数据地址
形参
3
:要发送的数据大小,以字节为单位
形参
4
:设置的超时时间,以
ms单位
将串口发送数据和接收数据应用于实战
CubeMX32的配置:
定义一个数组用来存放数据
进行函数调用
像这样写的话,每次按下单片机复位就会每次发送一个"hello world"
但是当单片机接收到一个数据后,它会进入while循环无限返回数据.
所以要加上memset初始化数组。
这里我们进行一个优化,我们使用printf发送数据。
需要重写fputc函数
并打开MicroLIB库。
二.使用中断的方式进行串口通信
CubeMX配置:
HAL_UART_Transmit_IT();
串口中断模式发送
HAL_UART_Receive_IT();
串口中断模式接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size)
作用:以中断的方式接收指定字节的数据
形参
1
是
UART_HandleTypeDef
结构体类型指针变量
形参
2
是指向接收数据缓冲区
形参
3
是要接收的数据大小,以字节为单位
当我们使用中断的方式接收发送指定数据我们需要使用到一个变量
状态标记变量:
USART_RX_STA
到最后使用中断的方法做出来的效果和使用超时函数做出来的效果是一样的,代码和USART_RX_STA的解释需要 的可以私我。