本帖最后由 PaulRambo 于 2017-6-22 11:24 编辑
大家好,我最近在使用NUCLEO-L476RG开发板测试串口通信,中断方式。设置中断频率1字节一次,HAL_UART_Receive_IT(&huart4,Uart4buffer,1);
目前出现的问题是:开始能够接收数据,测试了400左右字节,不稳定地卡死,一段时间后再也无法进入中断。标志位如下:isrflags = ?0F8,显示为RXNE和OVER RUN了。Callback代码如下,还请各位大神帮忙解决。感激不尽!- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- uint32_t timeout=5000;
- uint8_t ret=0;
- /* Prevent unused argument(s) compilation warning */
- UNUSED(huart);
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_UART_RxCpltCallback can be implemented in the user file
- */
- if(huart == &huart4)
- {
- FlagUARTExt=1;
- SaveToRXBuffer(Uart4buffer[0]);
- while(timeout)
- {
- ret = HAL_UART_Receive_IT(&huart4,Uart4buffer,1);//ÉèÖÃÖÐ¶ÏÆµÂÊ
- if(ret != HAL_OK)
- timeout--;
- else
- timeout = 0;
- }
- STATE_Toggle();
- }
- }
复制代码
|
好的。谢谢你的建议。延时的我改一下。开启中断的感觉最好还是放在这个位置。因为使用HAL的库,中断方式接收需要接收一次中断就重新设置中断。要想接收不定长度的数据,也只能设置为1个字节就中断。这个感觉跟以前的标准库很像了。但是使用起来效果差很多。不知道你有没有其他办法能够随时中断接收数据。