时钟源和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时钟。


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

STM32的时钟树

时钟源和Keil软硬件仿真_STM32

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



仿真

软件仿真

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

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

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


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

仿真中各个按键的含义;

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


按键作用
复位其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。
执行到断点处该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。
停止运行此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。
执行过去在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
执行出去该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。
执行到光标处该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。
汇编窗口通过该按钮,就可以查看汇编代码,这对分析程序很有用。
堆栈局部变量窗口通过该按钮, 显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。
观察窗口MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口, 输入你所想要观察的变量/表达式,即可查看其值, 是很常用的一个调试窗口。
内存查看窗口MDK5 提供 4 个内存查看窗口(下拉选择), 该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口。
串口打印窗口MDK5 提供 4 个串口打印窗口(下拉选择), 该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
逻辑分析窗口该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口, 通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。
系统查看窗口该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。
Debug 工具条上的其他几个按钮用的比较少, 我们这里就不介绍了。


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

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

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

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

然后就可以进行调试了

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

时钟源和Keil软硬件仿真_STM32_08

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

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

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

时钟源和Keil软硬件仿真_STM32_10

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

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

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

时钟源和Keil软硬件仿真_STM32_12

硬件仿真

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

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

修改为:

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

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

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

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

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

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

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

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

单片机的阻塞延时和非阻塞延时

阻塞延时其实就是使用for循环来达到延时的效果,但是在延时的时间中单片机是不能进行其他任何操作的,只能等到延时程序执行完

登录后复制

void delay(unsigned int i){  unsigned int j;  for(j=0;j<i;j++){    //不写或者再套一个空的for循环  }}1.2.3.4.5.6.

非阻塞延时的框架

登录后复制

int main(void){  while(1){    //子程序    Task_A_Processing();    Task_B_Processing();    Task_C_Processing();    ...  }}void Task_A_Processing(){  //等时间一到执行相应的任务,常结合switch语句}//而且一般和定时器中断函数搭配使用1.2.3.4.5.6.7.8.9.10.11.12.13.


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空