很多应用场合需要检测系统时钟是否在正常范围内,以保证MCU能正常工作,CLASS B功能安全实现系统时钟自检的方法是采用两个独立时钟源交叉检查来进行测量,可使其中一个作为定时器的时钟源,另一个作为定时器的输入。SPIN0280含有微控制器时钟输出(MCO)功能,允许时钟输出到外部 MCO 引脚上,可以很便捷的输出HSI内部时钟信号到引脚上,配置外部时钟HSE为MCU的系统时钟,使用Timer3对引脚上的HSI信号进行捕获,以实现内部HSI和外部HSE交叉检测的功能。
微控制器时钟输出(MCO)
微控制器时钟输出(MCO)允许时钟输出到外部 MCO引脚上。相应 GPIO端口的配置寄存器必须被配置为复用输出功能。可以选择以下五个时钟信号中的一个作为 MCO输出时钟:
MCO 与时钟源对应关系
微控制器时钟输出(MCO)配置为在PA8引脚上输出,此时PA8引脚需配置为AF0复用模式。
TIM3 通用定时器
由一个16位可实时编程预分频器和一个16位计数方向可调的自动装载计数器组成,可以为用户提供便捷的计数定时功能,计数器时钟由预分频器分频得到。
TIM3具有多种用途:输入功能(测量输入信号的脉冲宽度、频率,PWM输入等),输出功能(PWM输出、单脉冲模式输出等)。
本次主要使用TIM3的输入捕获功能,输入捕获部分包括数字滤波器、多路复用、预分频器等,结构如下:
输入捕获模式下,当检测到信号ICx上的有效边沿后,计数器的当前值被锁存到对应的影子寄存器上,再复制到对应的捕获比较寄存器中。当开启了中断或DMA使能,发生捕获事件时,将产生相应的中断或DMA请求。发生捕获事件时,会将状态寄存器(TIM3_SR)中的捕获标志位 CCxIF 置 1,通过配置 CCxIF=0或读取TIM3_CCRx中的数据,清除CCxIF标志位。当CCxIF未被清零时,发生输入捕获事件,重复捕获标志位CCxOF将会被置1,通过配置CCxOF=0,可以清除CCxOF标志位。
SPIN0280的通用定时器TIM3有4路输入捕获通道,本文采用TIM3_CH2对HSI进行捕获。
SPIN0280 Timer3捕获内部HSI时钟具体步骤
1. 使用外部HSE时钟(8M)并倍频到96M作为系统时钟
2. TIM3_CH2的引脚配置,配置为PA7的AF1复用功能
3. TIM3挂载在APB1上,使能TIM3时钟
4. 配置TIM3,计数器清空,由低向高计数,上升沿触发,时钟不分频
5. 配置MCO输出在PA8引脚上,配置PA8为AF0复用功能,HSI信号128分频输出
6. 开启TIM3的时钟中断,并配置NVIC和编写中断函数
7. 开启Timer3外设
示例代码如下:
示例输出结果:
与实际硬件测试的结果相符。
作者:灵动MM32MCU
文章来源:灵动MM32MCU
推荐阅读
- MicroPython应用基础-准备基于MM32F5的MicroPython开发板
- 使用MM32L0130和HYS1254的电子秤方案验证
- 利用DMA的触发循环实现对eTMR的PWM周期计数
- 手工打造基于MM32F5微控制器的MicroPython开发板
- 汽车电子系统总线LIN通信协议精要
更多MM32F5系列资料请关注灵动MM32 MCU专栏。如想进行MM32相关芯片技术交流,请添加极术小姐姐微信(id:aijishu20)加入微信群。