找到问题解决起来也很简单,改HAL的HAL_UART_Receive代码如下: 1.//这是我重写的UART接收函数,除了修复超时导致的丢数据问题以外,增加了 2.//超时后返回当前读取到的数据量,这样可以读不定长帧。目标接收20Byte, 3.//实际发送了10Byte,那么pSize为10,也就是实际接收到的数据量。
但是在于 HAL 中,还有一种比较常用的开启中断方法,不是直接使能中断,而是通过调用 HAL 库函数HAL_UART_Receive_IT: 一般的使用方式步骤: 对于本次需要说明的问题,就是使用了HAL_UART_Receive_IT函数导致的,下文我们会说明,这里列出了基本的使用步骤。 二、 收发同时串口卡死? 2.1 问题说明 最近测试部反馈,产品有...
__HAL_UNLOCK(&huart1); } } USB_send(uartdata, uart1_num) ;}蓝梦妖蝶 默默无闻 1 while (CDC_Transmit_FS(Buf, Len) != USBD_OK)发送函数是这样。如果在中断回调用就会导致卡死。放在HAL_UART_Receive_IT(&huart1, (uint8_t *)&uartdata_one, 1)之后则没事。这是为什么?登录...
今天晚上回家找了下网上的解决方案,都和我的情况不一样(HAL果然坑)。于是自己开始一点点调试HAL的UART读写代码,基本上认定问题出现在HAL_UART_Receive这个函数。 BUG大概就是每次进行读操作时会有个超时,这个超时的作用是如果UART在这个时间内没有收到期望的数据量那么函数就返回TIMEOUT。上面我的代码里设置的超时...
根据各种调查外加查资料,发现主要原因应是 __HAL_LOCK 的直接返回,导致HAL_UART_Receive_IT 失败后不能再开中断。 STM32f103 HAL 库的 串口中断方式接收数据的函数HAL_UART_Receive_IT、发送函数 HAL_UART_Transmit_IT、HAL_UART_Transmit 的内部实现都有 __HAL_LOCK(huart); 根据其实现,若调用时发现已经上锁...
对于本次需要说明的问题,就是使用了登录后复制HAL_UART_Receive_IT函数导致的,下文我们会说明,这里列出了基本的使用步骤。 二、 收发同时串口卡死? 2.1 问题说明 最近测试部反馈,产品有些时候的下行没反应,这里所说的下行,其实就是串口接收。 霹雳扒拉一大堆多余的省略 ... ... 只说几个重点: ...
STM32 HAL库串口同时收发,接收卡死? 为什么STM32 HAL库串口会出现同时收发导致接收卡死的问题?如何解决这个问题? 首先,我们来了解一下STM32 HAL库的串口通信机制。 STM32 2023-10-26 17:42:37 HAL_UART_RECEIVE只接收一次,然后总是超时怎么处理? 我目前正在为 universtiy 做一个项目,我对 stm32 还很陌生。
STM32 HAL库串口收发崩溃的原因 的校验码后字节添加1-8字节随机数,每种字节长度测试10000次。以上测试初串口就会崩溃,只能发不能收,调试结果是,串口接收中断不再响应。源码中使用HAL_UART_Receive_I... 遇鱼余的小白 2021-08-23 08:58:23 STM32HAL库串口空闲中断+DMA是如何去实现串口接收不定长数据的 STM...
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef*huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); 阻塞式发送和接收在使用上都没有太大的差别,发送就等着发送完,HAL中阻塞式发送函数的第4个参数Timeout,可以设置一个超时时间,超时后没发完就不再阻塞。
为了使能中断,都在while主循环之前调用HAL_UART_Receive_IT( huart2,(uint8_t *) value,1);但串口1或者低功耗串口,调用这个函数时,程序就卡死在HAL_UART_Receive_IT这个函数中,跟踪进去发现是卡死在/* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */...