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

嵌入式-定时器的时基单元,自制延迟函数-Day21

一、时基单元

1.定时器简介

其实就是片上外设,然后分为3种,逐层阉割(高级的功能最全)

功能:其实单片机的手表,涉及到时间的都会用到这个片上外设

f1系列有14个定时器,这里的单片机选择了其中的4个


2. 时基单元的基本结构

时钟来源:来自时钟树下的时钟信号或者从模式控制器

降频PSC:降频 信号

计数CNT:记录脉冲信号次数

定时周期:使用到自动重装计时器ARR(封顶值,同时也代表步数/次数,比如0-59,60值,走59步),周期为ARR+1(原因0开始到4的5个数即四步,再走一步就因超限归0,所以得加1)

重复计数器RCR:只用于高级定时器,默认0,既而为1,设置值会控制几个周期触发一次update

解答定时器的定时功能

以手表举例,自带晶振发信号,分频,走59步,T=0,RCR为0,重复计数0+1,最后update


3.上计数、下计数和中心对齐

中心对齐特殊:因周期不同其他二者


4.时钟的来源

知识补充

分辨率:表盘一格(一次脉冲的t)

该时钟树下不管是哪个定时器,最后都是72MHz


5.寄存器预加载

带有背景灰色的都是带有影子寄存器(可以实现寄存器预加载)

往RCR写值:原理是先写入值到影子寄存器,然后当前面一个周期(或者k周期)完,触发update,影子寄存器写值到活动寄存器。

这里看,无影子寄存器,突然改变ARR(7-3),5始终不会等于3,走到当前2^16寄存器极限,才归0。造成无限递增

有影子寄存器,突然改变ARR,先影响影子寄存器值,当脉冲数走顶峰归0,触发update,影子往活动写值,因为从0开始,必定不会无限递增

二、自制延迟函数

单片机自带Delay是系统自带的:系统滴答计时器 SysTick,这里使用自制

原理:自定义的延迟接收:延迟时间触发中断。

每ms触发一次中断,中断响应函数触发:时间以ms++,

1.获取单片机开机后的当前步数和当前走了多少时间

一开机就是0步,之后开始++。

设置分辨率1us,周期为1ms,1ms触发一次update中断。

每次中断设置currentTick+1,即每ms下currentTick+1。


2.实现延迟函数


3.初始化时基单元


4.配置中断


5.编写中断响应函数

http://www.xdnf.cn/news/18841.html

相关文章:

  • AI驱动的前端性能优化:从监控到自动化修复
  • C# 字符和字符串
  • 《信息检索与论文写作》实验报告三 中文期刊文献检索
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • GitHub 宕机自救指南:保障开发工作连续性
  • Android中点击链接跳转到对应App页面的底层原理
  • 信号线串扰仿真
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • 达梦数据库-控制文件 (二)
  • 如何在开发工具中使用钉钉MCP
  • 数据结构:在堆中插入元素(Inserting In a Heap)
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • MYSQL---存储过程
  • 能源行业数据库远程运维安全合规实践:Web化平台的落地经验
  • AI 暗战: 回声室攻击 —— 解锁大模型安全防御的隐秘战场
  • [Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试
  • 【RabbitWQ】基于 Java 实现轻量级消息队列(二)
  • 使用 ROS2 构建客户端-服务器通信:一个简单的计算器示例
  • 储能变流器学习之MPPT
  • 汽车盲点检测系统的网络安全分析和设计
  • k8s-容器化部署论坛和商城服务
  • 开源 | 推荐一套企业级开源AI人工智能训练推理平台(数算岛):完整代码包含多租户、分布式训练、模型市场、多框架支持、边缘端适配、云边协同协议:
  • PMP项目管理知识点-⑮预测型项目概念辨析
  • Web 自动化测试常用函数实战(一)
  • Unity自定义Inspector面板之使用多选框模拟单选框
  • 测试分类(超详解)
  • vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据
  • 基于SpringBoot的社区儿童疫苗接种预约系统设计与实现(代码+数据库+LW)
  • 【高级机器学习】3. Convex Optimisation