打印
[STM32H7]

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

[复制链接]
969|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,见下图
而SRAM4的地址为0x38000000
四、实际操作
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。

使用特权

评论回复
5
Undshing| | 2022-11-2 19:17 | 只看该作者
嗯,标题写的和内容不一致

使用特权

评论回复
6
Sunwaz|  楼主 | 2022-11-4 13:40 | 只看该作者
xch 发表于 2022-11-2 18:36
看标题与内容不一致。

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

定时器产生PWM,使用PWM下降升沿触发ADC

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