STM32C8T6单片机tim3定时器配置
- 一、TIM3配置代码
- 二、定时器时间计算
- 2.中断服务程序示例
- 有几点
一、TIM3配置代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25void TIM3_Int_Init(u16 arr,u16 psc) //运行模式中断 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 // TIM_Cmd(TIM3, ENABLE); //使能TIMx外设 }
1
2TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
该代码作为定时器的开关使能,可以放在初始化函数中,也可放在主函数中灵活运用。
二、定时器时间计算
定时时间计算公式
定时时间(单位us)=((Prescaler_psc+1)*(Period_arr+1))/TimeClockFren(即定时器1的输入时钟频率(单位MHZ))
C8t6 TIM234 APB2 36MHZ
TIM1 APB1 72MHZ
函数使用
1
2TIM3_Int_Init(99,7199);//20ms定时时间 (arr,psc),计数到99即为2s
2.中断服务程序示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14//定时器2中断服务程序 void TIM2_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { //用户代码 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源 } }
有几点
①定时器初始化函数放在所有初始化函数之后。
②单片机数据手册查询数据手册
https://www.findic.com/jiage/stm32f103zet6-KL7VVGq1Q.html
③
代码里的预分频器设置为0,应该频率为原时钟频率的两倍也就是72Mhz
1
2
3
4
5
6
7
8
9TIM3_Int_Init(99,7199);//定时时间为(99+1)*(7199+1)/(36*2)=10000us=10ms=0.01s(arr,psc),计数到99即为0.01*99约等于1s,与实际测试结果符合 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设 //5Khz的计数频率,每计一个数表示过了 0.0002秒,重装值9999, // //定时时间计算公式 //定时时间(单位us)=((Prescaler_psc+1)*(Period_arr+1))/TimeClockFren定时器1的输入时钟频率(单位MHZ) //C8t6 TIM234 APB2 36MHZ // TIM1 APB1 72MHZ
④(此点转载)
Keil工程菜单提供了配置主频的选项,这个参数只用于软件仿真的,对于硬件仿真或者直接把程序下载到板子里是没有影响的。
Xtal 后面的数值是晶振频率值,默认值是所选目标 CPU 的最高可用频率值 。该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同。
————————————————
版权声明:本文为CSDN博主「Hynson」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Bluechalk/article/details/84498291
最后
以上就是激动火龙果最近收集整理的关于单片机学习笔记——STM32C8T6单片机tim3定时器配置一、TIM3配置代码二、定时器时间计算有几点的全部内容,更多相关单片机学习笔记——STM32C8T6单片机tim3定时器配置一、TIM3配置代码二、定时器时间计算有几点内容请搜索靠谱客的其他文章。
发表评论 取消回复