STM32处理器有一个24位的系统滴答定时器SysTick,它从重新加载值开始倒数到0,然后在下一个时钟边缘重新加载(包装到)STK_LOAD寄存器中的值,然后在随后的时钟上倒数。
计数标志位COUNTFLAG在系统控制和状态寄存器STK_CTRL的16位,当计时器减计数到0时,返回1。
时钟源选择位CLKSOURCE在系统控制和状态寄存器STK_CTRL的2位,赋值为0时为8分频,赋值为1时为1分频。想要计数速度更快可以选择1分频的时钟源。
SysTick异常请求允许位TICKINT在系统控制和状态寄存器STK_CTRL的1位,赋值为0时禁止异常请求,赋值为1时允许异常请求。软件可以使用COUNTFLAG来判断SysTick是否曾经被计数为零。
计数使能位在系统控制和状态寄存器STK_CTRL的0位,赋值0时禁止计数,赋值1时使能计数。
重装载值RELOAD在SysTick重载值寄存器STK_LOAD的0~23位,加载寄存器指定在启用计数器时和计数器达到0时加载到当前值寄存器STK_VAL的起始值。
当前的计数器值CURRENT在当前值寄存器STK_VAL的1~23位。前值寄存器STK_VALSysTick计数器的当前值。读取返回SysTick计数器的当前值。任何值的写入都会将字段清除为0,并将STK_CTRL寄存器中的COUNTFLAG位清除为0。
查询us、ms延时函数
从时钟树可以知道,系统时钟168Mhz,8分频后得到滴答定时器时钟为21Mhz,装载值(需要延时时间)可根据时钟频率计算求得,每秒可计数21000000次,每微秒可计数21次。装载值和当前值都是24位,最大为16777215,最大微秒定时798915us,最大毫秒定时798ms。
结合LED灯和Systick定时让LED灯500ms闪烁一次,主函数为
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main()
{
LED_Init(); //初始化LED灯
while(1) //点亮或熄灭LED灯
{
GPIOH- >ODR &=~ (0x01< < 10); //输出为0,led灯亮
GPIOH- >ODR &=~ (0x01< < 11); //输出为0,led灯亮
Systick_Delayus(500000);
GPIOH- >ODR |= (0x01< < 10); //输出为1,led灯灭
GPIOH- >ODR |= (0x01< < 11); //输出为1,led灯灭
Systick_Delayms(500);
}
}
编译成功后将程序烧入,LED每500ms闪烁一次,Systick查询定时成功。
上一篇:STM32单片机的延时原理和延时函数方法
下一篇:基于STM32单片机的紫外线消毒系统设计
推荐阅读最新更新时间:2024-11-06 11:33
设计资源 培训 开发板 精华推荐
- I2C总线级联器+MPU6050陀螺仪+WS2812灯珠扩展板
- 电压电流功率表
- NB3W800LMNGEVB:用于 PCIe 评估板的 3.3 V 100/133 MHz 差分 1:8 HCSL 兼容推挽时钟 ZDB/扇出缓冲器
- REF191 电压基准故障安全 5V 基准的典型应用电路
- 使用 Broadcom Inc 的 ALM-1106 的参考设计
- 使用 Analog Devices 的 LT3420EMS-1 的参考设计
- 使用 MaxLinear, Inc 的 SPX2951 的参考设计
- LT1171HVIT、5V/2.5A 升压转换器的典型应用
- DIY触觉输入旋钮:BLDC电机+圆形LCD
- 使用 MaxLinear, Inc 的 SPX385S-1.2/TR 的参考设计
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位