STM32H523CEU6的Pin41和Pin42能否作为USART6使用?
VL53L5CX无法使用
STM32u575 USART 用GPDMA接收,DMA中断,usart 中断正常来,ROR数据正确,接收缓冲却不变
请教STM32F103的DMA空闲接收问题
stm32h7 定时器输出比较模式+dma,生成脉冲异常
STM32G030F6串口空闲中断配置卡死
3.3v单片机能刷写1.8v的spi flash吗?
STM32CubeMX配置STM32F103C8T6 RTC分频器问题
STM32F103RCT6断电以后,ADC会漏电
STM32H725VGT3内存不足问题
微信公众号
手机版
或空闲事件,待事件发生时 才 会基于中断去处理。
基于DMA方式做UART的发送和基于中断方式做数据发送,在CPU的占用上有明显差别。基于中断方式的发送,定会每
发生1个数据得申请中断让CPU来搬运数据到发送寄存器,如果是基于DMA方式,发送过程中CPU可以被完全释放出来。
对于大量数据的传输,使用DMA比串口中断方式更能释放CPU,让其做更重要或紧急的事情。
至于效率的高低,看你站在哪个角度来评价。单从实现传输的角度讲,DMA方式未必就一定比基于中断方式高。
打个比方,你想发个东西给某人,你自己亲历亲为跟选择快递,谁的效率高,不可一概而论。但可以肯定,
若选择快递,你可以释放出来做其它事情。
对于少量数据来说,是否dma驱动方式与串口中断驱动区别不大。很多场合可能差别不大,反正只是种提供数据的方式。
我觉得关键是要看,整个系统中CPU是否忙得过来,CPU响应中断时会不会影响更重要事情的及时处理。
其次DMA接收数据的个数是之前设定好的,如果超出来是需要及时处理。
所以,采用DMA完成中断的方式是效率最高的一种方式,在完成中断中决定是否继续接收数据。
另外标准库已经是很古老的方式了,建议与时俱进,采用cube库更加先进好用。
我想了想,是不是可以使用dma传输时,设置一个一个标志位置1,在dma完成中断中把标志位清除,每次发送数据时就while判断这个标志位,这样应该比死等待转运效率高些把?
好的,明白了,感谢大佬。
hal库学了的,但平时还是用的标准库,不是说标准库好找工作吗?
DMA传输完成了就会产生相应事件,我们基于该事件的中断决定后续操作,包括标志位的处理,不用死等什么的。
[md]但我发送数据不知道dma这时是否在空闲状态啊,不应该等待?或者等待一定时间?
DMA是通过串口的请求的才会响应的。
标准库是以前通用的。
但是芯片发展越来越先进,功能越来越多,标准库已经不适应发展了。
你可以留意一下,新出的芯片都没有标准库了。