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

嵌入式ARM架构学习7——时钟、定时器

 一、什么是抖动(Bouncing)

当按键按下或松开时,金属触点不是理想瞬间接触/断开,而是机械振动,导致电平在短时间内反复跳变,这就是抖动

  • 抖动时间:通常为 5μs ~ 10ms,劣质按键甚至更长

  • 结果:MCU 会误认为按键被多次按下/松开

二、硬件层面消除抖动

方法原理优点缺点
RC 低通滤波 + 施密特触发器用电容吸收高频抖动,施密特触发器整形简单、成本低电容值需匹配,响应变慢
专用消抖芯片 / 施密特触发器芯片硬件整形,直接输出干净信号稳定可靠增加成本
按键换型使用霍尔按键光学按键等无触点开关无抖动成本高

⚠️ 注意:单独加电容(不加施密特触发器)效果不好,因为电容充放电本身也会引入缓慢上升沿,反而容易被 MCU 误判为多次电平变化。


 三、软件层面消除抖动(最常用)

1. 延时采样法(延时消抖)
if (key_read() == 0) {          // 首次检测到按下delay_ms(10);               // 延时 10msif (key_read() == 0) {      // 再次确认// 真正按键按下}
}
  • 优点:简单、通用

  • 缺点:阻塞 CPU(可用非阻塞方式优化)

2. 状态机法(非阻塞)
typedef enum {KEY_UP,KEY_DOWN,KEY_CONFIRM
} KeyState;KeyState key_scan(KeyState state) {switch (state) {case KEY_UP:if (key_read() == 0) return KEY_DOWN;break;case KEY_DOWN:if (key_read() == 0) {delay_ms(10);if (key_read() == 0) return KEY_CONFIRM;}return KEY_UP;case KEY_CONFIRM:if (key_read() == 1) return KEY_UP;break;}return state;
}
  • 优点:非阻塞,适合主循环轮询

  • 缺点:占用少量状态变量

3. 定时器采样法(最推荐)
  • 每 1ms 进入一次定时器中断,读取按键电平

  • 连续 N 次(如 8 次)稳定为同一电平,才认为有效

  • 可实现“消抖 + 长按/短按/双击”等复杂逻辑

四 时钟树:

五、定时器:

定时器 (EPIT GPT):是一个通过对已知频率的时钟信号进行计数,来实现定时、延时或事件计数功能的硬件模块或软件机制。
时钟(clock):在电子系统中是一个产生稳定、周期性振荡信号的电路或组件。这个信号像节拍器或心跳一样,为数字电路中的各种操作提供同步时序基准。
实时时钟(RTC real time clock): 是微处理器中的一个功能模块,用于在系统主电源关闭的情况下,继续提供精确的日历和时间信息。
1.硬件概念
(1)时钟源:晶体整荡器:
工作做原理:将石英晶体切割成音叉,施加电压,会产生稳定的震荡。
(2)PLL(phase locked loop)锁相环电路: 倍频
(3)Prescale 分频器:    分频
(4)PFD(phase fractional Prescale)相位分数分频器: 输出频率可升可降

2.代码编写
(1)kernal: CCM_ANALOG_PLL_ARMn
(1)先选择osc_clk,让step_clk为24MHz
(2)再将PLL1的输出改成step_clk,让ARM暂时工作在24MHz;
(3)配置PLL为1056,注意设置倍频因子之前先把PLL之后的二分频设置好,避免ARM内核故障!!
(4)最后改回pll1_main_clk
(2)528 PLL:CCM_ANALOG_PFD_528n
(3)480 PLL:CCM_ANALOG_PFD_480n

(4)AHB_CLK_ROOT(132M)
CBCMR[PRE_PERIPH_CLK_SEL]
CBCDR[PERIPH_CLK_SEL]
CBCDR[AHB_PODF]

    (5)IPG_CLK_ROOT(66M)
CBCDR[IPG_PODF]

    (6)PERCLK_CLK_ROOT(66M)
CSCMR1[PERCLK_CLK_SEL]    
CSCMR1[PERCLK_PODF]


六、通用目的定时器

