将定时器3的通道二映射到PB5(LED)上,每10ms改变一次比较值,PB5亮度没有反应
timer.c 中的具体配置
//PWM GPIO口初始化
void pwm_gpio_config()
{
GPIO_InitTypeDef gpio_initStructure;
__HAL_RCC_TIM3_CLK_ENABLE();
__HAL_AFIO_REMAP_TIM3_PARTIAL();
__HAL_RCC_GPIOB_CLK_ENABLE();
gpio_initStructure.Pin = GPIO_PIN_5;
gpio_initStructure.Mode = GPIO_MODE_AF_PP;
gpio_initStructure.Pull = GPIO_PULLUP;
gpio_initStructure.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB,&gpio_initStructure);
}
//定时器3初始化
void timer3_init(uint16_t prescaler,uint16_t period)
{
htimer3.Instance = TIM3;
htimer3.Init.CounterMode = TIM_COUNTERMODE_UP;
htimer3.Init.Prescaler = prescaler;
htimer3.Init.Period = period;
htimer3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htimer3);
//这里不重写MSP函数,用我们自己定义的函数
pwm_gpio_config();
htimer3_oc.OCMode = TIM_OCMODE_PWM1;
htimer3_oc.Pulse = 0;
htimer3_oc.OCPolarity = TIM_OCPOLARITY_LOW;
HAL_TIM_PWM_ConfigChannel(&htimer3,&htimer3_oc,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htimer3,TIM_CHANNEL_2);
}
void TIM_SetTIM3Compare2(uint32_t compare)
{
TIM3->CCR2=compare;
}
主函数中的逻辑:
uint8_t dir=1;
uint16_t led0pwmval=0;
//HAL 库初始化,必要步骤
HAL_Init();
//系统时钟初始化
SystemClock_Config();
//LED 初始化
led_init();
//蜂鸣器初始化
beep_init();
//按键初始化
key_init();
delay_ms(100);
//串口 GPIO 初始化
uart1_gpio_config();
//串口初始化
uart1_init();
timer2_init(6199,9999);
// timer3_gpio_config();
timer3_init(7200-1,500);
while(1)
{
delay_ms(10);
if(dir)led0pwmval++; //dir==1 led0pwmval递增
else led0pwmval--; //dir==0 led0pwmval递减
if(led0pwmval>300)dir=0; //led0pwmval到达300后,方向为递减
if(led0pwmval==0)dir=1;
TIM_SetTIM3Compare2(led0pwmval);
}