当我们使用cubemx配置stm32进行pwm输出或者输入捕获等需要利用定时器某通道时,时钟源选择“disable”,却依然能输出pwm?
你是不是觉得这个问题很角度很奇怪?但它之前一直在困惑我
我们在配置定时器的时候,肯定是需要选择时钟源的,要么来自外部(ETR2),要么内部(Internal Clock)。基于这个疑问,我通过查找设置定时器选择始终源的函数的底层寄存器操作代码:
下面以LL库为例:
初始化定时器里调用了函数
LL_TIM_SetClockSource(TIMx,LL_TIM_CLOCKSOURCE_xxxxxx);
这个函数包装着定时器SMCR(slave mode control register)的操作
MODIFY_REG(TIMx->SMCR,TIM_SMCR_SMS|TIM_SMCR_ECE,LL_TIM_CLOCKSOURCE_xxxxx);
到这好像也没什么问题,后面我找了一下 “LL_TIM_CLOCKSOURCE_xxxxxx”的定义,才发现内部时钟源的定义是 0X00000000U,只要你打开了相应的定时器通道,那么说不管你选不选其实MCU内部默认的定时器时钟源都是内部时钟。
#define LL_TIM_CLOCKSOURCE_INTERNAL 0X00000000U
#define LL_TIM_CLOCKSOURCE_EXT_MODE1 0X00004UL|0X00002UL|0X00001UL
#define LL_TIM_CLOCKSOURCE_EXT_MODE2 0X00001UL<<14