一、用定时器计数方式,控制LED以2s的频率周期性地亮-灭
1.cubeMX工程创建
-
RCC
-
SYS
-
IO口
-
定时器TIM2
-
NVIC配置中断
-
配置时钟
-
项目设置
2.代码修改编写
- main.c
HAL_TIM_Base_Start_IT(&htim2); //打开定时器TIM2
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//这里灯亮一秒,灭一秒,则中断产生20次改变一次电平
static uint32_t time_cnt =0; //记录中断次数
if(htim->Instance == TIM2)
{
if(++time_cnt >= 20) //判断是否已经达到一秒
{
time_cnt =0; //点灯用的中断次数归零
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); //改变LED所接引脚的电平
}
}
}
3.编译
4.结果
二、采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒
1.cubeMX工程创建
- RCC
- SYS
- TIM2
- NVIC配置中断
- USART
- 时钟配置
- 文件设置
2.代码修改编写
- main.c
uint16_t pwm=10; //占空比
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
while(pwm<500)
{
pwm = pwm + 10;
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
HAL_Delay(20);//延时20毫秒
}
while(pwm>0)
{
pwm = pwm - 10;
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
HAL_Delay(20);
}
}
3.编译
4.仿真调试查看波形