当前位置: 首页 > news >正文

STM32/Delay延时函数编程思路

1 延时函数的作用延时函数就是让程序在某个位置暂停执行一段指定的时间然后再继续运行后面的代码比如在每一个点灯大师入门时都需要经历的流水灯实验或是等待外设初始化、时序匹配和按键消抖都离不开延时函数。2 编程思路目标本篇文章主要实现延时的初始化、微秒和毫秒级别延时的函数设计2.1 初始化1确定配置哪一个时钟信号为延时函数提供基准。2确定每微秒需要的时钟周期。2.2 微秒延时1 对传入的参数进行校验2 条件判断避免溢出24寄存器最大值3 写入设置计数器初始值4 启动硬件递减计数并等待计数完成5 失能计数器并清空寄存器2.3 毫秒延时调用微秒延时实现毫秒延时3 代码示例/*delay.h文件*/ #ifndef __DELAY_H #define __DELAY_H #include stm32f10x.h void Delay_Init(void); void DelayUs(uint32_t US); void DelayMs(uint32_t MS); #endif/*delay.c文件*/ #include delay.h static uint32_t CountUs 0; //1us需要的SysTick周期数 /** * brief 延时初始化 */ void Delay_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //HCLK/8作为SysTick时钟硬件 uint32_t SysCLK_MHz SystemCoreClock / 1000000; // 72MHz / 1 000 000 72 CountUs SysCLK_MHz / 8; // 72 / 8 9(每微秒9个周期 每毫秒9000个周期 每秒9000 000个周期) } /** * brief 微秒延时 * param us延时微秒数 */ void DelayUs(uint32_t US) { if(US 0) return; uint32_t load_val US * CountUs - 1; if(load_val 0x00FFFFFF) load_val 0x00FFFFFF; //防止溢出24位LOAD寄存器的最大值 SysTick-LOAD load_val; //将计算好的值写入LOAD寄存器 SysTick-VAL 0; SysTick-CTRL 0x01; //使能 无中断 HCLK/8 while(!(SysTick-CTRL (1 16))); //CTRL的第16位是COUNTFLAG当计数器从1→0时硬件自动置1。 SysTick-CTRL 0x00; SysTick-VAL 0; } /** * brief 毫秒延时 * param ms延时毫秒数 */ void DelayMs(uint32_t MS) { while(MS--) { DelayUs(1000); // 复用微秒延时 } }注本篇文章以STM32F10系列编写。注以上内容仅个人理解不具备唯一性和绝对正确性仅供参考。
http://www.zskr.cn/news/1336799.html

相关文章:

  • 手把手教你用YOLOv5/PyTorch在DOTA V1.5数据集上训练自己的航拍目标检测模型
  • Arch linux-nginx_LEMP自动化脚本
  • 别再手动管理数据了!用Codesys ST语言实现一个轻量级队列,5分钟搞定PLC数据缓存
  • Stream流-从进阶到起飞
  • 把FlashAttention装进昇腾NPU:为啥它能让大模型推理快3倍?
  • AFSIM-模型导入导出-源码级Bug修改
  • 【Perplexity词组搭配查询避坑清单】:8个致命误用场景+3类伪低困惑度陷阱,资深语言工程师紧急预警
  • 本地计算机 上的 postgresql-x64-12 服务启动后停止
  • STM32CubeMX 6.14版本保姆级安装教程(附CSDN下载链接,解决官网卡顿)
  • 1987年5月25日晚上23-24点出生性格、运势和命运
  • 昇腾CANN shmem:把多张 NPU 的 HBM 变成一块全局内存
  • Windows下安装OpenCode并配置oh-my-openagent和superpowers
  • RX65N嵌入式开发实战:从硬件设计到外设驱动与调试
  • AI一周事件 · 2026-05-13 至 2026-05-19
  • 别再手动调阈值了!OpenMV自适应色块识别保姆级教程(附完整Python代码)
  • 5分钟掌握AI音频分离:Retrieval-based-Voice-Conversion-WebUI终极指南
  • Option ‘importsNotUsedAsValues‘ has been removed. Please remove it from your configuration
  • 《数学公理体系·第三部·数术几何》(2026 年版)
  • 背单词为什么不背词典:CANN上FlashAttention的分块逻辑
  • 昇腾CANN ascend-boost-comm:M×N 算子复用是怎么做到的
  • 2026年泡沫雕塑优点全面解析:定义、分类及应用领域百科
  • 聊天技巧教程
  • 2026年4月过滤器市场风向标:这些浅层砂厂家受青睐,旁流水处理器/精密过滤器/浅层砂过滤器,过滤器公司推荐 - 品牌推荐师
  • IDEA通义灵码实战:用它生成的JUnit单元测试,真的能直接提交吗?
  • ROS仿真第一步:搞定Solidworks到URDF的转换(含履带机器人特殊问题探讨)
  • 科研避坑指南:String+Cytoscape做PPI分析时,CytoNCA计算Betweenness后千万别忘了这步!
  • 告别乱码!手把手教你用FontCvt为STM32的emWin项目定制精简中文字库
  • 别再只会真彩色了!用ENVI玩转波段组合:揭秘植被红、水体蓝背后的遥感密码
  • 从Simulink模型到S32K3xx芯片:手把手教你玩转NXP官方MBD工具包(v1.4实战)
  • LaTeX论文返修必备:用xcolor和xpatch宏包一键高亮正文与新增参考文献