STM32delay函数应用与说明[通俗易懂]

STM32delay函数应用与说明[通俗易懂]STM32delay函数应用应用与说明CortexM4内核编程手册有关时钟系统的内容定时函数的实现delay_init函数delay_us函数对与32中的delay函数有很多中形式可以使用,这里提供一些自己使用遇到过的函数类型。CortexM4内核编程手册有关时钟系统的内容p230SysTicktimer(STK)Theprocessorhasa24-bitsystemtimer,SysTick,thatcountsdownfromthereloadvalu

大家好,又见面了,我是你们的朋友全栈君。

对与32中的delay函数有很多中形式可以使用,这里提供一些自己使用遇到过的函数类型。

Cortex M4内核编程手册有关时钟系统的内容

p230
SysTick timer (STK)
The processor has a 24-bit system timer, SysTick, that counts down from the reload value to zero, reloads (wraps to) the value in the STK_LOAD register on the next clock edge, then counts down on subsequent clocks.
When the processor is halted for debugging the counter does not decrement.

处理器有一个24位的系统计时器(SysTick),这个定时器从装载值进行递减,知道0为止,在下一个时钟边缘对STK_LOAD中的值进行重载入,然后在后续的时钟中递减计数。
在对处理器进行暂停调试的时候,计数器不会减小。

在arm体系中与时钟有关的寄存器是:STK_CTRL STK_LOAD STK_VAL STK_CALIB是这四个寄存器

在明确了以上内容之后,利用STM32的内部SysTick来实现延时,这样既不占用中断,也不会占用系统定时器。

定时函数的实现

delay_init 函数

该函数用来初始化2个重要参数:fac_us以及fac_ms;tongshi ba SysTick的时钟源选择位外部时钟,在不加入系统的时候,延时初始化函数的代码如下:

 // 初始化延时函数
 //SYSTICK的时钟固定为HCLK时钟的1/8
static  uint8_t  fac_us=0;
void delay_init(uint8_t SYSCLK)
{ 
   
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    //SysTick 频率为 HCLK
    fac_us=SYSCLK; //不论是否使用 OS,fac_us 都需要使用 
}

delay_us 函数

这个函数是用来指定us的,其参数nus为延时的微妙数。

//延时 nus
//nus:要延时的 us 数. 
//nus:0~190887435(最大值即 2^32/fac_us@fac_us=22.5)
void delay_us(uint32_t nus)
{ 
    
     uint32_t ticks;
     uint32_t told,tnow,tcnt=0;
     uint32_t reload=SysTick->LOAD;  //LOAD 的值
     ticks=nus*fac_us; //需要的节拍数
     delay_osschedlock();  //阻止 OS 调度,防止打断 us 延时
     told=SysTick->VAL; //刚进入时的计数器值
     while(1)
     { 
   
          tnow=SysTick->VAL; 
          if(tnow!=told)
          { 
    
               if(tnow<told)tcnt+=told-tnow; 
               //这里注意一下 SYSTICK 是一个递减的计数器就可以了.
               else tcnt+=reload-tnow+told;
               told=tnow;
               if(tcnt>=ticks)break;  //时间超过/等于要延迟的时间,则退出.
          }
     };
}

进行测试:是正确的!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137245.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • redission设置过期时间_设置redis过期时间

    redission设置过期时间_设置redis过期时间需提前准备redis包:ServiceStack.Interfaces ServiceStack.Redis.Core StackExchange.Redis直接上代码:RedisClientclient=newRedisClient(“127.0.0.1”,6379);client.FlushAll();//1.key//2.value//3.过期时间

    2022年9月26日
    2
  • 自己实现简单java缓存类文件_java怎么把数据存到缓存中

    自己实现简单java缓存类文件_java怎么把数据存到缓存中需求分析项目中经常会遇到这种场景:一个变量需要在多处共享,有些变量还有时效性,过期自动失效,比如手机验证码,发送之后需要缓存起来,然后处于安全性考虑,一般还要设置有效期,到期自动失效。我们怎么实现这样的功能呢?解决方案使用现有的缓存技术框架,比如redis,ehcache。优点:成熟,稳定,功能强大;缺点,项目需要引入对应的框架,不够轻量。如果不考虑分布式,只是在单线程或者多线程间…

    2025年6月15日
    4
  • APT防御_简述对安全的理解

    APT防御_简述对安全的理解在信息化的时代,很多业务都依赖于互联网,例如说网上银行、网络购物、网游等。大量的数据依赖于网络。无疑Web成为领导者。随着国家安全法的不断完善,企业及公司对用户隐私以及公司的重要信息逐渐加强重视。也使得暴露在网络上的Web面临更高的挑战。这种黑白交替的时代,黑白技术在对抗中也在不断的发展。也使得安全测试逐渐规范化。作为新人,浅谈一下Web安全观。浅谈从Web安全到APT防御。一、web系统存在的安全性复杂应用系统代码量大、开发人员出现疏忽;系统屡次升级、人员频繁变更,使得代码存在差别;新旧资源存在

    2022年9月19日
    1
  • MIME协议详解「建议收藏」

    MIME协议详解「建议收藏」                  MIME结构一、   RFC822协议RFC822文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片、声音等二进制数据。另外,SMTP服务器在接收邮件内容时,当接收到只有一个“.”字符的单独行时,就会认为邮…

    2022年4月20日
    62
  • clion激活码一个月【中文破解版】

    (clion激活码一个月)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S3…

    2022年3月26日
    76
  • javaweb-springMVC-54

    javaweb-springMVC-54

    2021年5月18日
    155

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号