基于STM32CubMX和HAL库的外设开发(八、定时器)

基于STM32CubMX和HAL库的外设开发

第八讲 定时器

8.1 定时器原理

  • 在stm32的内部计数寄存器中,有一个寄存器初值,随着时钟每增加一个脉冲,相应的寄存器初值就会减少1
  • 当计数到0时,再来一个脉冲就会产生中断,(假设此时过了N个时间脉冲)用户计数器就会加1。因此,用户计数器每加1,就相当于过了N个时间脉冲
  • 由此看来,我们可以通过改变寄存器初值来改变用户计数的快慢(即脉冲个数的多少)

8.2基本定时器的单脉冲触发

示例一:用TIME4产生1s定时,1s定时到达时,GPIO-PB5接的LED3反转

8.2.1定时器配置

打开定时器中的单脉冲模式
在这里插入图片描述

8.2.2代码实现
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

 HAL_TIM_Base_Start_IT(&htim4);

8.3时基单元

时基单元包括:

● 计数器寄存器 (TIMx_CNT) Counter

● 预分频器寄存器 (TIMx_PSC) Prescaler

● 自动重载寄存器 (TIMx_ARR) Auto-Reload Register
在这里插入图片描述

  • 预分频器的工作就是对其输入时钟CK_PSC进行分频,产生CK_CNT时钟用于驱动计时器计数。
  • 计数器在CK_CNT的驱动下向上或者向下计数, 具体由控制寄存器CR1的DIR位决定。
  • 自动重载寄存器定义了计数器只能在0与该寄存器的值ARR之间计数。 每当计数器向上计数到达ARR(或者向下计数到达0时)就会产生一次UEV更新事件,如果开启了中断,将相应的产生中断信号。

8.4通用定时器的基本定时

示例二:用TIME4产生1s定时,LED4以1s频率闪烁

基本定时的配置方法

在时钟中配置输入时钟CK_PSC
在这里插入图片描述
配置psc和arr
在这里插入图片描述

计算公式:实际频率=总线时钟/(psc+1)/(arr+1)
eg:总线时钟频率为32MHz,预分频系数是3200-1,则CK_CNT频率为10000,因为arr是10000-1,计数10000-1次,所以最后频率为1Hz

在这里插入图片描述
使能中断

代码实现
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

 HAL_TIM_Base_Start_IT(&htim4);

8.5通用定时器的外部时钟模式

示例三:用GPIO模式从PE5引脚输出频率为1Hz的脉冲序列信号,用定时器TIME4计算PE5引脚的脉冲数,当脉冲数达到10时,点亮LED3灯

外部时钟模式的配置方法

在这里插入图片描述
ETR2从外部引脚获得的脉冲
PE0与PE5相接

代码实现
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

 HAL_TIM_Base_Start_IT(&htim4);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
HAL_Delay(500);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值