STM定时器时钟源选择函数

一、TIM_InternalClockConfig         设置 TIMx 内部时钟

 转到函数定义该函数影响的是从模式控制寄存器(TIMx_SMCR) 从模式选择(SMS)。

 TIM_SMCR_SMS在stm32f10x.h中定义如下。 

#define  TIM_SMCR_SMS        ((uint16_t)0x0007)        /*!< SMS[2:0] bits (Slave mode selection) */

这段代码的目的是将TIMx->SMCR的特定位字段清零,即将它与(~((uint16_t)TIM_SMCR_SMS))进行按位与并赋值。

首先,(uint16_t)TIM_SMCR_SMSTIM_SMCR_SMS强制转换为uint16_t类型,确保它与TIMx->SMCR的数据类型一致。然后,使用~运算符对该值进行按位取反操作,得到一个掩码,将TIM_SMCR_SMS对应的位设置为0,其他位设置为1。

最后,将TIMx->SMCR与这个掩码进行按位与操作,清除TIM_SMCR_SMS的位字段,然后将结果赋值给TIMx->SMCR

TIM_SMCR_SMS = ((uint16_t)0x0007) = 0000 0000 0000 0111
~((uint16_t)TIM_SMCR_SMS) = 1111 1111 1111 1000
TIMx->SMCR &=  (uint16_t)(~((uint16_t)TIM_SMCR_SMS)) = 1111 1111 1111 1000
SMS=000 

从模式选择SMS = 000:关闭从模式如果CEN=1,则预分频器直接由内部时钟驱动。

时钟源确定为内部时钟。

 时钟树走向如下

 

二、TIM_ITRxExternalClockConfig        设置 TIMx 内部触发为外部时钟模式

 转到函数定义。这里我也没有看明白,不过可以确定的是时钟树的走向是正确的。

 继续跳转到TIM_SelectInputTrigger()定义,可以看到与从模式控制寄存器(TIMx_SMCR) 触发选择TS)有关。

 时钟树走向如下

 

三、TIM_TIxExternalClockConfig         设置 TIMx 触发为外部时钟

 转到函数定义。查看TIM_TIxExternalCLK1Source_TI2      ((uint16_t)0x0060)在SMCR寄存器中对应TS=110也就是TI2FP2.

#define TIM_TIxExternalCLK1Source_TI2      ((uint16_t)0x0060)

 时钟树走向如下。

四、TIM_ETRClockMode1Config         配置 TIMx 外部时钟模式 1

 TIM_ETRClockMode1Config 参考TIM_ETRClockMode2Config。

五、TIM_ETRClockMode2Config                 配置 TIMx 外部时钟模式 2

 转到函数定义该函数影响的是从模式控制寄存器(TIMx_SMCR) 外部时钟使能位(ECE)

 

 TIM_SMCR_ECE在stm32f10x.h中定义如下。

#define  TIM_SMCR_ECE        ((uint16_t)0x4000)        /*!< External clock enable */

0x4000对应二进制数为0100 0000 0000 0000。也就是说使能了 从模式控制寄存器(TIMx_SMCR) 的外部时钟使能位(ECE),将时钟源配置为“外部时钟模式2”

 时钟树走向如下

 

六、TIM_ETRConfig         配置 TIMx 外部触发 

 配置ETR的预分频器、极性、滤波器。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32定时器可以用于各种应用,比如延时、PWM、输入捕获、输出比较等。下面是STM32定时器的一些常用函数的详解: 1. 定时器时钟使能函数:`void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)` 该函数用于初始化指定的定时器时钟,并配置相应的GPIO口,以使能定时器。 2. 定时器初始化函数:`HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)` 该函数用于初始化定时器,并配置定时器的基本参数,比如时钟、预分频系数、计数模式等。 3. 定时器启动函数:`HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)` 该函数用于启动定时器,开始计数。 4. 定时器停止函数:`HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)` 该函数用于停止定时器计数。 5. 定时器计数值设置函数:`HAL_TIM_Base_SetCounter(TIM_HandleTypeDef *htim, uint32_t Counter)` 该函数用于设置定时器的计数值。 6. 定时器计数值读取函数:`uint32_t HAL_TIM_Base_GetCounter(TIM_HandleTypeDef *htim)` 该函数用于读取定时器的当前计数值。 7. 定时器中断使能函数:`HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)` 该函数用于使能定时器的中断功能,当定时器计数完成时,会自动触发中断。 8. 定时器中断回调函数:`void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)` 该函数为定时器中断回调函数,当定时器计数完成时,会自动调用该函数。在该函数中可以编写相应的中断处理程序。 以上是一些常用的STM32定时器函数的详解,可以根据需求选择相应的函数进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值