历史上的今天
返回首页

历史上的今天

今天是:2025年05月18日(星期日)

正在发生

2018年05月18日 | STM32 SysTick 精确延时(非中断方式)

2018-05-18 来源:eefocus

SysTick是Cortex-M内核自带的一个24位定时器,所以我们可以在core_cm3.h或core_cm4.h头文件中看到它的寄存器定义和配置函数SysTick_Config()。SysTick的功能非常简单,仅仅提供一个时基功能,支持中断请求,因此它的寄存器寥寥无几。

以下是手册上对SysTick寄存器的介绍:


CTRL为控制寄存器:

ENABLE:使能位

TICKINT: 中断的开关,当计数溢出且TICKINT=1时SysTick将发出中断申请。

CLKSOURCE:时钟选择位,CLKSOURCE=1时选择系统时钟,如果是M3则为72MHz,M4则为168MHz。否侧选择外部时钟作为时钟源。

COUNTFLAG: 溢出标志位,计数到0时置1,而且硬件自动清零。

LOAD为重载值寄存器:

当计数到0时SysTick自动将此寄存器的值加载到VAL寄存器中。注意它是24位的,所以最大值为0XFFFFFF。

VAL为当前值寄存器:

SysTick是从上往下计数的,所以此寄存器的值是递减的。

那么,了解了SysTick的寄存器之后就可以配置它了。首先将CLKSOURCE位置1,选择系统时钟作为时钟源,以M4内核为例,就是168MHz。为了让SysTick每1us溢出一次,就须要把重载值设置为167(168-1)。当需要延时n(us)时,就将ENABLE位置1,让SysTick开始计时,然后等待n次COUNTFLAG标志之后退出就行了。

下面是示例代码:

#include "delay.h"  

  

void delay_config(void)  

{  

    SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;     //时钟源为系统时钟168MHz  

    SysTick->LOAD = 167;                 //重载值为168-1,每1us溢出一次  

}  

  

void delay_ms(vu32 nTime)  

{  

    nTime *= 1000;  

    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;        //使能SysTick,开始计数  

    while(nTime--){  

        while((SysTick->CTRL&0X010000) == 0);        //等待COUNTFLAG标志位置1  

    }  

    SysTick->CTRL &= (~SysTick_CTRL_ENABLE_Msk);     //失能SysTick,停止计数  

}  

  

void delay_us(vu32 nTime)  

{  

    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;  

    while(nTime--){  

        while((SysTick->CTRL&0X010000) == 0);  

    }  

    SysTick->CTRL &= (~SysTick_CTRL_ENABLE_Msk);  

}  


推荐阅读

史海拾趣

Anaheim Automation公司的发展小趣事

近年来,随着全球金属氧化物压敏电阻市场的不断增长,AMOTECH也迎来了新的发展机遇。根据市场研究报告,预计全球金属氧化物压敏电阻市场规模将以稳定的增速持续增长。AMOTECH凭借其在该领域的深厚积累和不断创新的技术实力,有望在未来市场中占据更加重要的地位。同时,公司也将继续加大研发投入,拓展新的应用领域,为电子行业的发展贡献更多力量。

这些故事框架主要基于已知的事实和信息构建而成,旨在展示AMOTECH公司在电子行业中的发展历程和重要成就。然而,由于具体细节可能涉及公司内部信息或商业机密,因此无法提供更为详细和具体的描述。如需了解更多关于AMOTECH公司的故事和发展历程,建议查阅相关新闻报道或公司官方资料。

Esico-Triton公司的发展小趣事

Esico-Triton公司成立于XXXX年,起初是一个小型的电子设备研发团队。当时,创始人[XXXXX]和[XXXXX]看到了电子设备市场的巨大潜力,于是决定合作创办一家公司。他们的初衷是开发一款能够简化工作流程的电子设备。在公司创立初期,资金紧张,研发条件有限,但团队成员凭借着对技术的热情和专业知识,成功研发出了第一款产品——一款便携式数据处理器。这款产品因其便携性和高效性受到了市场的欢迎,为Esico-Triton的后续发展奠定了坚实的基础。

AMRI Enterprise Co Ltd公司的发展小趣事

