0
点赞
收藏
分享

微信扫一扫

时钟源和Keil软硬件仿真

与时钟的相关的函数基本都在 stm32f10x_RCC 文件中;

assert_param()用于检测传递给函数的参数是否是有效的参数 

与端口相关的函数基本都在 stm2f10x_GPIO 文件中

时钟源

STM32单片机的时钟源有五个:

HSE

外部高速时钟(High Speed External),由以下两种时钟源产生:HSE外部晶体/陶瓷谐振器;HSE用户外部时钟。为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的振荡器来调整,精度比较高。

HSI

内部高速时钟(High Speed Internal),HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

LSE

外部低速时钟(Low Speed External),LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。 LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。 在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直 到这个位被硬件置’1’后, LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产 生中断申请。

LSI

内部低速时钟(Low Speed Internal),LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。 LSI时钟频率大约40kHz(在30kHz和60kHz之间)。进一步信息请参考数据手册中有关电气特性部分。LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为’1’后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,将产生LSI中断申请。

PLL

锁相回路或锁相环(Phase Locked Loop),内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激 活前完成。一旦PLL被激活,这些参数就不能被改动。 如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。 如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的 USBCLK时钟。

(摘自正点原子《STM32F1开发指南(精英版)-寄存器版本_V1.3.pdf》)

在时钟树中倍频是“f*2”;分频是“f/2”。

STM32的时钟树

时钟源和Keil软硬件仿真_硬件仿真

(摘自正点原子《STM32F1开发指南(精英版)-寄存器版本_V1.3.pdf》)

仿真

软件仿真

软件仿真是程序在电脑上运行,并不需要连接实际的单片机。软件仿真需要配置下面

时钟源和Keil软硬件仿真_硬件仿真_02

需要配置相应的时钟(这里的8.0指的是晶振)

时钟源和Keil软硬件仿真_时钟源_03

仿真中各个按键的含义;

时钟源和Keil软硬件仿真_STM32_04

按键

作用

复位

其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。

执行到断点处

该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查 看的地方设置了断点。

停止运行

此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。 执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。

执行过去

在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。

执行出去


该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。

执行到光标处

该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。

汇编窗口

通过该按钮,就可以查看汇编代码,这对分析程序很有用。

堆栈局部变量窗口

通过该按钮, 显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。

观察窗口

MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口, 输入你所想要观察的变量/表达式,即可查看其值, 是很常用的一个调试窗口。

内存查看窗口

MDK5 提供 4 个内存查看窗口(下拉选择), 该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口。

串口打印窗口

MDK5 提供 4 个串口打印窗口(下拉选择), 该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。

逻辑分析窗口

该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口, 通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。

系统查看窗口

该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。

Debug 工具条上的其他几个按钮用的比较少, 我们这里就不介绍了。 

(摘自正点原子《STM32F1开发指南(精英版)-寄存器版本_V1.3.pdf》)

要对下图中的数据进行修改则需要进入到

时钟源和Keil软硬件仿真_软件仿真_05

时钟源和Keil软硬件仿真_时钟源_06时钟源和Keil软硬件仿真_逻辑分析_07

然后就可以进行调试了

可以用来观察PC13是输出高电平还是低电平

时钟源和Keil软硬件仿真_硬件仿真_08

在运行程序之后,对应的GPIOC的ODR寄存器会发生变化

时钟源和Keil软硬件仿真_STM32_09

同样地也可以在Keil中采用类似示波器一样的功能去观察其对应引脚的波形

时钟源和Keil软硬件仿真_软件仿真_10

不过需要配置一下,点击左上角的”Setup“进行如下配置

时钟源和Keil软硬件仿真_逻辑分析_11

其结果类似于示波器,可以通过该方法来看引脚的输出是低电平还是高电平。

时钟源和Keil软硬件仿真_逻辑分析_12

硬件仿真

硬件仿真是实实在在与单片机连接的,程序在单片机中运行。可以使用示波器、逻辑分析仪。硬件仿真需要配置下面

时钟源和Keil软硬件仿真_时钟源_13

修改为:

时钟源和Keil软硬件仿真_硬件仿真_14

硬件仿真的配置过程与软件仿真的相似,不过是"D"变成"T"。

时钟源和Keil软硬件仿真_软件仿真_15

点击”Settings“,选择时钟为72MHz

时钟源和Keil软硬件仿真_软件仿真_16

逻辑分析仪的配置与软件仿真一样

时钟源和Keil软硬件仿真_逻辑分析_11

然后会发现逻辑分析仪没有什么图像,这是由于在硬件仿真的时候不支持逻辑分析仪,感觉海创电子的分享。


举报

相关推荐

0 条评论