当前位置:首页 > 单片机 > 单片机
[导读]上来就是systick定时器,因为GPIO等的基础操作过于简单,网上资料太多了。这里讨论的是基于STM32F10x 的基于 V3.5.0库的库函数配置方法。Systick又叫系统嘀答定时器,是一个24位的硬件定时器。嵌入式操作系统常有一个

上来就是systick定时器,因为GPIO等的基础操作过于简单,网上资料太多了。
这里讨论的是基于STM32F10x 的基于 V3.5.0库的库函数配置方法。

Systick又叫系统嘀答定时器,是一个24位的硬件定时器。嵌入式操作系统常有一个类似“心跳”的定时器,来分配时间片,实现宏观上的多任务。
其实,操作系统的多任务,在微观上,CPU对多任务的管理是分时的。每个任务都给一定的时间片,就是把时间分成N个等份,优先级高或是
重要的任务多占几个时间片,优先级低的或是不重要的任务就少占几个时间片。大部分嵌入式操作系统基于时间片的。如ucos。

那基于STM32F10x V3.5.0库如何操作Systick定时器呢。
首先:STM32 的内核库已经提供了这个功能。只要配置SysTick_Config()即可实现。
看下面的程序段。
/*
* 函数名:SysTick_Init
* 描述 :启动系统滴答定时器 SysTick
* 输入 : 无
* 输出 :无
* 调用 : 外部调用
*/
void SysTick_Init(void)
{
if(SysTick_Config(SystemCoreClock/1000)) //1ms定时器
{
while(1);
}
//SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //若无法启动则关闭
}

SysTick_Config的参数,其实就是一个时钟次数,叫systick重装定时器的值。意思就是我要多少个1/fosc 时间后中断一下。

根据学过的物理中的时间与频率的公式:fosc=1/T T=1/fosc ,fosc为系统的频率。
如果STM32时钟频率为:72MHz,每次的时间为:T=1/72MHz。1秒钟为:1/(每次的时间)=1/(1/72MHz)=72 000 000次。1MHz是:1000 000。

反过来讲。SysTick_Config(72000)代表:72000*(1/72MHz)=1/1000=1(ms)。即定时为1ms。
如果需要1S则,可以通一设置一个全局变量,然后定初值得为1000,这样,每个systick中断一次,这个全局变量减1,减到0,即systick中断1000次,时间
为:1ms*1000=1S。从而实现1S的定时。

因为SysTick定时器是:24位的,最大定时时间为:2的24次方*(1/72MHz)的时间,这里系统频率为:72MHz的情况下。

如何使用这个Systick用于程序设计上的延时或是定时作用呢?
如下:
__IO uint32_t TimingDelay;
定义一个全局变量,注意类型为 volatile的。

volatile的作用: 作为指令关键字,确保本条指令不会因为编译器的优化而省略,且要求每次直接读值.然后定义一个延时或是定时函数:


/*
* 函数名:Delay_ms
* 描述 :ms延时程序,1ms为一个单位
* 输入 : - nTime
* 输出 :无
* 示例 : Delay_ms(1) 实现的延时为:1*ms=1ms
* 调用 :外部调用
*/
void Delay_ms(uint16_t nTime)
{
TimingDelay = nTime;
//使能系统滴答定时器
while(TimingDelay !=0);
}

还要在系统的中断函数文件:stm32f10x_it.c/h里面,修改系统自带的systick函数。这个函数要么没有声明或是为空操作。这里加入
定时延时里的处理。
即中断后,全局变量做个--处理即可。

在::stm32f10x_it.c里修改如下:
添加外部的声明:
extern __IO uint32_t TimingDelay;

修改这个函数: SysTick_Handler,这是系统的关于SysTick_Handler的中断服务程序名,
在启动文件里如:startup_stm32f10x_hd.s 有它的定义的名字。不要弄错了。否则无法中断处理。


/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}


以上,即定义配置好了Systick定时器。如何使用呢?
很简单。
Delay_ms(500); 即为延时500ms。


当然,使用前,请先初始化:
SysTick_Init();
否则无法使用并影响后续的程序运行,这个很重要,就像打开了串口中断,你不清标志位,也同样在接收字符后,CPU中断在那里,而不能继续执行!。使用外设功能,需要初始化!


以上基本讲完了。主要是加入了自己的理解。

以下为搜索的一些其他理解。

SysTick_Config(SystemFrequency / 10) 函数的形参就是systick重装定时器的值。

systck计数频率为每秒72000000次,所以7200000次就是1/10秒,也就是100ms。


SysTick是1个24bit递减计数器,通过对SysTick控制与状态寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频(9M,缺省是这个)作为SysTick的时钟源。
SysTick的重装寄存器决定了定时器频率。


若SysTick的时钟源是72M, SystemFrequency = 72000000Hz
所以 SysTick_Config(SystemFrequency / 1000); 就是1ms时基。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