stm32进入stop模式被莫名其妙唤醒(应该是systick)但是无法被WKUP引脚唤醒。
DMA发送函数只能被调用一次
STM32L431进入STOP1模式后ADC产生多余功耗
头文件找不到
软件为keil5,头文件未找到
通过FATFS文件系统读写SD卡创建文件可以了,但加入MSC,一直显示一个没有格式化的U盘盘符,也不能格式化,这是什么问题导致的
stm32f103汇编求助
cubemx 生成的freertos代码 在keil ac6下不能编译,有什么解决的方法吗
报错Could not determine GDB version using command: arm-none-eabi-gdb --version
stm32f107vct6配RTL8201例程
或空闲事件,待事件发生时 才 会基于中断去处理。
基于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是通过串口的请求的才会响应的。
标准库是以前通用的。
但是芯片发展越来越先进,功能越来越多,标准库已经不适应发展了。
你可以留意一下,新出的芯片都没有标准库了。