历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2019年02月12日 | 【stm32f407】SysTick实现延时

2019-02-12 来源:eefocus

一.  SysTick介绍:


CM4内核的处理和CM3一样,内部都包含了一个SysTick定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时 ,将 从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。我们就是利用STM32的内部SysTick来实现延时的,这样既不占用中断,也不占用系统定时器


通常SysTick可以通过中断的方式来实现,后续会增加,但是目前只是通过轮询的方式去实现


二.  寄存器介绍


SysTick有4个寄存器


对应的代码在core_cm4.h中


typedefstruct

{

  __IO uint32_t CTRL;                    /*!< Offset: 0x000(R/W)  SysTick Control and StatusRegister */

  __IO uint32_t LOAD;                    /*!< Offset: 0x004(R/W)  SysTick Reload Value Register       */

  __IO uint32_t VAL;                     /*!< Offset: 0x008(R/W)  SysTick Current ValueRegister      */

  __I uint32_t CALIB;                  /*!< Offset: 0x00C (R/ ) SysTick Calibration Register       */

} SysTick_Type; 

1) CTR寄存器如图:



第0位:ENABLE,Systick 使能位  (0:关闭Systick功能;1:开启Systick功能)


第1位:TICKINT,Systick 中断使能位    (0:关闭Systick中断;1:开启Systick中断)


第2位:CLKSOURCE,Systick时钟源选择  (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)


第16位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零.


2) LOAD寄存器如图:



Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD 重载寄存器是个24位的寄存器最大计数0xFFFFFF。


3) VAL寄存器如图:



也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。


4) CALIB寄存器如图



一般不会用到


三.  源码

delay.h



#ifndef _DELAY_H_H_H

#define _DELAY_H_H_H

#include "stm32f4xx.h"

 

void delay_init(u8 SYSCLK);

void delay_ms(u16 nms);

void delay_us(u32 nus);

#endif


delay.c



#include "delay.h"

 

static u8  fac_us=0;    

static u16 fac_ms=0;

void delay_init(u8 SYSCLK)

{

  SysTick->CTRL&=~(1<<2);

  fac_us=SYSCLK/8;

  fac_ms=((u32)SYSCLK*1000)/8;

}

void delay_xms(u16 nms)

