你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 ADC多通道转换的DMA传输实例

[复制链接]
yumeii 发布时间:2019-12-25 15:54
这里以STM32F334 Nucleo板作为硬件平台,使用ARM keil MDK集成开发环境。


对3个ADC通道进行连续、扫描转换,转换结果通过DMA传输到内存,再作为TIM2的3个比较寄存器的值,以控制TIM2三个通道的PWM输出。


另外,使用TIM6的更新事件作为ADC转换的启动触发源。本示例中,TIM6的周期远长于TIM2的周期,通过TIM6周期性地触发AD转换。


使用STM32CubeMx进行配置,基本配置过程如下:


1、时钟配置。


2、配置ADC。选择ADC1的通道7、8、9三个通道,单端输入。


1.png


2.png


3.png


配置有关ADC触发DMA传输的内容【EOC触发;Normal模式;从外设到内存;DMA传输中断开启】


4.png


3、TIM2的配置【时基参数/PWM配置】


5.png


TIM2的三个通道的PWM初始配置一样。


6.png


4、TIM6的配置如下【其中更新事件作为触发输出】


7.png


5、生成初始代码,创建工程。


6、添加用户代码。

6.1关闭TIM2的3个通道CCR寄存器的预装载功能,修改即时生效。


__HAL_TIM_DISABLE_OCxPRELOAD(&htim2,TIM_CHANNEL_1|TIM_CHANNEL_2|TIM_CHANNEL_3);【这点不是必须的,根据实际应用来定】


6.2 开启TIM2三个通道的PWM输出并使能TIM2.


HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);


HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);


HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);


6.3 做ADC的校准操作。


HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);


6.4 做好ADC转换及DMA传输的准备工作。Value_Adc为存放ADC结果的内存数组名。


HAL_ADC_Start_DMA(&hadc1,(uint32_t *)Value_Adc, 3);


6.5 开启TIM6的计数并通过它触发AD转换。


   HAL_TIM_Base_Start(&htim6);


6.6 在DMA传输完成中断里添加处理代码。


8.png


将3个通道的AD转换结果赋给相应的比较寄存器以达到调整PWM占空比输出的目的。


因为这里DMA是配置为NORMAL模式,需从新开启DMA传输。


7、结果验证。编译运行查看结果。【三路PWM输出,占空比与ADC转换值相关。本示例的ADC输入没有实际信号,只是悬空而已,结果仅做演示。】


9.png

收藏 1 评论3 发布时间:2019-12-25 15:54

举报

3个回答
Kevin201707 回答时间:2019-12-26 09:58:40
点赞
h_12345 回答时间:2019-12-26 10:26:28
请问用什么版本的KEIL,软件仿真进不去呀?
yumeii 回答时间:2019-12-26 13:53:43
h_12345 发表于 2019-12-26 10:26
请问用什么版本的KEIL,软件仿真进不去呀?

5.26、5.28都可以吧

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版