【技术分享】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 }
|