{     

  u32 temp;    

  SysTick->LOAD=(u32)nms*fac_ms;

  SysTick->VAL =0x00;

  SysTick->CTRL=0x01 ;

  do

  {

    temp=SysTick->CTRL;

  }while((temp&0x01)&&!(temp&(1<<16)));

  SysTick->CTRL=0x00;

  SysTick->VAL =0X00;       

 

void delay_ms(u16 nms)

{

  u8 repeat=nms/540;

  u16 remain=nms%540;

  while(repeat)

  {

    delay_xms(540);

    repeat--;

  }

  if(remain)delay_xms(remain);

  

}

void delay_us(u32 nus)

{

  u32 temp;      

  SysTick->LOAD=nus*fac_us;   

  SysTick->VAL=0x00;

  SysTick->CTRL=0x01 ;  

  do

  {

    temp=SysTick->CTRL;

  }while((temp&0x01)&&!(temp&(1<<16)));

  SysTick->CTRL=0x00;

  SysTick->VAL =0X00;  

}


推荐阅读

史海拾趣

Hi-G Relays公司的发展小趣事

机顶盒,这一在现代家庭娱乐中扮演重要角色的设备,全称为数字视频变换盒,俗称“机顶盒”或“机上盒”。其专业性体现在作为连接电视与外部信号源的桥梁,能够接收并转换多种来源的数字电视信号,如有线电缆、卫星天线、宽带网络及地面广播,使之在电视机上得以播放。同时,机顶盒还具备强大的解码能力,能将复杂的数字信号转换成电视可识别的视频和音频流,确保用户享受到高清乃至超高清的视觉盛宴。

科普性方面,机顶盒不仅让传统模拟电视机焕发新生,通过数模转换技术,让观众能够观看到数字电视节目,更通过其丰富的增值服务,如电子节目指南、因特网网页浏览等,极大地丰富了电视观看体验。此外,机顶盒还具备网络交互功能,用户可通过其连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒的功能和应用场景也在不断扩展。从基本的电视观看,到家庭影院般的视听享受,再到智能语音控制、个性化节目推荐等智能化服务,机顶盒正逐步成为现代家庭娱乐不可或缺的一部分。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向更加智能化、多功能化的方向发展,为用户带来更加便捷、丰富的娱乐体验。

DACHANG公司的发展小趣事

随着公司实力的不断增强,DACHANG公司开始积极拓展国际市场。公司参加了多个国际电子展览会,与国际同行进行了广泛的交流与合作。同时,DACHANG公司还积极寻求与国际知名企业的合作机会,不断提升自己在全球电子产业链中的地位和影响力。

Crameda Intersys公司的发展小趣事

作为一家有社会责任感的企业,Crameda Intersys公司不仅关注自身的经济效益,还积极履行社会责任。公司积极参与公益事业,支持教育、环保等领域的发展。同时,公司还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为社会的可持续发展做出了积极贡献。

这五个故事只是Crameda Intersys公司发展历程中的一部分,但它们足以展现出公司在电子行业中的成长轨迹和不懈追求。在未来的发展中,Crameda Intersys公司将继续以技术创新为引领,积极拓展市场渠道,培养更多优秀人才,加强质量管理和社会责任履行,为电子行业的发展贡献更多的力量。

Elite Semiconductor Products Inc公司的发展小趣事

随着全球对环保和可持续发展的关注度不断提高,Elite也积极响应这一趋势。公司注重环保理念在生产过程中的贯彻实施,采用环保材料和节能技术,减少生产过程中的污染排放。同时,Elite还积极参与环保公益活动,推动环保理念的普及和实践。这些努力不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

GMT(致新科技)公司的发展小趣事
首先确认收音机的电源是否正常。如果电源有问题,可能会影响定时电路的正常工作。
Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

问答坊 | AI 解惑

对面的高手看过来,ST公司的数据结构啥意思

typedef union {   u16 whole;   struct   {     unsigned IMPLEMENTED : 1; /**< Indicates that the key is implemented (from Customer Code to TSL only) */     unsigned ENABLED&nb ...…

查看全部问答>

复旦大学讲义-半导体器件原理PPT

一学期的课程 主要分为三个部分,半导体器件的工作原理 器件特性(MOSFET,BJT,VMOS,IGBT...GaAs) 半导体器件模型化 [ 本帖最后由 linda_xia 于 2010-4-18 08:31 编辑 ]…

查看全部问答>

一种利用MBE 模型改进的低速率

一种利用MBE 模型改进的低速率…

查看全部问答>

MC39I拨号GPRS成功分配IP后,无法进行UDP,TCP通信

我用的单片机控制MC39I,拨号CMNET成功分配IP地址和DNS1/DNS2后,发送UDP以及TCP数据包,为什么别人总收不到?当然上位机发的我也收不到.恳请那位大侠予以指点是不是在IPCP协商玩之后,发送UDP/TCP数据包之前还需要作些什么?我用Windows自带的PPP拨号发 ...…

查看全部问答>

关于PCB软件中的错误检测问题

在看一些书上的教程,或者是一些网上的文档的时候。都会介绍关于错误检查的问题。大家平常设计的时候修改这里修改的多吗?…

查看全部问答>

MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序

用MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序,谢谢邮箱com021@163.com,高手大侠们多多指教…

查看全部问答>

如何让管脚为输入状态且默认为高电平

我的按键扫描程序,无法检测到,原因是管脚电平一直为低。…

查看全部问答>

DIY建议+ADUCM361入门学习板

采用ADI最新的ARM CORTEX M3核的MCU 然后配上ADI的各种外设器件实现个入门的学习板…

查看全部问答>

我用CVAVR编译器,为什么编译后得不到COF和HEX文件?

我用CVAVR编译器,为什么编译后得不到COF和HEX文件?折腾了好几天了。请大伙帮帮忙看看是什么原因?先谢谢了! [ 本帖最后由 rjx 于 2012-10-10 08:23 编辑 ]…

查看全部问答>

STM32F429i的用途

1、拿到这块板子你会用它去做什么? 做个彩屏GUI手持通讯的工具 2、你会把你做好的东西发心得体会到论坛吗? 会,在论坛里与大家交流 3、你对这块板子的性价比怎么看?心里价位是多少? 性价比看价格了!这个比较矛盾的话题,量大了性价比就高! ...…

查看全部问答>