根据各种调查外加查资料,发现主要原因应是 __HAL_LOCK 的直接返回,导致HAL_UART_Receive_IT 失败后不能再开中断。 STM32f103 HAL 库的 串口中断方式接收数据的函数HAL_UART_Receive_IT、发送函数 HAL_UART_Transmit_IT、HAL_UART_Transmit 的内部实现都有 __HAL_LOCK(huart); 根据其实现,若调用时发现已经上锁...
但是在于 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_UART_CLEAR_IT(&huart2,UART_CLEAR_IDLEF);//Çå³ýÖжÏ// ReceiveState = 1;// IDLE 数据处理,一帧数据接收标志位置位} } HAL库接收方式二 但是在于 HAL 中,还有一种比较常用的开启中断方法,不是直接使能中断,而是通过调用 HAL 库函数登录后复制HAL_UART_Receive_IT: 在这里...
为了使能中断,都在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) */...
找到问题解决起来也很简单,改HAL的HAL_UART_Receive代码如下: 1.//这是我重写的UART接收函数,除了修复超时导致的丢数据问题以外,增加了 2.//超时后返回当前读取到的数据量,这样可以读不定长帧。目标接收20Byte, 3.//实际发送了10Byte,那么pSize为10,也就是实际接收到的数据量。
HAL_UART_Receive_IT(&UART1_Handler,(u8*)aRxBuffer,1);1 这个函数,首先是在初始化uart_init(115200)的时候调用了一次。 紧接着,在串口中断服务函数里,又调用了一次,继续接收,这样就不会造成接收完指定的的数据帧长度就不会进入中断了。如下图:
HAL_UART_RECEIVE只接收一次,然后总是超时怎么处理? 我目前正在为 universtiy 做一个项目,我对 stm32 还很陌生。我的板上有一个通过 UART 通信的传感器,如果它每秒转储一次数据。我的问题是第一个 HAL_UART_RECEIVE 按 yu1004402274 2022-12-06 07:18:50 STM32 HAL库串口收发是如何使用的? 的一种库,它...
今天晚上回家找了下网上的解决方案,都和我的情况不一样(HAL果然坑)。于是自己开始一点点调试HAL的UART读写代码,基本上认定问题出现在HAL_UART_Receive这个函数。 BUG大概就是每次进行读操作时会有个超时,这个超时的作用是如果UART在这个时间内没有收到期望的数据量那么函数就返回TIMEOUT。上面我的代码里设置的超时...
您可以使用uint32_t HAL_UART_GetError(UART_HandleTypeDef * huart)和HAL_UART_StateTypeDef HAL_UART...