记录-cubemx配置STM32F334双ADC+DMA同步规则转换
前言
样例项目使用场景,使用PID做多路电流调节,实现电流稳定输出,所以需要用到多路ADC检测。
本次项目使用的是ST的F334芯片,外部高速时钟8M,使用ADC1、ADC2同步规则转换模式并且用DMA读取ADC采集数据。
基础知识点
1.ADC转换时间 = 采样周期 + 12.5(ADC时钟周期)
2.同步规则模式
在同步规则模式中需要特别注意3个点,如下图1,2,3所示。
采样转换如下图4所示,每次对属于ADC模块的2个通道进行转换,转换结束后产生DMA请求,DMA按照ADC1,ADC2设置通道
顺序依次将数据取走,然后放到指定的内存空间。
DMA内存数据结构中的ADC采样数据,高16位为ADC2采样值,低16位为ADC1采样值,如下图所示。
注意点:
1.若使用定时器触发ADC采集时,定时器的触发时间不能小于ADC最小完成采样时间。比如此芯片ADC最大时钟为72MHz,最小采用周期为1.5Cycles,
则完成采样一个通道最小时间为0.19us,则定时器触发时间不能小于0.19us.
2.在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。
但是,主和从ADC的外部触发必须同时被激活。
3.在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA传输规则通道数据。
可参考《stm32中文参考手册》
硬件接口配置情况:
ADC1:CH1,CH2,CH3,CH4 做电流检测。CH11,CH12 做温度检测。
ADC2:CH1,CH2,CH3,CH4 做电流检测。
cubemx配置:
1.配置ADC1时钟,通道个数,通道采集顺序,通道采样周期,无外部触发,配置DMA。
2.配置ADC2时钟,通道个数,通道采集顺序,通道采样周期,无外部触发。
注:
1.ADC2不需要配置DMA。
2.这里ADC2的Rank配置中最后的2个通道都配置为通道1的原因,查看同步规则模式图示。
软件设置启动ADC,获取ADC采集值,最后双ADC同步规则模式样例结束,
重点:
1.根据项目实际情况,最好使用外部触发ADC采样。本次样例未使用外部触发ADC采样,所以采样时间不能设置太快,否则会导致主程序不能执行,而一直执行ADC采样完成中断。
2.在双ADC同步模式下,两个ADC不能转换同一个通道,两个ADC的规则转换序列的通道个数应该相同,每个通道的采样周期也应该相同,以使得两个ADC能保持同步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统