STM32 定时器2 CH1 CH2 PWM输出 产生呼吸灯效果

     PWM一般用来驱动电机(控制速度),控制LED亮度,驱动开关电源电路等等,本实例通过改变PWM占空比的方式来驱动LED灯,形成呼吸灯的效果。用这种方式来学习STM32 TIM2输出PWM的配置。

      以STM32F103C8T6为例,从其数据手册中可以看到,PA0、PA1的复用功能(Default alternate functions)分别是定时器2的CH1和CH2。

    由图2 TIM2_REMP重映射控制表可以看到,TIM2_CH1_ETR表示,PA0既可以复位为TIM2_CH1,也可以复用为TIM2_ETR功能,我们这里将PA0当做TIM2_CH1使用。


图1 TIM2 CH1、CH2引脚

(图来自数据手册)

       由图2可以看到TIM2的CH1、CH2没有重映像时指向PA0和PA1,所以我们这里不进行重映射配置,在配置PA0、PA1端口时,配置为复用推挽输出即可。

图2 TIM2_REMP重映射控制表

 

你可以使用STM32定时器1来生成多路PWM输出。下面是一个简单的步骤: 1. 配置定时器1的基本设置:设置定时器模式为PWM模式,选择适当的时钟源,配置预分频器和计数器周期。 2. 配置定时器1的通道:选择要使用的PWM输出通道,并设置占空比。 3. 配置GPIO引脚:将定时器1的PWM输出引脚与对应的GPIO引脚进行映射。 4. 启动定时器1:启动定时器1,使其开始生成PWM信号。 以下是一个示例代码片段,演示如何使用STM32定时器1输出两路PWM信号: ```c #include "stm32f4xx.h" void TIM1_PWM_Init(void) { // 启用定时器1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // 配置定时器1的基本设置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1; // 预分频器值,将系统时钟分频为1MHz TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // 计数器周期值,设置为1ms TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 配置定时器1的通道1 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500 - 1; // 设置通道1的占空比为50% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); // 配置定时器1的通道2 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 250 - 1; // 设置通道2的占空比为25% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); // 配置GPIO引脚 GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11; // 映射到GPIOE的引脚9和11 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); // 启动定时器1 TIM_Cmd(TIM1, ENABLE); } ``` 这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。请确保在使用定时器和GPIO引脚之前,已正确配置时钟和引脚。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值