您的位置 首页 设计

STM32学习手记④-TIM3上溢出守时

TIM3是属于通用定时器,程序中采用APB1的时钟(PCLK1),72MHz。程序中TIM3采取上溢出,即0—ARR时溢出。上述程序的TIM3的频率为(PCLK1*2)(3

TIM3是归于通用守时器,程序中选用APB1的时钟(PCLK1),72MHz。

程序中TIM3采纳上溢出,即0—ARR时溢出。
上述程序的TIM3的频率为(PCLK1*2)/(36000-1+1)=2KHz,其间PCLK1为36MHz,故计数2000次为1s

运用守时器守时的过程:
1、在RCC里翻开相应的守时器时钟
2、在NVIC里翻开相应的中止
3、在TIMx_Configuration()进行相应的设置,大致过程为
a)TIM_TimeBaseStructure.TIM_Period = 2000-1; // 主动重装载寄存器周期的值(守时时刻) 累计 2000个频率后产生个更新或许中止(也是说守时时刻到),也便是ARR的值
b) TIM_TimeBaseStructure.TIM_Prescaler =36000-1;//时钟预分频数 例如:时钟频率=72M/(时钟预分频+1)
c) TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //守时器形式 向上计数
d) TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时刻切割值
e) TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//初始化守时器3
f) TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //翻开中止 溢出中止
g) TIM_Cmd(TIM3, ENABLE);//翻开守时器

/*****************************************************************************例程称号:TIM3硬件衔接:指示灯衔接  PE0功用描绘:用TIM3守时1s,指示灯闪耀一下**/#include "stm32f10x_lib.h"/******************************************************************************************* 函数称号    :void RCC_Configuration()* 功用描绘    : 复位和时钟操控 装备* 参数        :  无* 返回值      :  无* 大局变量    :  无* 大局静态变量:  无* 部分静态变量:  无******************************************************************************************/void RCC_Configuration(){ErrorStatus HSEStartUpStatus;                                                    //界说外部高速晶振发动状况枚举变量RCC_DeInit();                                                                                 //复位RCC外部寄存器到默认值RCC_HSEConfig(RCC_HSE_ON);                                                           //翻开外部高速晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();                          //等候外部高速时钟准备好if(HSEStartUpStatus==SUCCESS){                                                     //外部高速时钟现已准备好FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //敞开FLASH预读缓冲功用,加快FLASH的读取。一切程序中有必要的用法,方位:RCC初始化子函数里边,时钟起振之后FLASH_SetLatency(FLASH_Latency_2);                                       //FLASH时序推迟几个周期,等候总线同步操作。引荐依照单片机体系运转频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。RCC_HCLKConfig(RCC_SYSCLK_Div1);                                 //装备AHB(HCLK)==体系时钟/1RCC_PCLK2Config(RCC_HCLK_Div1);                                              //装备APB2(高速)(PCLK2)==体系时钟/1  RCC_PCLK1Config(RCC_HCLK_Div2);                                              //装备APB1(低速)(PCLK1)==体系时钟/2//注:AHB首要担任外部存储器时钟。APB2担任AD,I/O,高档TIM,串口1。APB1担任DA,USB,SPI,I2C,CAN,串口2345,一般TIM。RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);           //装备PLL时钟==(外部高速晶体时钟/1)* 9 ==72MHzRCC_PLLCmd(ENABLE);                                                                   //使能PLL时钟while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);         //等候PLL时钟安排妥当RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                        //装备体系时钟==PLL时钟while(RCC_GetSYSCLKSource()!=0x08);                                      //等候体系时钟源的发动}//------------------------以下为敞开外设时钟的操作-----------------------////   RCC_AHBPeriphClockCmd (ABP2设备1 | ABP2设备2 , ENABLE); //发动AHB设备//   RCC_APB2PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //发动ABP2设备//   RCC_APB1PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //发动ABP1设备RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);  //翻开GPIOE 和 AFIO时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);         //翻开TIM2时钟} /******************************************************************************************* 函数称号    : NVIC_Configuration(void)* 功用描绘    : NVIC(嵌套中止操控器)装备* 参数        :  无* 返回值      :  无* 大局变量    :  无* 大局静态变量:  无* 部分静态变量:  无******************************************************************************************/ void NVIC_Configuration( ){NVIC_InitTypeDef NVIC_InitStructure;                           //界说一个中止结构体//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);                    //设置中止向量表的开始地址为0x08000000//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                      //抢占式优先等级设置为无抢占优先级//注:总共16个优先级,分为抢占式和呼应式。两种优先级所占的数量由此代码确认,NVIC_PriorityGroup_x可所以0、1、2、3、4,//别离代表抢占优先级有1、2、4、8、16个和呼应优先级有16、8、4、2、1个。规则两种优先级的数量后,一切的中止等级有必要在其间挑选,//抢占等级高的会打断其他中止优先履行,而呼应等级高的会在其他中止履行完优先履行。NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;;              //指定中止源NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                         //指定呼应优先等级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                     //指定抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                              //翻开 中止通道 NVIC_Init(&NVIC_InitStructure);                                                        //初始化} 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/319399.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部