HAL_TIM_PWM源码理解

注:下文提及代码行数均为GENERAL_TIMx_Init();函数体内容,即第三张图片。

通用定时器和高级控制定时器都有 PWM 模式。下面就是讲解用HAL库配置定时器输出PWM模式。HAL_TIM_PWM源码理解_第1张图片


main函数里的前两行作用是复位所有外设,初始化FLASH接口和初始化滴答定时器并配置系统时钟。

SystemClock_Config();函数在前面的一篇文章里已经具体讲解过。

GENERAL_TIMx_Init();我们双击函数名并Go to Definition Of 'GENERAL_TIMx_Init'进入他的函数体如下图


HAL_TIM_PWM源码理解_第2张图片


首先我们看到函数体的最后一行,HAL_TIM_MspPortInit();我们用上面同样的方法进入函数体。HAL_TIM_PWM源码理解_第3张图片


该函数的形参是一个TIM_HandlerTypeDef类型的结构体指针变量。首先定义一个GPIO的API结构体指针变量,通过形参变量htim对应的基地址与GENERAL_TIMx(通过对宏的跟踪我们知道它是TIM3的外设基地址)比较,若满足条件进入if{   }。首先使能TIM3时钟,然后设置引脚号,输出模式,引脚速度,最后通过HAL_GPIO_Init带入配置的引脚参数,此时定时器通道引脚初始化已经完成。

回到GENERAL_TIMx_Init();函数。函数外定义了一个TIM_HandlerTypeDef类型的结构体指针变量htimx。函数内首先定义了三个不同类型的结构体指针变量sClockSourceConfig、sMasterConfig、sConfigOC。

如图第66—71行配置了TIM3的预分频系数和重装载值,时钟分频系数和向上计数模式。外部触发预分频为TIMx->SMCR->ETPS=01,即ETRP频率除以2。

第76行表示复位 – TIMx_EGR寄存器的UG位被用于作为触发输出(TRGO)。如果是触发输入产生的复位(从模式控制器处于复位模式),则TRGO上的信号相对实际的复位会有一个延迟。

第77行表示不使能主从定时器功能。

第80—84行设置了PWM模式1,输出极性高电平有效,以及输出比较1 快速失能 。

到此,定时器pwm模式 配置完毕。


回到main函数。  HAL_TIM_Base_Start_IT(&htimx);开启定时器中断。

  HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_3);开启定时器通道3输出PWM方波。


最后一个函数:    __HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL_3,indexWave[pwm_index]);修改特定的定时器通道的比较寄存器的值(占空比)。

      

你可能感兴趣的:(单片机,单片机,定时器,源码分析)