我是靠谱客的博主 激动火龙果,最近开发中收集的这篇文章主要介绍单片机学习笔记——STM32C8T6单片机tim3定时器配置一、TIM3配置代码二、定时器时间计算有几点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

STM32C8T6单片机tim3定时器配置

  • 一、TIM3配置代码
  • 二、定时器时间计算
    • 2.中断服务程序示例
  • 有几点

一、TIM3配置代码

void 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外设
							 
}
TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设

该代码作为定时器的开关使能,可以放在初始化函数中,也可放在主函数中灵活运用。

二、定时器时间计算

定时时间计算公式
定时时间(单位us)=((Prescaler_psc+1)*(Period_arr+1))/TimeClockFren(即定时器1的输入时钟频率(单位MHZ))
C8t6 TIM234 APB2 36MHZ
TIM1 APB1 72MHZ

函数使用

TIM3_Int_Init(99,7199);//20ms定时时间 (arr,psc),计数到99即为2s

2.中断服务程序示例

//定时器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

TIM3_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配置代码二、定时器时间计算有几点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部