首页 > 其他分享 >STM32F407 SysTick

STM32F407 SysTick

时间:2024-08-07 19:53:29浏览次数:7  
标签:定时器 中断 滴答 SysTick 寄存器 STM32F407 时钟

//定时器分类:
    内核定时器(系统滴答定时器):
        延时、定时中断、给操作系统提供时基
    基本定时器:
        延时、定时中断、时间片
    通用定时器:
        延时、定时中断、输出比较(PWM)、输入捕获(捕获高/低电平时间、红外信号解码(解NEC)、按键时长、超声波测距、逻辑分析仪(IIC  SPI)、示波器
    高级定时器
        延时、定时中断、输出比较、输入捕获、电机死区 刹车
    其他定时器:
        看门狗 --- 产生复位
        RTC  --- 1s定时期 ---- 实时时钟(RTC显示时间)
        
//系统滴答定时器(SysTick):
    属于内核部分,是NVIC的一部分;作用:为系统提供时基,作为定时器使用延时和定时中断。
    //延时与定时中断的区别:
        通过while();这种语法延时会阻塞主程序的运行。而定时中断具有实时性,时间没到的时候,CPU继续进行主程序,时间到进入中断

//STM32的时钟树:
    中文参考手册 RCC章节
//STM32的时钟源:
    LSI:低速内部时钟      看门狗、RTC
    LSE:低速外部时钟       RTC
    HSI:高速内部时钟      系统、PLL锁相环
    HSE:高速外部时钟      25Mhz  -->168Mhz

//系统滴答定时器的相关寄存器
    1.SysTick->CTRL(控制及状态寄存器)
        位16:标志位: 进入中断标志位置一,需手动清零,可以通过向里面写任意值清零
        位2:选择时钟源: 0:选用参考时钟源  1:选用内核时钟源
        位1:使能定时中断: 1:使能
        位0:滴答定时器使能 1:使能
    2.SysTick->LOAD(重装载寄存器)
        向其中写入值,数数到0时,将值填入当前值寄存器
    3.SysTick->VAL(当前值寄存器)
        重装填的值倒数到0(递减的过程)
    4.SysTick->CALIB(校准寄存器)

//系统滴答定时器框图:


    
//使用系统滴答定时器延时
    延时时间的确定:
    时间T = ARR(重装载值)/ Fck(时钟源频率)
    //以参考时钟源为例,编写一个以毫秒为单位延时函数:
    Void systick_delay_ms(u16 nms)
    {
        //选择时钟源
        SysTick->CTRL &=~ (1 << 2);
        
        SysTick->LOAD = nms * 21000 - 1 ; // 必须减一,因为当前值寄存器数到0;
        
        //通过向当前值寄存器写入值,将重装载寄存器值写入当前值寄存器
        SysTick->VAL = 0;
        
        //使能系统滴答定时器,开始递减计数
        SysTick->CTRL |= 1 << 0;
        
        //等待系统标志位置一,关闭定时器使能
        while(!(SysTick->CTRL & 1 << 16));
        SysTick->CTRL &=~ (1 << 0);
    }
    
    
//滴答定时器的定时中断
    //定时器初始化思路:
        1.选择时钟源;
        2.使能系统滴答定时器;
        3.配置重装载寄存器;
        4.向当前值寄存器写入一个值,将重装载寄存器的值加载到当前值寄存器
        5.使能系统滴答定时器(开始递减)
        
    //中断服务函数的名字:
    ctrl + f 搜索SysTick
    初始化例程:
    /*
    函数功能:系统滴答定时中断
    返回值:void
    形参:u16 nms
    函数功能:nms定时中断
    */
    void SysTick_Interrupt(u16 nms)
    {
        //选择时钟源
        SysTick->CTRL &=~ (1 << 0);
        
        //使能滴答定时器中断
        SysTick->CTRL |= 1 << 1;
        
        //重装载值
        SysTick->LOAD = nms * 21000 - 1;
        
        //通过向当前值寄存器写入值,将重装载寄存器值写入当前值寄存器
        SysTick->VAL = 0;
        
        //使能系统滴答定时器,开始递减计数
        SysTick->CTRL |= 1 << 0;
    }
    
    //后面加上对应的中断服务函数(无返回值,无形参)
    //注意:在服务函数中加入清标志位,以便结束中断

标签:定时器,中断,滴答,SysTick,寄存器,STM32F407,时钟
From: https://blog.csdn.net/txz2629310036/article/details/140999902

相关文章

  • STM32F407 GPIO
    //单片机:   是典型的嵌入式微控制器,英文MCU;是一种集成电路芯片,采用超大规模集成电路技术把FPU,RAM,ROM,I/O口中断系统,定时器计数器等功能集成到一块硅片上,构成的小而完善的计算机系统。//中央处理器(FPU)(168MHz)//随机存储器(RAM)//只读存储器(ROM)//定时器:   重要  ......
  • STM32F407最小系统板烧录基于ST-LINK /V2
    STM32F407最小系统板烧录ST-LINK/V2背景我们使用的单片机最小系统板为STM32F407ZGT6,下载器为正点原子.方法下载测试程序下载好程序`LoadTest`,地址为Casdos/STM32F407NUEDC:电赛,尤其针对stm32f407zet6最小开发版相关代码(github.com)按图连接SWD和其它线路,注意SW......
  • SysTick
    1.systick简介处理器有一个24位系统定时器SysTick,它从重新加载值倒计时到零,在下一个时钟沿重新加载(换行)LOAD寄存器中的值,然后对后续时钟倒计时。当处理器暂停调试时,计数器不会减少2.systick相关寄存器2.1STK_CTRLBits31:17保留,必须保持清除。bit16COUNTFLAG:如果......
  • stm32F407SPI-RC522-NFC卡-移植
    目录stm32F407SPI-RC522-NFC卡-移植-简易版nfc卡的原理RC522读卡器的原理应用场景移植步骤好用的代码完整代码stm32F407SPI-RC522-NFC卡-移植-简易版学习spi,移植nfc卡的原理卡内有芯片,0区存卡的id原来要两重密码才能修改卡中数据RC522读卡器的原理应用场景移植步骤问淘......
  • STM32F407外设ADC配置流程及代码示例
    STM32F407外设ADC配置流程及代码示例STM32的ADC(模拟-数字转换器)是STM32微控制器系列中集成的一个关键外设,用于将模拟信号(如温度、压力、光强等传感器输出的电压或电流信号)转换为数字信号,以便微控制器能够处理和分析这些信号。ADC配置流程:时钟配置:启用GPIOF和ADC的时钟。这是......
  • STM32系统嘀嗒Systick定时器
    目录STM32系统嘀嗒Systick定时器基本概念基本应用时钟分析时钟选择(1) 内部时钟(2) 外部时钟原理分析控制方式STM32系统嘀嗒Systick定时器基本概念定时器是STM32中常用的外设,一般定时器的基本功能就是定时,而在CortexM3/M4内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Sy......
  • STM32F407如何点亮一个呼吸灯(库函数)
    /*********************************************************************************@filemain.c*@author*@version*@date2024/07/03*@brief实现利用基本定时器TIM14实现定时10ms,每隔10ms从灭到亮逐渐变亮,再隔10ms从 亮到......
  • 7月1日 STM32F407VET6对Flash的入门学习(记录)
    1、Flash的使用之前必须对Flash进行擦除,不能直接写入进行覆盖。其原因是Flash的工作原理存储二进制的0和1,且只能实现从1到0的变化。这就意味着但Flash中已经烧入由0和1组成的文件后,无法直接再次烧入其他二进制文件。必须使用特定的函数将Flash中已存在的0和1全部转换成1,这个就......
  • STM32定时器篇——Systick定时器的使用(实现delay延时函数)
    一、Systick定时器的简介:        Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器对于CM3,CM4内核芯片,都有Systick定时器。当Systick计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在......
  • MDK5.14仿真STM32F407时无法查看外设寄存器的问题
    这几天用keilmdk5.14新建工程进行仿真时,进入Debug环境发现SystemViewer菜单显示空白,Peripherals菜单没有外设寄存器。如图1和图2所示。网上查了一下资料发现大多都是解释的STM32F103系列在MDK内的修改方式,但是我用的是STM32F407ZET6,就依葫芦画瓢,照着出一个修改的说明。  ......