STM32F103时钟系统讲解2


  写在前面的话:上一篇博客我们详细的介绍了STM32的时钟系统,这一篇我们来验证我们设置的是否正确,并且再进一步深化时钟的概念。也许之前的学习没怎么在意时钟,但是在做项目开发时工程师往往会特别注意时序的问题,一旦设置的不合理或者有错误,产品做成后会带来巨大的影响,因此对时钟的学习是必不可少的。

一、程序实现

  话不多说直接放代码:
main.c

/*
 STM32F103VET6
 SYSCLK = 72M
 HCLK   = 72M
 APB1   = 36M
 APB2   = 72M
*/
#include "main.h"

RCC_ClocksTypeDef clock;

int  main(void)
{
  RCC_GetClocksFreq(&clock);
  while(1)
  {
    ;
  }	
}

main.h

#ifndef __MAIN_H
#define __MAIN_H

#include "stm32f10x.h"

#endif

  程序十分简单我30s就写完了,简单的让我都怀疑,下面先来说一下怎么写出来的。
  我们的目的是验证时钟,获取各个时钟的频率信息,我们知道在ST标准库中,封装了很多很多函数,这其中有一份文件名叫:stm32f10x_rcc.c/h的文件,这一份主要是与STM32的时钟相关的,里面包括了设置时钟频率,时钟源,开启AHB/APB1/APB2的外设时钟等等函数,可以说我们在编程时是离不开这一份文件的,如下图所示,双击点开该文件:
在这里插入图片描述
  直接在.c源文件里找函数是比较累人眼花的,我们先跳转到stm32f10x_rcc.h中,然后一路下拉,拉到最后面,这是ST标准库的规范,一般给函数声明的时候都会放在最后面,开头是很多很多结构体等的定义,可以直接跳过不看,如下所示:
在这里插入图片描述
  拉到最后就开始找我们需要的函数,像RCC_AHBPeriphClockCmd函数就是开启AHB总线上对应外设的时钟,我们这一次要找的是获取时钟频率的函数,我们小眼一瞥一下子就看到了一RCC_GetClocksFreq的函数,看名字RCC获取时钟频率,那就八九不离十就是它了,我们再跳转过去看函数本体,如下图:
在这里插入图片描述
  可以从ST在函数前的注释中(Returns the frequencies of different on chip clocks)可以看出 ,返回的是时钟频率,我们在看一下函数的入口参数是一个结构体:RCC_ClocksTypeDef* RCC_Clocks,我们来看一下结构体成员变量:
在这里插入图片描述
  没错,这就是我们需要的SYSCLK、HCLK、PCLK1、PCLK2时钟,我们只需要在main.c里定义一个RCC_ClocksTypeDef结构体变量在调用这个函数将结构体变量传进去,就完成查询时钟频率的任务。
  然后有人就会来问了,那我调用了这个函数,怎么看最后存在结构体里的得到的时钟频率呢,那就要用到KEIL5的DEBUG功能了,看下一节。

二、KEIL5 DEBUG功能

2.1 准备步骤

  要使用DEBUG功能我们需要将下载器/仿真器连接到板子再连接到电脑,本次例程我使用的是正点原子的DAP仿真器,因此首先在魔术棒的DEBUG选项卡下设置,如下图所示:
在这里插入图片描述
  如果用的是ST-LINK就要选择ST-Link Debugger,仿真器不一样不会有特别大的差异的但是设置的debug方式要选择正确,然后点击右边的Settings里查看,如图:
在这里插入图片描述
  若在②处有显示端口,则表示连接正常,接下来点击OK退出魔术棒选项卡,点击如图的按钮:
在这里插入图片描述
  点击后界面将跳转到DEBUG模式下,如过之前程序没有下载到板子里,点击后会先下载程序进入板子在进入DEBUG界面,如图:
在这里插入图片描述
  下图是DEBUG的工具栏,①是芯片复位按钮,②是运行程序,③是停止运行,④是运行下一步,⑤是跳过运行,⑥是跳出运行,⑦是运行到光标所在处,之后的调试会用到,用到的时候再说:
在这里插入图片描述
  点击选择我们定义的clock,右键Add"clock"to… --Watch1,这一步是将我们定义的clock结构体添加到监视窗口1,如下图:
在这里插入图片描述
  可以在我们的Watch1窗口看到我们添加的clock变量,如图:
在这里插入图片描述
  接下来只需要点击①运行按钮,程序会自动运行,把通过函数获取到的频率值保存下来,如图:
在这里插入图片描述
  如图,和我们上一讲设置的频率值一样,实验成功。
  最后我们在点击停止按钮,停止程序运行,然后再次点击DEBUG按钮退出DEBUG模式,完成本次实验。

2.2 小贴士

  1:如果把变量添加进Watch1后看不到Watch1窗口,可以在View中把窗口调用出来,如图我只打开了Watch1:
在这里插入图片描述
  2:如果点击运行后,Watch1里的变量没有刷新,可以点击View中的Periodic Windows Update,打开变量实时刷新:
在这里插入图片描述

三、小结

  本章我们结束了对STM32时钟系统的讲解,从硬件框架层面到软件层面都进行了介绍,也对DEBUG模式有了一定的认识,下一章将介绍手把手点亮LED灯,STM32入门教学。

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值