stm32cubemx正确配置串口后,只能发送的问题,接收不到信息。在初始化的时候添加一句
rxit_ok = HAL_UART_Receive_IT(&huart1, pBuf, 1); //开启接收中断
原因分析:在定义rxit_ok的时候应该是默认为0,而
typedef enum
{
HAL_OK = 0x00U,
HAL_ERROR = 0x01U,
HAL_BUSY = 0x02U,
HAL_TIMEOUT = 0x03U
} HAL_StatusTypeDef;
可以看到一开始参数默认是开启了接收中断的参数,但在初始化配置中是没有开启接收中断的,这就造成一开始没有接收到信息 而下面代码是建立在前一次接收正常的基础上才会执行
do {
rxit_ok = HAL_UART_Receive_IT(UartHandle, pBuf, 1);
if (++cnt >= 5)
break;
} while(rxit_ok != HAL_OK);
所以导致接收中断一直没有开启,代码判断也没有重启中断,最后导致接收不到信息。
另一个就是正点原子库函数版本的串口问题,不知道现在解决没有。他会在一开机的时候在串口的接收还是发送寄存器中存放一个莫名其妙的字符,要调用函数清除掉,不然的话和别的调用标准函数的板子通信会出现错误,因为多了一位,导致后面都是错的
stm32cubemx正确配置串口后,只能发送的问题,接收不到信息。在初始化的时候添加一句
rxit_ok = HAL_UART_Receive_IT(&huart1, pBuf, 1); //开启接收中断
原因分析:在定义rxit_ok的时候应该是默认为0,而
typedef enum
{
HAL_OK = 0x00U,
HAL_ERROR = 0x01U,
HAL_BUSY = 0x02U,
HAL_TIMEOUT = 0x03U
} HAL_StatusTypeDef;
可以看到一开始参数默认是开启了接收中断的参数,但在初始化配置中是没有开启接收中断的,这就造成一开始没有接收到信息 而下面代码是建立在前一次接收正常的基础上才会执行
do {
rxit_ok = HAL_UART_Receive_IT(UartHandle, pBuf, 1);
if (++cnt >= 5)
break;
} while(rxit_ok != HAL_OK);
所以导致接收中断一直没有开启,代码判断也没有重启中断,最后导致接收不到信息。
另一个就是正点原子库函数版本的串口问题,不知道现在解决没有。他会在一开机的时候在串口的接收还是发送寄存器中存放一个莫名其妙的字符,要调用函数清除掉,不然的话和别的调用标准函数的板子通信会出现错误,因为多了一位,导致后面都是错的
举报