现在有人有这样一个需求,他使用stm32f429芯片做开发,其中用到32位的tim2实现3路pwm输出。
另外有上位机跟stm32的uart接口相连,上位机可能不定期地需要通过uart接口给stm32发送新的占空比参数,而且每次都发送3个比较输出通道的参数【12个字节】。
如何快捷地实现这个功能呢?要求收到数据后尽快修改3个比较通道的参数。
前一篇重点介绍了利用dmafifo和uart接收事件触发dma传输实现了3个ccr寄存器的批量修改。
我们不妨就该话题稍作拓展,不再局限于某个stm32系列,而是从整个stm32的资源上考虑当前需求。上次提到3种实现方案,我想借此机会再给大家介绍另外一种实现方案,以拓宽未来解决类似问题的思路。
stm32 家族里有些系列是内置dmamux模块的,即dma路由器,利用dmamux可以实现dma请求与dma传输通道的灵活配置;可以将一些通常不能直接产生dma请求的事件通过它后而可以产生dma请求;或者基于部分dma完成事件产生新的dma请求发起新的传输。目前,stm32家族中内置dmamux模块的系列有下面这些:
那么 我这里就利用dmamux的其中一个特性,即通过它可以让部分dma完成事件产生新的dma请求从而发起新的dma传输。具体到这里,我们让uart 的dma接收完成事件映射到dmamux的dma generator,再申请新的dma请求,让dma将uart 接收到的数据从内存搬运到定时器的3个ccr寄存器,形成一个级联模式。大致流程是:
上位机数据 经uartrx+dma 接收到内存, 然后dma 接收完成事件 经dmamux申请的新的dma请求和 dma通道,再将内存数据写到定时器的3个比较寄存器控制占空比。
下面我使用stm32g4系列芯片重点演示下实现过程,配置是关键。至于原理细节还请阅读相关手册。
我还是用uart1自发自收来模拟上位机发送新的ccr数据。
tim2使用3个通道做pwm输出,使用cubemx工具的参考配置如下:
我同样开启usart1的tx/rx事件的dma传输功能。参考配置如下【注意uart rx dma的配置与前一篇的差别】:
注意上图中的事件使能及dma请求配置。接着看看下面关于dma generator的相关配置:
请关注上图中所有配置。其中,dmamux生成的dma请求由dma2_ch2响应,工作在circular模式。
我依然使用32位txdata【3】数组存放待传输的3个ccr值,用rxdata[3]存放接收的数据。使用cubemx配置完成后,添加相关用户代码。【基于hal库组织代码】
我在uartdma接收完成中断的回调函数里对接收到新数据事件做标志更新。
为了便于演示,我依然在主程序里循环模拟远程命令,动态修改ccr寄存器的值。参考代码如下截图:
稍作调试我们就可以查看输出结果【借助断点实时查看内存和寄存器的数据】:
从上面贴图不难看出,从uart的发送数据、接收到的内存数据、寄存器的数据都在保持同步更新。
在上面演示过程中,我是将dmamux生成的新dma请求申请的 dma通道配置为circular模式来着手测试的,如果配置为normal模式也应该是可以的,只是需将generator生成的新的dma配置以及用户代码稍微做些调整,有兴趣的话可以自行测试验证。
OPPO、vivo、小米大举追加订单,联发科反超高通成台积电第三大客户
魅族回应高通专利诉讼 李楠发“黑盒子”引遐想
爱分析报告:生成式AI掀起产业智能化新浪潮
基于Mobile SDK V4版固件开发大疆无人机手机端遥控器(1)
英飞凌推新LTE低噪声放大器及LNA Bank 大幅改善用户体验
远程修改STM32 TIMER占空比的方案
酷比H9正式发布:无边框、双摄与Hi-Fi
小米将在国庆前加速推进线下渠道建设,以促进手机等产品的销售
悉尼科技大学成立了一个新的人工智能研究所
ARM架构的关键能力
经典指南:你真的了解开关电源吗?
卧式共模电感基本特性详解gujing
新能源汽车BMS与超充&核心电源技术研讨会已完美落幕
新兴的人工智能(AI)技术具有加速和转变对分子疗法的搜索的潜力
斯柯达自动空调空气护理系统保证车内的空气清洁
!销售/回收HP8922S/HP8922S/HP8922S现
采用无监督学习的方法,用深度摘要网络总结视频
DEVICENET转ETHERNET/IP网关devicenet通讯模块
富士康内部人士称iPhone 5将量产:配4英寸屏
基于能量收集技术建立替代能源动力系统