[STM32H7] 【技术分享】PWM触发DMA采样多通道ADC

[复制链接]
1346|5
 楼主| Sunwaz 发表于 2022-11-2 10:24 | 显示全部楼层 |阅读模式
【技术分享】PWM触发DMA采样多通道ADC
一、使用工具
IDE : IAR
Demo:NuCleo-H723ZG
代码生成工具:cubeMX
二、实现目的
通过定时器输出PWM,在PWM的下降沿开启采样多通道ADC。
三、DMA简谈
本实验采样的ADC为ADC3 CH_Vbat , CH_Temp,CH_Vref,使用的DMA为BDMA。
在手册RM0468上可以找到BDMA搬运的内存地址应该在SRAM4,见下图
151676361d47703344.png
204456361d4851fec7.png
而SRAM4的地址为0x38000000
952856361d4a32c5a8.png
四、实际操作
1>  使能ADC3的CH_Vbat、CH_Temp、CH_Vref;
2>  ADC setting
Continuous conversion mode -> disable
DMA continuous requests -> enable
Conversion data management mode -> DMA circular mode
External trigger conversion source -> timer 1 capture compare2 event
External trigger conversion edge -> trigger detection onthe falling edge
Number of conversion -> 3
3>  DMA setting
Use BDMA channel 0 mode is circular
4>  TIMER setting
Clock source -> internal clock
Channel2 -> PWM generation no output
Prescaler -> 300
Counter period -> 6400
Auto-reload preload -> Enable
Trigger event selection TRGO -> output compare(OC2REF)
Pulse -> 100
这里prescaler、counter period、pulse根据自己的需要设置
5>  代码编写
#if defined ( __ICCARM__ ) /*!< IARCompiler */
#pragma location = 0x38000000
uint16_t adcConversionValue[10][3];
#endif
Int main(){
//…do something
  HAL_ADC_Start_DMA(&hadc3 ,(uint32_t*)adcConversionValue , 30);
  HAL_TIM_PWM_Start(&htim1 ,TIM_CHANNEL_2);
//…do something
}

软核硬核 发表于 2022-11-2 11:08 | 显示全部楼层
ADC多通道容易产生问题,要是教程能详细一些更好了!
SantaBunny 发表于 2022-11-2 16:55 | 显示全部楼层
还有其他的教程嘛?
xch 发表于 2022-11-2 18:36 | 显示全部楼层
看标题与内容不一致。

标题错了。不是PWM 触发DMA。
Undshing 发表于 2022-11-2 19:17 | 显示全部楼层
嗯,标题写的和内容不一致
 楼主| Sunwaz 发表于 2022-11-4 13:40 | 显示全部楼层
xch 发表于 2022-11-2 18:36
看标题与内容不一致。

标题错了。不是PWM 触发DMA。

定时器产生PWM,使用PWM下降升沿触发ADC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部