历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2020年10月19日 | 浅谈STM32F10X芯片SysTick系统时钟定时器

发布者:和谐共融 来源: 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系统  时钟定时器 引用地址:浅谈STM32F10X芯片SysTick系统时钟定时器

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

推荐阅读

        如果你还不满足于全面屏版的Apple iWatch Series 4,现在,奢侈品制造公司BRIKK打造了一款18K定制版Lux Watch 4,说不定你会相中它。  虽然功能上和苹果官网的iWatch一样,但是金光闪闪的18K金边框,却能直观区别基本款,BRIKK表示,这个样式来自长达5年时间的研发设计,全新的151度斜边是定制款Apple Watch的亮点(有40or44mm可...
随着电子产品功能性的多样化,产品对电源种类也越来越多了。车载信息系统产品电源一般是是由外界提供 12V 电源输入,通过各种 LD0 和 DC-DC 电源芯片转化供给各功能模块使用。其中,LD0 电源芯片虽然有其占用面积小,成本低,稳定性好,低噪声等多方优点,但由于受限于输入输出电压差不能太大影响,一般选择用于电源降压转换。而开关电源芯片因其效...
10月19日消息,近日,在无锡联勤保障中心某部的任务现场,保管员穿上单兵机械外骨骼系统搬运报废武器。这是机械外骨骼首次亮相报废武器销毁一线!有了全新装备助力,不仅搬运工作更轻松,而且大大降低了安全风险。据悉,外骨骼机器人技术是融合传感、控制、信息、融合、移动计算,为作为操作者的人提供一种可穿戴的机械机构的综合技术。本文简要介绍了军事...
电动汽车,并不只是“四个轮子的iPhone”那样简单。 在今年鸿海科技日上,鸿海集团创始人郭台铭将一辆电动汽车开到了现场。 伴随着《生日快乐》的BGM和现场观众的鼓掌,主持人揭晓了预热许久的三款新车——Model E、Model C以及Model T。 没错,新车采用了和特斯拉如出一辙的命名方式。 郭台铭感慨道:“今天就我个人而言,(这款车)是我71岁以来收到...

史海拾趣

问答坊 | AI 解惑

IBM全新半导体技术助力单芯片手机解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 IBM在微电子方面的创新以及公司在单芯片系统设计方面的基础性工作已经改变了整个半导体世界。IBM的创造性成果包括高K值——增强了晶体管的功能同时使其超越了当今的局限,另外还包括双 ...…

查看全部问答∨

电子设计论文

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 跪求一下电子设计历年大赛的电源类论文哈。。我们组想参考一下。。主要是老师比我们做出几个做平来。。。一下子难得想咯哦。。。  …

查看全部问答∨

05年论文1

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 05年论文1,E题报告WORD版。  …

查看全部问答∨

FPGA高级指导书

跟大家分享一下…

查看全部问答∨

买的LM3S8962开发板用IAR+JLINK无法调试下载

非常简单的实例主程序 #define HWREG(x) (*((volatile unsigned long *)(x))) #define SYSCTL_BASE 0x400FE000 #define RCGC2 (SYSCTL_BASE + 0x108) #define GPIOA_BASE 0x4000 ...…

查看全部问答∨

大家在用的WINCE60对SD卡支持的容量最大是多少?我的怎么只能支持2GB的SD卡?怎么改大?

大家在用的WINCE60对SD卡支持的容量最大是多少?我的怎么只能支持2GB的SD卡?怎么改大?…

查看全部问答∨

2410b+教学实验平台,dnw2410 无回显

已经把boot.bin烧写到block 0 把EBOOT.nb0烧写到block 2 上 连接好dnw2410 ,打开电源,dnw2410上没有回显的信息。 我怀疑是数据线问题,可是数据线是新的,但把下串口数据线dnw2410上依然显示连接上的信息 怎么能判断串口数据线是否连接到arm9 ...…

查看全部问答∨

串口啊串口

我向串口发送数据时 本来是一桢数据,但在串口收到的却是两桢。请问这是怎么回事。 比如我向串口发送: AA BB 00 CC 99 但我用串口调试精灵收到的却是: AA BB 00 CC 99 我是这么发送的,当满足发送条件时调用下面的函数: void send_info() ...…

查看全部问答∨

虚拟网卡如何编写?

我希望写一个虚拟网卡驱动, 这个驱动完成的功能是, 可以在添加硬件里面添加这个驱动,然后在网络里显示一个本地连接,可以设置ip,在设备管理器里多了一个虚拟网卡. 然后再创建一个设备,设备可以和这个虚拟网卡进行通信. 设备和虚拟网卡都在同一个 ...…

查看全部问答∨

两次遇到的面试题目求解

AT89C51为8051系列中比较通用的1个芯片,如果用C语言编写程序,子函数可以被调用最大多少层,为什么? 不知道怎么考虑 从RAM空间,堆栈深度考虑吗? C语言调用函数时,入栈的除了ACC,DPTR,通用寄存器还有什么,子函数被调用时单片机是如何动作的…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved