STM32 直接修改寄存器来输出内部时钟的方法

1. 在特殊情况下使能 MCO 功能的方法

在对某些不容易复现的问题进行代码调时,需要观察内部时钟的情况,但往往代码之前并没有使能 MCO 功能,在这种情况下就可以使用寄存器直接配置来输出内部时钟到GPIO 脚位上进行观察和测试。

下面的例子就是在调试 STM32G474 很难复现的一个问题,调试暂停时,通过 PC 端调试工具直接更改寄存器配置来使能 MCO 功能输出 SYSCLK 到 GPIO 口的方法。

2. 具体实现

MCO 输出内部时钟到 GPIO 脚位,可以不通过运行用户代码,直接在 PC 端调试工具中配置寄存器来实现。

在程序暂停时,往往已经走过了时钟配置,在这种情况下首先需要使能并配置RCC_CFGR 寄存器。MCOSEL[3:0]=0x1,选 SYSCLK 来输出(当然,也可以根据实际情况选择输出其他时钟源)。
图1.
在这里插入图片描述
在这里插入图片描述
在调试软件中直接手动修改寄存器配置值,如下图:
图4.
在这里插入图片描述
其次,需要配置 GPIO 通路:GPIO MCO 选用 PA8 , AF0 功能。
图5.
在这里插入图片描述
GPIO 选择下面黄色的配置:在下面的配置之前代码中需要打开 GPIOA 的 clock。
图6.
在这里插入图片描述
GPIOA_MODER.MODE8[1:0] 在寄存器窗口中手动修改为 0x2:
图7.
在这里插入图片描述
图8.
在这里插入图片描述
GPIOA_OTYPER.OT8 配置为 0,在上电默认的情况下,不用修改,已经是 0 了。
图9.
在这里插入图片描述
GPIOA_OSPEEDR.OSPEED8[1:0] 配置成 0x2 或 0x3。
在这里插入图片描述
在这里插入图片描述
GPIOA_PUPDR.PUPD8[1:0] 在寄存器窗口中手动配置为 0x1。

图13.
在这里插入图片描述
在这里插入图片描述

GPIOA_AFRH.AFSEL8[3:0] 配置为 0x0,上电默认已经为 0 了,不用修改,如果不是,请手动修改为 0。

图16.
在这里插入图片描述
手动修改后的 GPIOA 寄存器值为如下图 18 所示:

在这里插入图片描述

3. 总结

在调试软件时,可以通过 PC 端调试工具直接修改寄存器配置来使能某些功能。不过,使用中须注意遵守一定的流程,比如先开启对应的外设 clock,然后才能配置具体的寄存器去实现一些具体的功能。
本文档参考ST官方的《【应用笔记】LAT1315+串口DMA接收不定长数据的一种方法》文档。
参考下载地址:https://download.csdn.net/download/u014319604/89056023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值