51单片机2两个定时器timer1、timer2

1.51单片机定时器工作原理
8位可自动重装,16位中段服务程序中手动重装。

(EPIT):
2.i.max6ull定时器工作原理
3.EPIT(Enhanced Periodic Interrupt Timer):增强型周期中断定时器
实验:1s中断,中断服务函数中反转led灯

    频率计算时1000*1000=1MHz
存储计算时1024*1024=1MByte

4.GPT(General Purpose Timer):通用目的定时器
输入捕获和比较输出
实验:利用自由运行模式编写精准延时函数

1、什么是PLL,Prescaler、FPD,它们各自有什么作用?
2、IMX6ULL中有几个PLL?几个PFD?
3、简述ARM PLL的配置流程
4、IMX6ULL中的EPIT和GPT的工作原理是什么?


文章转载自:

http://gtmNqKAL.xxgfL.cn
http://3B8P76Qv.xxgfL.cn
http://UtuHavx1.xxgfL.cn
http://RTRPL5Mk.xxgfL.cn
http://WE8fg4gH.xxgfL.cn
http://OwThZtpY.xxgfL.cn
http://3vNSWxvW.xxgfL.cn
http://cC4SFyom.xxgfL.cn
http://UcxUdGha.xxgfL.cn
http://p1HvtdlF.xxgfL.cn
http://0auTqJTV.xxgfL.cn
http://75qZzi10.xxgfL.cn
http://13YRzSWg.xxgfL.cn
http://qEy4sqBR.xxgfL.cn
http://4pRKBm8p.xxgfL.cn
http://qhMI6q2L.xxgfL.cn
http://mhUfL1pD.xxgfL.cn
http://PFSXNAwO.xxgfL.cn
http://jtbuSJMz.xxgfL.cn
http://HwqtFN3m.xxgfL.cn
http://TK9EgOnF.xxgfL.cn
http://uWwIWFFV.xxgfL.cn
http://A9dJVRY2.xxgfL.cn
http://MQUM8AqN.xxgfL.cn
http://NZD8guHc.xxgfL.cn
http://KQAKxDHA.xxgfL.cn
http://5FZRvpOc.xxgfL.cn
http://8Og7Ze8J.xxgfL.cn
http://OQ0JEXPf.xxgfL.cn
http://RdsyLrTa.xxgfL.cn
http://www.dtcms.com/a/382562.html

相关文章:

  • 【C++练习】17.C++求两个整数的最大公约数(GCD)
  • SQL-字符串函数、数值函数、日期函数
  • Redis内存回收:过期策略与淘汰策略
  • 【css学习笔记9】品优购项目
  • 动态规划解决网格路径问题
  • 金融科技:企业和机构银行
  • C++ 异常
  • One-hot encoding|独热编码
  • AI论文速读 | VisionTS++:基于持续预训练视觉主干网络的跨模态时间序列基础模型
  • 如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的代码
  • 《使用深度学习统一时间相位展开框架》论文总结
  • Windows下使用PerfMon进行性能监控并记录日志
  • 微信小程序开发教程(十二)
  • 【攻防实战】记一次攻防实战全流程
  • 【编号520】全国4500多个地震灾害点位数据(2021.2-2025.8)
  • 牛客网习题题解(持续更新中...)
  • 2025.8.20--python基础温习
  • PCIE地址空间介绍
  • (三)BLE协议栈协议分层架构设计详解--图文结合通俗易懂
  • 主板硬件研发基础--DP/DP++
  • 287. 寻找重复数
  • 《从像素到认知:用 Keras 构建图像分类 CNN 的实战指南》
  • 深入探索 Python 元组:从基础到高级应用
  • Java 黑马程序员学习笔记(进阶篇5)
  • DENOISING DIFFUSION IMPLICIT MODELS
  • Gradle 安装与配置 环境配置 仓库管理 项目介绍 优缺点介绍
  • Replit CEO演讲:软件开发的未来与AI代理革命
  • LeetCode 3541.找到频率最高的元音和辅音:计数(位运算)
  • 使用Python创建本地Http服务实现与外部系统数据对接
  • Redis 线上问题排查简版手册