品质是AMRI Enterprise Co Ltd的生命线。公司始终坚持品质至上的原则,通过严格的质量管理体系和持续改进的工艺流程,确保产品的稳定性和可靠性。同时,AMRI还注重品牌建设,通过提升品牌形象和塑造企业文化,增强客户对公司的信任度和忠诚度。这些努力使得AMRI的产品在市场上赢得了良好的口碑和广泛的认可。

Advanced Detector Corp公司的发展小趣事

随着全球市场的不断开放和经济的全球化,ADC开始将业务拓展至全球范围。公司在全球各地设立了分支机构,并建立了完善的销售和服务网络。通过全球化布局,ADC成功打开了新的市场,提升了品牌影响力,实现了业务的快速增长。

喜美克斯(Cvilux)公司的发展小趣事

随着公司规模的逐渐扩大,喜美克斯公司开始思考如何进一步拓展市场。他们深入研究市场趋势和消费者需求,制定了针对不同市场的精准营销策略。通过与当地合作伙伴的紧密合作,喜美克斯成功地将产品打入了多个新兴市场,实现了销售额的快速增长。

天钰(FITIPOWER)公司的发展小趣事

在市场竞争日益激烈的电子行业中,喜美克斯公司始终坚持品质至上的原则。公司投入大量资源用于产品质量控制和生产工艺的改进,确保每一件产品都能达到最高的品质标准。这种对品质的执着追求,让喜美克斯的产品在市场上赢得了良好的口碑,也为公司赢得了众多忠实的客户。

问答坊 | AI 解惑

车用涡轮增压器的轻量化技术

涡轮增压器可以不改变发动机的排量而提高其动力性能,但却存在涡轮滞后现象。为了提高其加速性能,减少涡轮滞后,必须降低旋转体的惯性矩,而最有效的办法是减轻旋转体的质量。因此,许多国家都进行了轻量化新材料的开发研究工作。  1  ...…

查看全部问答>

arm指令mrc的疑惑

MRC指令格式为: MRC条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2 MCR指令用于将写处理器寄存器中的数据传送到ARM处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常,其中协处理器 ...…

查看全部问答>

error LNK2001: unresolved external symbol CLSID_RemoteDataAccess

Linking... RDAExamDlg.obj : error LNK2001: unresolved external symbol CLSID_RemoteDataAccess RDAExamDlg.obj : error LNK2001: unresolved external symbol IID_ISSCERDA ARMV4IDbg/RDAExam.exe : fatal error LNK1120: 2 unresolved exte ...…

查看全部问答>

请教2440CAMERA中断问题

请教各位CAMERA有两个中断源C,P_PATH.共用一个信号进来的,那系统是如何区别这一个信号是哪一个中断来了呢?…

查看全部问答>

WinCE 5.0 下网络通信问题

  我在WinCE5.0下进行网络通信(多播通信),需要禁用回环输出。     调用以下函数:    //设置套接字选项,禁止多播数据包回环回馈 /* const int loopback = 0; result = setsockopt(UDPMulticast,IPPROTO_I ...…

查看全部问答>

我的液晶是LM3033DFW,显示不正常,汉字不正常,光标移动,相应的汉字不出现,即使出现也是不争取的乱码

我的液晶是LM3033DFW,显示不正常,汉字不正常,光标移动,相应的汉字不出现,即使出现也是不争取的乱码,我的数据口每接上拉电阻,我用的是STC的STC12C5A32S2,他的数据口有弱上拉功能,会是这个原因吗,哪位遇见过,给说一下,谢谢…

查看全部问答>

百分求救:wdm USB驱动,两个device总是会互相影响

我的电脑上连了两个USB serial class的device,现在一个拔线之后,另一个的write urb传输也会fail掉,请问各位高手是什么原因? 我看到在OnWriteInterrupt里面两个device object都返回fail,但是我只拔出了一个USB device啊。 NTSTATUS StartWri ...…

查看全部问答>

求51时间控制器的源程序!

时间控制器的设计 1. 内容 用89S52单片机设计一个时间控制器,有8位数码管显示年月日及时分秒,具有日历 和时钟功能,有一路输出控制电灯,有一路输出控制蜂鸣器,可以设置年月日及时分秒,可以设置一张时间表,该时间表记录什么时间开、关电灯,什 ...…

查看全部问答>

altium designer资料(不知道这个有没有人发过)

                             新手报到,做点贡献,共勉!…

查看全部问答>