浅谈STM32F10X芯片SysTick系统时钟定时器

2020-10-19来源: eefocus关键字:STM32F10X芯片  SysTick系统  时钟定时器

1、介绍

实现Cortex-M3系统定时器SysTick的配置,需要具备以下知识:Cortex-M3系统定时器默认频率是HCLK的8分频(如下图所示),因此需要会RCC时钟的配置;然后配置SysTick系统定时器;编写SysTick中断处理函数。



系统时钟及系统定时器时钟(详见手册)


2、寄存器描述

SysTick控制及状态寄存器STK_CTRL


SysTick重装载数值寄存器STK_LOAD


SysTick当前数值寄存器STK_VAL


SysTick校准数值寄存器STK_CALIB


 

与SysTick相关的固件库函数有以下几个:


配置SysTick系统时钟:SysTick_CLKSourceConfig();


设置SysTick重装值:SysTick_SetReload();


使能或除能SysTick定时器:SysTick_CounterCmd();


使能或除能SysTick定时器中断:SysTick_ITConfig();


获取SysTick时钟当前值:SysTick_GetCounter();


检测SysTick标志位是否设置:SysTICK_GetFlagStatus();


3、SysTick配置流程

首先配置RCC:选择系统时钟、配置总线时钟、使能外围设备时钟等;


配置NVIC:选择中断优先级组,设置SysTick中断优先级,使能SysTick中断通道;


编写SysTick中断处理函数;


配置SysTick时钟:


设置SysTick时钟源(不需要,默认选择HCLK的8分频作为SysTick系统定时器的时钟源):调用SysTick_CLKSourceConfig()函数;


设置SysTick时钟重装值:调用SysTick_SetReload();


使能SysTick时钟中断(根据具体应用需要):调用SysTick_ITConfig()函数;


使能SysTick时钟:调用SysTick_CounterCmd()函数;


然后还可以调用SysTick_GetCounter()函数获取SysTick系统时钟计数器的当前值;也可以调用SysTick_GetFlagStatus()函数检查指定的SysTick标志位是否设置(没有开启中断,通过软件查询方式检查系统定时器是否计数到0)。


SysTick系统定时器的中断标志位在系统时钟节拍控制与状态寄存器CTRL的COUNTFLAG位,该位由定时器计数到0置1,读取时清零。因此可以调用函数SysTick_GetFlagStatus(SysTick_FLAG_COUNT)来清除COUNTFLAG标志位。


经过测试:不调用SysTick_GetFlagStatus(SysTick_FLAG_COUNT)函数来清除标志位,在每次系统时钟节拍SysTick在计数为0时,也都能进入中断处理函数。但程序的严密性考虑,最好还是调用该函数。


4、SysTick系统定时器例子

例子1:


/* 主函数中配置,这里没有选择SysTick的时钟源,是因为c8芯片已经将该时钟固化成HCLK的8分频了 */


SysTick_SetReload(9000);


SysTick_ITConfig(ENABLE);


SysTick_CounterCmd(SysTick_Counter_Enable);


/*中断处理函数*/


void SysTick_Handler(void)   /* 1ms中断一次 */


{


        if(SET == SysTick_GetFlagStatus(SysTick_FLAG_COUNT))   /* 读标志位,同时清除标志位 */


        {


               SysCount++;


               if(500 == SysCount)


               {


                    SysCount = 0;


                     count++;


               }


        }


}


例子2:


/* 主函数配置 */


SysTick_SetReload(9000);


SysTick_ITConfig(ENABLE);


/* 延时函数,延时nms */


void Delay(u32 nTime)


{


  //开启SysTick计数器


  SysTick_CounterCmd(SysTick_Counter_Enable);


  TimingDelay = nTime;


  while(TimingDelay != 0);     //死等待


  //关闭系统滴答


  SysTick_CounterCmd(SysTick_Counter_Disable);


  //清除SysTick 计数器


  SysTick_CounterCmd(SysTick_Counter_Clear);


}


/* 中断处理函数 */


void SysTick_Handler(void)


{      /* 没有清除标志位,在计数为0时,同样可以进入中断处理函数实现TimingDelay自减工作 */


   if (TimingDelay != 0x00)


  {


    TimingDelay--;


  }


}


