ticat710 发表于 2019-7-23 15:57:28

stm32L475 串口例程 当大量给串口发数据时,串口出问题

本帖最后由 ticat710 于 2019-7-23 17:16 编辑

      当快速给串口发数据后,发现串口不再相应,即使数据慢下来也是,设断点后发现不在进中断,在串口实例 Uart_Handler中,发现TxXferSize ,RxXferSize有数值,并且Mask(UART Rx RDR register mask) = 0xff,   ErrorCode = 0x00000008 (串口过载错误),

在串口中断中,判断串口过载错并把标志位清除,没有改善,请问怎么解决???

ticat710 发表于 2019-7-23 17:01:20

本帖最后由 ticat710 于 2019-7-23 17:20 编辑

设置断点跟踪到通用中断处理 HAL_UART_IRQHandler()中,发现发生ore错误后,不但把ErrorCode设置了,而且还关闭了接收中断,导致串口不在接收数据

static void HART_EndRxTransfer()
{
...
CLEAR_BIT(huart->Instance->CR1.(USART_CR1_RXNEIE | USART_FEIE));

}


在weak HAL_UART_ErrorCallback()函数中可根据相应错误,做出相应修改,虽然能再次触发中断并接收数据,但是由于数据发送太快,不可避免的要丢失数据,只能发送完毕后,稍等再发

mikecai 发表于 2019-7-23 17:41:19

楼主是用中断处理数据接收吧。为啥不用 DMA 环型接收?设置好DMA buffer后,DMA数据搬到 处理buffer 解析啊。

ticat710 发表于 2019-7-23 18:12:20

没用过,用了下次试试看,谢谢!:)
页: [1]
查看完整版本: stm32L475 串口例程 当大量给串口发数据时,串口出问题