应用笔记|直接修改寄存器来输出内部时钟的方法

发布者:MysticalSoul最新更新时间:2024-07-08 来源: elecfans关键字:寄存器  STM32 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

2.具体实现


MCO 输出内部时钟到 GPIO 脚位,可以不通过运行用户代码,直接在 PC 端调试工具中配置寄存器来实现。在程序暂停时,往往已经走过了时钟配置,在这种情况下首先需要使能并配置RCC_CFGR 寄存器MCOSEL[3:0]=0x1,选 SYSCLK 来输出(当然,也可以根据实际情况选择输出其他时钟源)。6802c37e-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/100068304952-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

在调试软件中直接手动修改寄存器配置值,如下图:6880b8f6-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

其次,需要配置 GPIO 通路:GPIO MCO 选用 PA8 , AF0 功能。68cbc01c-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

GPIO 选择下面黄色的配置:在下面的配置之前代码中需要打开 GPIOA 的 clock。

68fc8f9e-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


GPIOA_MODER.MODE8[1:0] 在寄存器窗口中手动修改为 0x2:

69222f1a-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

695f148e-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


GPIOA_OTYPER.OT8 配置为 0,在上电默认的情况下,不用修改,已经是 0 了。

698b2cf4-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


GPIOA_OSPEEDR.OSPEED8[1:0] 配置成 0x2 或 0x3。

69a7b6c6-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

69c47108-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


GPIOA_PUPDR.PUPD8[1:0] 在寄存器窗口中手动配置为 0x1。

69e6217c-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

6a00312a-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

6a36bfb0-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


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

6a6d285c-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

6a8ebbc0-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000


手动修改后的 GPIOA 寄存器值为如下图 18 所示:

6ab9d116-09cd-11ee-962d-dac502259ad0.png?imageView2/2/w/1000

3. 总结


在调试软件时,可以通过 PC 端调试工具直接修改寄存器配置来使能某些功能。不过,使用中须注意遵守一定的流程,比如先开启对应的外设 clock,然后才能配置具体的寄存器去实现一些相应的功能。


关键字:寄存器  STM32 引用地址:应用笔记|直接修改寄存器来输出内部时钟的方法

上一篇:RT-Thread中使用lwip自带的tftp功能传输文件
下一篇:深入理解STM32寄存器

推荐阅读最新更新时间:2026-03-21 01:43

