zoukankan      html  css  js  c++  java
  • STM32--systick延时

    systick是一个内核中的滴答器:

    • 滴答时间间隔:
      • 一般采用AHB时钟的8分频[SysTick->CTRL第2位清零],即一般是72/8=9M,即1s滴答9M次
    • 滴答总量:RELOAD寄存器
      • 读取RELOAD寄存器作为每次滴答的初值,每滴答一次减1(实时数值存到CURRENT寄存器),减到0时(可触发中断),重新读取重新滴答。RELOAD寄存器24位,9M滴答间隔情况下,单次循环最长时间大概1.8s
    • 中断:    
      • 标志位:     SysTick->CTRL寄存器里的第16位为COUNTFLAG,当滴答到0时该位为1。如果读取该位,该位将自动清零
      • 使能中断:  SysTick->CTRL寄存器的第1位写1则开启中断。即使没有开启中断,COUNTFLAG也会工作

     库函数操作:

                        #include"misc.h"

    初始化:

      SysTick_Config(x);(可重复调用,时间重新开始)

        • 设置一次完整循环的滴答次数为x
        • 把时钟源设置为内部时钟(一般情况下是要用外部时钟即AHB时钟的8分频的,需进一步操作)
        • 打开中断
        • 设置中断优先级
        • 开始计时

      SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//采用AHB时钟的8分频(一般设置),在SysTick_Config之后执行,以免操作被覆盖

    CURRENT寄存器:

    读它:返回当前倒计数的值

    写它(任意值):清零  

    延迟函数示例:

    //不断查询COUNTFLAG
    void
    sysDelays(u32 x) { u32 i; SysTick_Config(9000000); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); for(i=0;i<x;i++) { while(!((SysTick->CTRL)&(1<<16))); } SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭滴答 return ; }
  • 相关阅读:
    面向 例题
    面向
    mysql 储存过程
    php数组
    PHP 函数
    python 三大器
    python 第十一章 函数名+格式化+迭代器+递归
    python 第十章 动态参数+名称空间+嵌套+修改值
    python 第八章 r w a 等文件操作
    python 第七章 数据类型补充+遇到的坑+二次编码
  • 原文地址:https://www.cnblogs.com/2cats/p/3578300.html
Copyright © 2011-2022 走看看