资源描述:
《stm32系统滴答定时器(systick)彻底研究完美解读并且,鄙视5个券的二货》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、STM32系统滴答定时器(Systick)彻底研宄解读stm32系统滴答定时器(Systick)彻底研宄解读SysTick起那些TIM纪时器可以说简单多啦—^的心情也好了不少,嘎嘎!!armCortex-M3内核的处理器内部包念了一个SysTick定时器,它是一个24位的倒计数定时器,注意,是倒计数!当计到0时它就会从LOAD寄存器中自动重装载定时初值。只耍不把CTRL寄存器中的ENABLE为淸0,它就永不停息!遗憾的是,SysTick定时器在《STM32参考手册》里一个屁都没放,只荇在(ARMCortex-M3技术参考手册》和《ARMCortex-
2、M3权威指兩》才找到相关寄存器的介绍。一、SysTick的时钟來源我先来看看STM32的吋钟树72MHzmaxClockEnable_HCLK一、、‘toAHBbus,core.y1►memoryandDMA>toCortexSystemtimer
3、ahb
4、APB1Prescaler■Prescaler/1,2..512/1,2,4,8,16>FCLKCortexfreerunningclockPCLK136MHzmaxtoAPB1PeriphealClockPeriPheralsTheRCCfeedstheCortexSystemTimer(Sys
5、Tick)externalclockwiththeAHBclock(HCLK)dividedby8.TheSysTickcanworkeitherwiththisclockorwiththeCortexclock(HCLK),configurableintheSysTickControlandStatusRegister.上血这段活的意思是,SysTick的吋钟来源可以是HCLK的8分频或就是HCLK,具体足哪种可通过配控制和状态寄存器(CTRL)"來选择。二、SysTick的寄存器简介SysTick的寄存器-共奋4个。控制和状态寄存器CTRL(复位
6、值(k0000(M)«0)位段名称类型描述16COUNTFLAG只读计数到()时置1;读取该位将清()CLKSOURCE可读可写时钟来源(MICLK/8:HIICLK1TICKINT可读可写1时芦兰SysTick异X请求0ENABLE可读可写使能位,即定时器的开关,1有效重装值寄存器LOAD(复位值不可预测)位段名称类型描述23:0RELOAD可读可写当计数到()时将被重装载的值当前值寄存器VAL(复位值不可敢测)位段名称类型描述23:()CURRENT可读可写读取时返互当前倒计数的值;向该寄存器写入任意值者]可以将其洧除变为0。清0该寄存器还会导致
7、CTRL寄存器的COUNTFLAG位済零、另外还冇一个校准值寄存器CALIB,锊吋用不到,先不<1它!三、SysTick的序函数1、寄存器定义在哪里?答:在core_cm3.h中!typedefstruct{_I0uint32JCTRL;_I0uint32—tLOAD;_I0uint32—tVAL;Iuint32tCALIB;}SysTick_Type;#defineSysTick((SysTick_Type*)SysTick_BASE)2、函数在哪里?在V3.3的函数库中关于SysTick的函数只有网个。一个足迕misc.C文件屮的SysTick_
8、CLKSourceConfig函数,它足一个时钟源配罝函数:另一个是在core_cm3.h文件屮的SysTick_Config函数,它的输入参数只存一个,传给了茧装值寄存器LOAD,另外还将VAL寄存器消0了,此外还将CTRL寄存器屮的[2:0]三位都没为了1,分别是使用HCLK时钟,允许异常请求,开启计数器。在misc.C文件域后有下面一个函数y**功能:配罝SysTick时钟源*@输入參数:SysTick_CLKSource:指定SysTick时钟源.*该参数可以是以下其中一个值:*@SysTick_CLKSource_HCLK_Div8:AHB
9、时钟8分频作为SysTick时钟源*@SysTick_CLKSource_HCLK:AHB时钟作力SysTick时钟源.*/voidSysTick一CLKSourceConfig(uint32」SysTick一CLKSource){/*参数检杏*/assert_param(IS-SYSTICK一CLK_SOURCE(SysTickJZLKSource));if(SysTick_CLKSource==SysTick一CLKSource_HCLK){SysTick->CTRL
10、=SysTick_CLKSource—HCLK;}else{SysTick->
11、CTRL&=SysTick一CLKSource一HCLK_Div8;}}在core_cm3.h屮冇一个Sys