stm32家族中的很多系列,比如stm32g0/stm32g4/stm32l4+/stm32h7等都内置了dmamux模块。有了它一方面使得dma请求与dma控制器之间的映射关系更为灵活方便,同时也大大拓展了dma请求事件,不再局限于外设事件,比方可以基于gpio的外部中断事件、或者dma事件本身来触发dma传输。另外,dma传输的实现还可以基于其它触发事件来同步其操作,即dma传输的实现需要借助其它同步事件来真正启动。
本文就基于stm32g4芯片简单介绍下该话题,这里要实现的功能大致是这样的:片内低功耗定时器lptim1的定时输出作为dmamux的dma同步输入事件,该同步事件触发uart的dma传输,通过uart输出一段字符。
本演示例程基于stm32g4系列的nucleo板进行。低功耗定时器lptim工作在pwm输出模式,dmamux基于lptim每次的定时输出事件为uart2申请一定数目的dma请求,然后dma将数据从内存送到uart的数据寄存器并最终将内容显示在pc串口终端。
下面就直接使用stm32cubemx进入配置过程。
通过cubemx神器做基本的初始化配置【rcc配置此处就省略了】。
lptim1的参考配置如下,具体应用时请结合实际情况来定,这里只需能产生周期性定时输出即可。
uart2外设没有什么特别要提醒的,这里就不贴截图了。我们重点看看有关uart tx的dma传输的相关配置。
上图中蓝色圈里的勾选框对于本应用演示不是必须勾选的,勾选了也没关系,不会对本演示产生影响。dma请求数设置为21,表示每检测到1个同步事件后dmamux为uart传输申请21个dma请求,以批量传输21个字符“stm32 dma syncdemo ”。
完成图形化配置后,生成初始化代码并添加必要的用户代码。
#defineperiodvalue (1000)
#define pulsevalue (500)
#define size (21)
uint8_tpdata[size]={‘s’,‘t’,‘m’,‘3’,‘2’,‘ ’,‘d’,‘m’,‘a’,‘ ’,
‘s’,‘y’,‘n’,‘c’,‘’,‘d’,‘e’,‘m’,‘o’,‘ ’,‘ ’};
hal_lptim_pwm_start(&hlptim1, periodvalue, pulsevalue) ;
hal_uart_transmit_dma(&huart2, pdata, size);
编译运行,验证结果。
代码运行后,可以通过示波器看到lptim的周期性pwm输出,同时pc端也可以看到如上面截图所示的周期性呈现的字符串。
ok,本次基于dmamux同步事件的应用演示就介绍到这里,供君参考,更多细节还请阅读stm32相关技术手册。
TI旋变接口为工业驱动和新能源汽车提供集成优势
骁龙870 5G移动平台性能评测
深度解析C++中的虚函数
逆变器在风力发电系统与电网接口上的作用
智能交通监控系统可以准确地识别道路事故
介绍一篇基于DMAMUX同步事件的应用演示
GIF摄影棚的制作教程
单片机的状态迁移与复位操作
贸泽电子发布微信支付功能 夺移动支付高地 强化全支付用户体验
2020的网络趋势是怎样的
新型3D打印机有助于提高大型零件的生产率
RADIO ENERGIE雷恩防爆式编码器
基于ADS7843控制芯片和单片机实现应用系统的连接与设计
紧急切断阀安装规范_紧急切断阀安装注意事项
【科普】移动无线通信技术技术1G到5G之路
十倍电压放大器电路图大全(前置放大/电压跟随器/LM386音响功放电路)
2790数字源表开关系统的主要特点及应用优势
德索手把手教你延长LVDS连接器的使用寿命
基于集成门极换流晶闸管器件实现两电平变频器的设计
我们真的需要区块链来保护隐私吗