目录
一.定时器技术控制LED
1.创建项目
2.代码添加
添加中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint32_t time_cnt = 0;
if(htim->Instance == TIM2){
if(++time_cnt >= 400){
time_cnt = 0;
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
}
}
}
3.实现效果
二.定时PWM模式呼吸灯
1.项目创建
2.代码添加
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
while (1)
{
/* USER CODE END WHILE */
while(Duty < 200){
HAL_Delay(60);
Duty = Duty + 10;
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Duty);
}
while(Duty > 0){
HAL_Delay(60);
Duty = Duty - 10;
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Duty);
}
/* USER CODE BEGIN 3 */
}
3.效果
三.串口显示周期脉宽
1.创建项目
设置TIM1通道1为输入捕获并开启输入捕获中断
设置TIM2为PWM输出
2.代码
输入捕获回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
if(htim->Instance == TIM1) //ÅжϷ¢Éú²¶»ñÖжϵĶ¨Ê±Æ÷
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) //Åжϲ¶»ñ·¢ÉúͨµÀ
{
if(CapIndex == 0){
CapVal1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
printf("CapVal1: %d\r\n",CapVal1);
CapIndex = 1;
}else if(CapIndex == 1){
CapVal2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
printf("CapVal2: %d\r\n",CapVal2);
HAL_TIM_IC_Stop(htim, TIM_CHANNEL_1);
CapIndex = 0;
MeasureFlag = 1;
}else{
Error_Handler();
}
}
}
}
while函数
while (1)
{
/* USER CODE END WHILE */
if(MeasureFlag == 1){
if(CapVal1>=CapVal2){
Diff = CapVal2-CapVal1;
}else{
Diff = ((10000-CapVal1)+CapVal2);
}
printf("Period is:%.4fms\r\n",Diff/1.0);
MeasureFlag = 0;
HAL_Delay(1000);
HAL_TIM_IC_Start(&htim1, TIM_CHANNEL_1);
}
//printf("Period is:%.4fms\r\n",Diff/1.0);
/* USER CODE BEGIN 3 */
}