



- int main()
- {
- HAL_TIM_Base_Start_IT(&htim1); //定时器1使能
- HAL_TIM_Base_Start_IT(&htim2); //定时器2使能
- ...
- }
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if (htim->Instance == htim1.Instance)
- {
- ...//定时器1中断业务
- }
- else if(htim-> Instance == htim2.Instance)
- {
- ...//定时器2中断业务
- }
- ...
- }
- /* 定时器2配置为0.1s触发一次中断 */
- /**
- * @brief 定时器中断的回调函数
- * @param htim 触发中断的定时器
- * @retval None
- */
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef * htim)
- {
- if (htim->Instance == htim2.Instance)
- {
- pwm_sum += pwm_value * 10; // pwm_sum累加
- pwm_sum -= pwm_avg; // pwm_sum减去上次的平均值
- pwm_avg = pwm_sum * 1.0 / 5; // 更新pwm的平均值
- pwm_value_final = pwm_avg; // pwm_value_final的值即为当前pwm的频率
- pwm_value = 0; // 将pwm_value清空,重新计数
- }
- }
- /**
- * @brief 外部中断的回调函数
- * @param GPIO_Pin 触发中断的引脚
- * @retval None
- */
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- if (GPIO_Pin == PWM_Pin)
- { // 判断触发引脚是否是定义的引脚
- pwm_value++;
- }
- }