STM32】DMA基本原理、寄存器、库函数
DMA的基本介绍 1DMA的基本定义 DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。 2DMA的主要特征 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置; 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设
[单片机]
STM32 CAN接收/发送错误寄存器如何清零?
CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线的标准中,每一个节点都有一个CAN控制器,CAN控制器通过内部寄存器和接口与CAN总线连接。其中,在CAN传输过程中,如果出现错误,会在CAN控制器内部错误寄存器中记录错误信息。因此,在使用STM32进行CAN接收/发送时,及时清零错误寄存器是非常重要的。 一、STM32的CAN错误寄存器 STM32是一款常用的单片机,内置了CAN控制器,其错误寄存器分为两种类型: 1.接收错误寄存器:即CAN接收错误寄存器,用于记录CAN接收过程中出现的错误信息; 2.发送错误寄存器:即CAN发送错误寄存器,用
[单片机]
STM32系列MCU,写寄存器Or利用固件库
写在开头的话: 最近心血来潮,打算重新捡起老本行,结果发现很多都忘记了。干脆重新开始学习,并做个从零开始的笔记了。 STM32系列MCU STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片适用于不同的应用场景。F0/L0基于ARM Cortex®-M0,F1/F2/L1系列基于ARM Cortex®-M3,F3/F4/L4系列基于ARM Cortex®-M4,F7/H7基于ARM Cortex®-M7。L系列表示超低功耗,H表示超高性能(对应就是高功耗了),F就是个折中方案了,性能不错,功耗也不高。 其他的先不管,F1系列芯片主要分类如下: ·超值型STM32F100
[单片机]
<font color='red'>STM32</font>系列MCU,写<font color='red'>寄存器</font>Or利用固件库
STM32复位来源(寄存器版)
最近项目遇到了一个问题:一个子系统,具有IAP升级的功能,Bootloader位于0x08000000,也就是说系统在运行过程允许复位。但是,该子系统需要在上电的过程中处理某项任务(而且只需要上电的那一次)。 问题来了:我们如何判断系统是第一次上电复位? 解决的办法有很多种,但是最简单的办法就是获取系统复位来源,详情请看文章。 其实,这篇文章的内容也能回答之前一位网友的问题,不知你会不会阅读本文。 Ⅰ RCC复位和时钟控制 RCC:Reset and Clock Control 相信大家都知道RCC是什么,主要就是讲述复位和时钟的章节。先来讲述一下复位种类。 STM32的复位大概分为三类:系统复位、电源复位和后备域复位。 系统
[单片机]
<font color='red'>STM32</font>复位来源(<font color='red'>寄存器</font>版)
深入理解STM32寄存器
1 引言 我们在学习STM32的时候,把被控单元的 FLASH,RAM,FSMC和AHB 到 APB 的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们(通过 C 语言对它们进行数据的读和写)。它的地址是由芯片厂商或用户分配,给__存储器__分配地址的过程就称为__存储器映射。 我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的__寄存器 。给已经分配好地址的特定功能的__内存单元取别名__的过程就叫__寄存器映射__。 然而笔者这里要讲的寄存器和我们操作STM32的寄存器不是一个东西,这里是CPU中的寄存
[单片机]
深入理解<font color='red'>STM32</font><font color='red'>寄存器</font>
STM32单片机寄存器的功能解析
“大神”叫你先上STM32,51是小朋友玩的,所以你就不学51了 初学者建议从51单片机开始,虽然很多人建议直接上STM32,但本人还是建议先学习51单片机,简单且不容易打消积极性,很多人都是在积极性消退之后就会半途而废,等熟悉了LED、串口、SPI、按键、中断、IIC等这些基础之后,如果对单片机还有兴趣,不妨再去晋升学习STM32单片机,有了51单片机作为基础,这时候学习STM32也是可以非常快的就能上手。 一般的寄存器的定制是从0开始定义,0000这个寄存器地址存放的是温度的一个数据,然后0001这个采用的是湿度的数据,它们两个数据的范围都是0到65535,并且都是只读的,所以它适用于的是03这个功能,组态地址就不用关心了
[单片机]
<font color='red'>STM32</font>单片机<font color='red'>寄存器</font>的功能解析
什么是STM32寄存器
STM32 长啥样 芯片正面是丝印,ARM 应该是表示该芯片使用的是ARM 的内核,STM32F103VET6是芯片型号,后面的字应该是跟生产批次相关,最上面的是ST 的LOGO。芯片四周是引脚,左下角的小圆点表示1 脚,然后从1 脚起按照逆时针的顺序排列(所有芯片的引脚顺序都是逆时针排列的)。开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32 上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作,通过做实验的方式来学习STM32 芯片的各个资源。开发板是一种评估板,板载资源非常丰富,引脚复用比较多,力求在一个板子上验证芯片的全部功能。 芯片里面有什么 我们看到的STM3
[单片机]
什么是<font color='red'>STM32</font><font color='red'>寄存器</font>
STM32编程之从寄存器到标准库
【1】上集说到寄存器编程之点灯仪式,寄存器编程看似简单,是因为点灯本身就很简单,大家知道寄存器编程是怎么回事就行了,下面我们改造一下前篇文章的程序,渐渐地我们就往标准库靠拢了!新世界,更精彩,打起精神! 【2】引入头文件 改动很小,就是把宏定义移到了.h文件中,再在.c文件中include头文件即可。以上便是头文件的引入。值得注意的是头文件开头两句和最后一句是格式,是为了防止重复声明,不加的话容易粗心出错! 【3】引入文件夹和混合编译 问题:两个.c问题如何同时编译 只需要一步配置即可,这里我们新建了一个文件夹,也完成了混合编程的目的,下一步就可以接触标准库编程方式了,下篇文章再见!
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved