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

Cortex-M3-STM32F1 开发:(十二)HAL 库开发 ➤ SysTick 系统滴答定时器

上一篇下一篇
MPU 和 FPU

SysTick 系统滴答定时器

这是个定时器,和 SYSCLK 不是一个东西,SYSCLK 是系统时钟。F1 系列 MCU 中 SysTick 的时钟源依赖 SYSCLK ,通过分频(1或8)获得计数时钟。SysTick 包含在 M3/4/7 芯片内核里面,核心是一个 24 位的 递减 计数器(224−1∼02^{24}-1\sim022410)。

CubeMX(F103)的系统滴答定时器时钟配置如下:

在这里插入图片描述

相关寄存器有:控制及状态寄存器CTRL、重装载寄存器LOAD、当前数值寄存器VAL。

分频系数(1或 8)对其影响:

如果时钟源是 SYSCLK 的 1 分频,则时钟频率是 72MHz( 1s 振荡 72000000 次,1us 振荡 72 次),那么计时 1us 的话,SysTick 系统滴答定时器就需要递减 72(最多一次性计时 233,016us 左右)。

如果时钟源是 SYSCLK 的 8 分频,则时钟频率是 9MHz( 1s 振荡 9000000 次,1us 振荡 9 次),那么计时 1us 的话,SysTick 系统滴答定时器就需要递减 9(最多一次性计时 1,864,135us 左右)。

delay 函数就是基于这个定时器编写的。

系统 delay 函数(非OS)

1. delay_init() 函数

1 分频:

static u32 fac_us=0;							// us延时倍乘数void delay_init(u8 SYSCLK)
{HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); // SysTick频率为HCLKfac_us = SYSCLK;                                     // 不论是否使用OS, fac_us都需要使用
}
// 调用:delay_init(72), 调用之后 fac_us=72, 1us减72

8 分频:

static u32 fac_us=0;							// us延时倍乘数void delay_init(u8 SYSCLK)
{HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); // SysTick频率为 HCLK/8fac_us = SYSCLK/8;                                        // 不论是否使用OS, fac_us都需要使用
}
// 调用:delay_init(72), 调用之后 fac_us=9, 1us减9

2. delay_us() 函数

定义:

//延时nus
//nus 为要延时的us数
void delay_us(u32 nus)
{...ticks = nus*fac_us; //需要的节拍数 ...
}

这个函数的函数体就不过多写出来了,内容就是根据输入参数 nus 来配置重装载的值, nus 微秒需要递减 nus*fac_us 递减到 0 之后就会关闭滴答定时器。

3. delay_ms() 函数

定义:

//延时nms
//nms:要延时的ms数
void delay_ms(u16 nms)
{u32 i;for(i=0;i<nms;i++) delay_us(1000);
}

函数内部调用了 delay_us() 函数。


http://www.dtcms.com/a/532239.html

相关文章:

  • go-ethereum core之以太网虚拟机EVM
  • 自己怎么免费做网站网站开发 合同
  • 网站如何做脚注一般使用的分辨率的显示密度是多少dpi )
  • 嵌入式开发中ln命令使用指南
  • C++模板进阶及特化实战指南
  • zenm自己做网站淮北建设网
  • 网站title keyword descriptionwordpress 分类筛选
  • 网站系统设计目标企业融资方案范本
  • 《AI 应用层革命(二)——从应用到生态:当智能体开始重塑世界》
  • 使用 Python 元类与属性实现惰性加载:Effective Python 第47条
  • 环广西世巡赛开战!维乐Senso Prime 坐垫助你竞速
  • DeepSeek讲“南辕北辙”者的志向
  • 做网站在线视频如何添加湘潭网站seo
  • 智能文本抽取:通过OCR、自然语言处理等多项技术,将非结构化文档转化为可读、可分析的数据资产
  • 许昌哪个网站做苗木网站建设怎么让百度搜索到
  • 代码训练LeetCode(49)插入区间
  • wordpress做游戏网站国家新闻大事
  • 【Macos】安装 macFUSE 和 SSHFS 实现在 Finder 中挂载服务器目录
  • 【高并发服务器】十、Connection连接管理模块设计与实现
  • 内网网站建设流程高佣联盟做成网站怎么做
  • Canvas 复杂交互步骤:从事件监听 to 重新绘制全流程
  • 【js】class中constructor如何接收动态值,如timeRange
  • Gorm(四)删除操作
  • XSLT `<sort>` 标签详解
  • h5游戏免费下载:读心术
  • 免费建站有哪些网站注册公司需要怎么注册
  • GDB Server使用方法(基于vscode的可视化调试)
  • Retrieval Augmented Time Series Forecasting 论文笔记
  • Vscode中选择Conda环境
  • PyCharm无法启动jupyter server问题的解决