|
这里以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三个通道,单端输入。
配置有关ADC触发DMA传输的内容【EOC触发;Normal模式;从外设到内存;DMA传输中断开启】
3、TIM2的配置【时基参数/PWM配置】
TIM2的三个通道的PWM初始配置一样。
4、TIM6的配置如下【其中更新事件作为触发输出】
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传输完成中断里添加处理代码。
将3个通道的AD转换结果赋给相应的比较寄存器以达到调整PWM占空比输出的目的。 因为这里DMA是配置为NORMAL模式,需从新开启DMA传输。 7、结果验证。编译运行查看结果。【三路PWM输出,占空比与ADC转换值相关。本示例的ADC输入没有实际信号,只是悬空而已,结果仅做演示。】
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
5.26、5.28都可以吧