有人使用stm32的定时器事件触发dma,让其将内存数据传输到通信外设的数据寄存器进行发送,发现dma根本就不动作。
比方以基于stm32f411的芯片为例,通过tim3更新事件触发dma请求,dma从内存将数据送到spi1的数据寄存器,从而完成数据发送。
他采用cubemx进行配置。基本配置如下:[文中图片可以放大观看]
相关用户实现代码如下:
从配置过程和代码实现来看,似乎都没有问题。那dma怎么就是不动作呢?
问题出在我们使用上面的函数做dma传输所关联源端和目标端时,出现了想当然的情况。
我们利用timer事件来作为dma请求源时,而作为数据传输的源端或目的端,都是我们用户指定的。这时就一定要注意源端和目标端是当前dma流所支持的。否则就会出现乱点鸳鸯谱,dma根本可能就跑不起来。就像你叫了某快递公司,它的服务范围是相对固定的,并非你想去哪里她就能服务到哪里。
比方上面的例子,如果改成spi2就没问题。为什么刚才spi1不行呢,因为dma1根本访问不到spi1,我们不妨看看基于stm32f411芯片的内部功能及总线框图就很清晰了。
从上图不难看出dma1是访问不到spi1或spi4这些外设的,或者说dma1就没法访问挂在apb2总线上的外设,只能访问apb1总线上的外设。
小结:一般来讲,基于某触发事件,对应的dma数据流就可以确定下来了,那该dma数据流的传输范围往往也随之确定。我们在为该dma数据流指定源端和目标端时一定要符合其传输范围,否则会出现传输无法完成的情形。换言之,我们在做dma传输时,为了实现dma的有效传输,往往需要结合源端和目的端来调整或选择合适的dma数据流。结合前面的比方,如果这家快递公司到不了,我们换一家可能就轻松解决了。
你那款也上榜吗?外媒评选电池表现最优的是这5款手机!
什么是肖特基势垒二极管?可以在任何地方使用吗
热敏晶振和温补晶振有什么区别
飞思卡尔传感器产品打造安全、多样化生活
力拼小米笔记本 颜值实力性能不俗的全新Air Book
STM32定时器触发DMA数据传输失败的原因如何解决
护套线RVV、RVVP、AVVR的定义,它们之间有什么区别
CGHV1J070D L波段放大器
广和通车联网业务全球布局
Qualcomm宣布推出Qualcomm TrueWireless™立体声技术
超声波雷达流量计流速流量液位三合一
闪迪至尊高速1TB3D版SSD评测 到底值不值得买
灯光需求在升级,灯商的未来到底在于什么?
高容科技完成天使轮融资
面向对象编程会被抛弃吗?这5大问题不容忽视
景观照明行业迎来新一轮的分化
AR眼镜采用3D绘图与深度感测 视觉效果显著增强
AI系统中没有真正的人工智能,目前都无法与生物系统的能力相配
Type-C接口后,iPhone15的充电速度有没有提升?
芯海科技荣获“国产模拟IC行业技术突破卓越奖”