
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
分享一个PWM+DMA的BUG
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
STM32的TIM触发SPI的DMA发送使用NSS时MSSI的问题
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
PWM+DMA求助
STM32F103RCT6 定位孔 镂空,会影响使用吗?
或空闲事件,待事件发生时 才 会基于中断去处理。
基于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是通过串口的请求的才会响应的。
标准库是以前通用的。
但是芯片发展越来越先进,功能越来越多,标准库已经不适应发展了。
你可以留意一下,新出的芯片都没有标准库了。