2023版 STM32实战4 滴答定时器精准延时
1.2023版 STM32实战3 按键外部中断(电路与代码都讲解)
2.2023版 STM32实战4 滴答定时器精准延时
3.2023版 STM32实战5 基本定时器中断4.2023版 STM32实战6 输出比较(PWM)包含F407/F103方式5.2023版 STM32实战7 通用同步/异步收发器(串口)F103/F4076.2023版 STM32实战8 独立看门狗(IWDG)7.2023版 STM32实战1 LED灯驱动(电路与代码都讲解)8.2023版 STM32实战2 按键驱动(电路与代码都讲解)9.Keil调试STM32卡死在文件startup_stm32f10x_hd.s的B处10.基于STM32的FreeRTOS智能手环(毕业设计)11.基于STM32循迹避障蓝牙操作四驱小车(毕业设计)12.C++基础 -19- 类中的隐藏问题SysTick简介与特性
-1- SysTick属于系统时钟。
-2- SysTick定时器被捆绑在NVIC中。
-3- SysTick可以产生中断,且中断不可屏蔽。
SysTick的时钟源查看
通过时钟树可以看出滴答的时钟最大为72MHZ/8=9MHZ
代码编写(已经验证,可直接拷贝使用)
SysTick源文件
#include "Systick.h" static u8 fac_us=0; static u16 fac_ms=0; void Sys_Tick_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_ms=SystemCoreClock/8000; fac_us=SystemCoreClock/8000000; } void Delay_Ms(u16 nms) { u32 temp; //倒数值,fac_ms代表一毫秒所需节拍数,与形参乘法运行得到所需的全部节拍数 SysTick->LOAD=(u32)nms*fac_ms; //清空计数器 SysTick->VAL =0x00; //对控制寄存器第0位写1代表始能 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //这句话的意思控制寄存器是使能的且时间还未到达,就会一直卡在此处 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //对控制寄存器第0位写1代表示除能 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //清空计数器 SysTick->VAL =0x00; } void Delay_Us(u32 nms) { u32 temp; //倒数值,fac_ms代表一毫秒所需节拍数,与形参乘法运行得到所需的全部节拍数 SysTick->LOAD=(u32)nms*fac_us; //清空计数器 SysTick->VAL =0x00; //对控制寄存器第0位写1代表始能 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //这句话的意思控制寄存器是使能的且时间还未到达,就会一直卡在此处 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //对控制寄存器第0位写1代表示除能 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //清空计数器 SysTick->VAL =0x00; }
主函数
#include "stm32f10x.h" #include "Systick.h" void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Init(GPIOE, &GPIO_InitStructure); } int main(void) { Sys_Tick_Init(); LED_Init(); while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOE,GPIO_Pin_5); Delay_Ms(500); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_5); Delay_Ms(500); } }
工程获取
三连后私信获取
合集:
STM32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现