发布网友 发布时间:2022-04-22 08:34
共1个回答
热心网友 时间:2022-06-18 17:51
摘要中断接收函数HAL_UART_RECEIVE_IT函数是个定长接收函数,除非把接收长度设为1。由于我使用freertos系统,打断系统的时间应尽可能少,频率尽可能低。每个字节都进一次hal库的接收处理函数,进行各种判断实在是不友好,因此考虑跳过hal的串口处理部分,直接判断uart_flag_rxne标志位与uart_flag_idle标志位,存入接收缓冲。触发idle中断后认为不定长数据接收完毕,进行处理。咨询记录 · 回答于2021-11-23没有DMA的单片机怎么解决串口占用时间问题中断接收函数HAL_UART_RECEIVE_IT函数是个定长接收函数,除非把接收长度设为1。由于我使用freertos系统,打断系统的时间应尽可能少,频率尽可能低。每个字节都进一次hal库的接收处理函数,进行各种判断实在是不友好,因此考虑跳过hal的串口处理部分,直接判断uart_flag_rxne标志位与uart_flag_idle标志位,存入接收缓冲。触发idle中断后认为不定长数据接收完毕,进行处理。我用的ADUC7021单片机,这个单片机没有DMA,且波特率只能是9600,每秒钟数据量420个字节,这样串口数据就占用了我CUP 44%的资源了,且该单片机没有DMA,我需要怎么处理呢有DMA功能的单片机很少的,特别是8位单片机,基本来说是没有DMA功能,PIC24系列部分单片机有DMA功能,可以选用。8位单片机,比如51,也可以借助8237实现DMA功能。32位的,这个单片机太垃圾了你尝试运行上面代码