定时器2进行定时20ms

首先我们看一下总图

 从图中可以看出TR2=1才能使定时器工作

 

 

经过上面知道我们可以通过T2CON来控制定时器的工作方式

也就是说当定时器2计数满以后,就会按照RCAP2H ,RCAP2L中的值从新装入TH2,TL2.

还有就是如果C/T2位来决定是外部通过交叉开关的负跳变还是通过定时器,我们肯定选择C/T2=0

来选择定时器溢出作为自动重装载。可以经过最上面的总图看出

 我们可以通过看着个到上图的T2可以用过交叉开关作为计数来源,

下面我们来详细看一下配置过程

1.设置时钟为外部时钟

 2.T2工作在自动重装载16位定时器

 3.设定计数时间

 4.在中断中清除标志位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是STM32定时器4定时20ms的基本代码示例: ```c #include "stm32f10x.h" void TIM4_IRQHandler(void) { // 在这里执行你需要的操作 // 例如设置一个标志位来指示定时器已经触发 // 或者执行一些其他的任务 // ... // 清除定时器中断标志位 TIM_ClearITPendingBit(TIM4, TIM_IT_Update); } void TIM4_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; // 使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // 定时器的配置 TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 前置分频器值,用于将计数器时钟分频 TIM_TimeBaseStructure.TIM_Period = 1999; // 自动重载寄存器值,用于设置计数器的周期 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数器计数模式为向上计数 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); // 使能定时器中断 TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); // 配置定时器中断优先级 NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 启动定时器 TIM_Cmd(TIM4, ENABLE); } int main(void) { // 初始化定时器 TIM4_Config(); while (1) { // 在这里执行其他的任务 // ... } } ``` 在这个示例中,我们使用了STM32的定时器4来产生20毫秒的时间间隔。我们将定时器时钟的前置分频器设置为7199,这样计数器时钟的频率为72MHz / (7199+1) = 10kHz。我们将自动重载寄存器的值设置为1999,这样计数器的周期为2000个时钟周期,即20毫秒。在中断服务程序中,我们执行了一些需要定时器周期性触发的操作。最后,我们启用了定时器中断,并在主循环中执行其他任务。 需要注意的是,不同型号的STM32微控制器可能具有不同的寄存器和功能,因此需要根据实际情况进行定时器配置。同时,如果要使用其他的定时器产生20毫秒的时间间隔,需要根据定时器的时钟和自动重载寄存器的值进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值