关键字:STM32F10X芯片  SysTick系统  时钟定时器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic513582.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F10x芯片RTC实时时钟
下一篇:STM32 Nucleo Shield显示板卡,简化超低功耗设备GUI设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F10x芯片GPIO/AFIO端口配置总结
1、介绍STM32F10x芯片的GPIO/AFIO配置主要包括以下几方面知识:在时钟控制模块中配置好相应总线时钟,并在总线上使能对应的GPIO口(AFIO口,需要的话)时钟后:根据需求配置相应GPIO端口为对应的输入/输出模式,按需求更改/读取端口的数据;端口功能重映射;若用外部中断,则将中断线与对应引脚链接起来。STM32F10x芯片的每个GPIO端口都有7个相关的寄存器:2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx
发表于 2020-10-28
STM32F10x芯片RTC实时时钟
,而读他们则只需要等待同步完成(RSF置1)通过APB1接口读取);每次调用RTC配置函数之后需要调用RTC_WaitForLastTask()等待本次配置成功。EXTI配置:若需要将RTC于EXTI线17相连,则配置EXTI线17为中断/事件模式;NVIC配置:若要产生中断,则配置中断向量控制器,使能EXTI15_10_IRQHandler中断,或者使能RTC_IRQHandler中断;编写中断处理函数:注意一定要在中断处理函数中调用RTC_ClearITPendingBit()函数清除对应的中断标志位;5、RTC配置实例void NVIC_Configuration(void){       
发表于 2020-10-19
STM32F10x芯片时钟控制总结
1、介绍        STM32F10x芯片的时钟控制主要包括以下几个方面知识:时钟源的选择(HSE、HIS、PLL)、系统时钟频率的配置、总线(AHB、APB2、APB1)时钟的配置、总线(AHB、APB2、APB1)设备时钟的使能/除能、总线(AHB、APB2、APB1)设备的复位。 2、系统时钟框图 STM32F10x可以用三种不同的时钟源来驱动系统时钟(SYSCLK):HSI振荡器时钟;HSE外部时钟和PLL时钟。他们之间的关系如附件所示(时钟树)。 从时钟树中可以看出一下几点: l     
发表于 2016-08-03
STM32F10x芯片GPIO/AFIO端口配置总结
1、介绍 STM32F10x芯片的GPIO/AFIO配置主要包括以下几方面知识:在时钟控制模块中配置好相应总线时钟,并在总线上使能对应的GPIO口(AFIO口,需要的话)时钟后:根据需求配置相应GPIO端口为对应的输入/输出模式,按需求更改/读取端口的数据;端口功能重映射;若用外部中断,则将中断线与对应引脚链接起来。 STM32F10x芯片的每个GPIO端口都有7个相关的寄存器:2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器
发表于 2016-08-03
<font color='red'>STM32F10x</font><font color='red'>芯片</font>GPIO/AFIO端口配置总结
浅谈STM32F10X芯片RTC实时时钟
_WaitForLastTask()等待本次配置成功。 ?         EXTI配置:若需要将RTC于EXTI线17相连,则配置EXTI线17为中断/事件模式; ?         NVIC配置:若要产生中断,则配置中断向量控制器,使能EXTI15_10_IRQHandler中断,或者使能RTC_IRQHandler中断; ?         编写中断处理函数:注意
发表于 2016-08-03
浅谈<font color='red'>STM32F10X</font><font color='red'>芯片</font>RTC实时时钟
STM32-systick系统定时器
systick系统定时器系统定时器存在内核中,是24位的定时器,只能向下递减,嵌套在NVIC中counter 在时钟的驱动下 在reload的初值开始向下递减计时到0,产生中断置位标志然后又从reload值开始重新递减计数,循环定时时间计算t=reload*(1/clk)clk=72M时,t=72*(1/72m)=1usclk=72M时,t=72000*(1/72m)=1msclk=72M时,t=72000000*(1/72m)=1s1s=1000MS =1000 000US=1000 000 000NSsysTick属于内核中的外设,他的中断优先级和外设的中断优先级相比,哪个高?sysTick中断优先级配置的是scb->
发表于 2020-03-01
STM32-<font color='red'>systick</font><font color='red'>系统</font>定时器
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved