STM32 system文件夹介绍

在这里插入图片描述

sys文件夹介绍

在这里插入图片描述
这些函数都是在sys.c中实现 在sys.h中声明 int是中断(interrupt)的缩写
开启所有中断 给中断使能 enable 关闭所有中断 给中断失能 disable (就是一句话使用外设前要给中断使能)

delay文件夹的介绍 包含在system文件夹中

在这里插入图片描述
在这里插入图片描述
同样delay也是有着delay.C 和delay.h来实现和声明函数 在这里OS不做介绍
systick工作原理
在这里插入图片描述
注意实在芯片的内核里 24位表示能记下2的24次方的数字 当来一个时钟信号(一个方波)这个滴答定时器就减一 (递减)在这里插入图片描述
上图是两个时钟信号
在这里插入图片描述
时钟源来自于HCLK(AHB总线)然后分频(调用时钟初始化函数设定好每条总线的预分频值)
在这里插入图片描述
滴答定时器的时钟来源来自HCLK 然后分频到达VAL给VAL提供时钟信号 (方波 往上数第三个图片)每次收到一个时钟信号就减一 一开始是2的24次方的数然后随着时钟信号的到来 依次减一 减到0 VAL==0 系统就把寄存器中的一个位 countFlag 赋值为1表示延时完成 然后系统自动重载 把2的24次方(LOAD)赋值给VAL
在这里插入图片描述
寄存器里的位 COUNTFLAG如果系统读取了就自动置为0 在这个寄存器(CTRL)中CLKSOURCE这个位是来决定分频的倍数的 (因为在F4中滴答定时器的时钟来源已经确定来自于AHB总线)TICKINT当Systick计数被减到0这个时刻发起中断请求(类似于51的定时器) 中断哪里会详细介绍 ENABLE就是使能定时器 不使能时钟信号进不来在这里插入图片描述
LOAD就是当VAL=0时系统自动重装的值
VAL就是当前存放的值
在这里插入图片描述
在这里插入图片描述
这个函数传入的参数是传入滴答定时器的时钟(来自于AHB总线的时钟 F1是72Mhz)传入的值就为72 然后把滴答定时器(sytick)的相关寄存器CTRL全部置为0(初始化)然后调用函数把输入的时钟值72分频/8 72/8=9 (第二行) 第三行 g_fac_us就被赋值为9 systick(72)/8=9
这个如何理解 就是1mhz就是1s计数1000000
记一次数就是1us 但是这个滴答定时器的时钟频率是9MHZ systick(72)/8=9 计数1就是 1/9000000 s 所以想要计数1us就要9 计数9次
这个9就是 systick(72)/8(调用函数 设立分频系数)=9 这个9就是这么来的 给到全局变量g_fac_us
在这里插入图片描述
第一行就是创建一个变量temp来获取滴答定时器寄存器CTRL的值 然后nus就是你传入的值(要及时多少毫秒)g_fac_us就是全局变量9 (1us要计数9次)LOAD寄存器被赋予要计数多少的值 (如要计数900us 就传入参数nus=900) 然后nus
g_fac_us=8100 就是滴答定时器VAL的值位8100 一直减一 直到减到0就是计时了900us
第三行就是把寄存器VAL的值置为0 然后系统就自动重载值(从LOAD中取得)
第四行就是时钟使能
进入do while语句 temp为寄存器的值(一整个寄存器的值 里面有很多位)如果不满足循环条件就一直执行
循环条件:这个寄存器CTRL的值的两个位第一位和第16位都要为1
然后失能 清空计时器在这里插入图片描述
大致看看 要会用!!!

如何测试延时函数是否精准

打开一个工程 点击魔术棒
在这里插入图片描述
点击setting在这里插入图片描述
在第二个红框输入系统时钟在这里插入图片描述
让程序执行到断点的位置 右下角的t1就是到这个程序执行的时间 通过两个时间相减 就是延时了500ms

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值