三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

1、STM32时钟系统概述

1.1 时钟系统的概念及意义

 1.1.1 概念

         时钟系统是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常见的信号源有晶体振荡器和RC振荡器。

  1.1.2 意义

         时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变化等动作,外设部件

  在时钟的驱动下完成各种工作,比如串口数据的发送,A/D转换,定时器计数等等。因此时钟对于计

 算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、震荡不稳,停振等。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

1.2 常见振荡器介绍

       1.2.1 概念

            振荡器是用来产生重复电子讯号的电子元件。其构成的电路叫做振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路或者装置。

        1.2.2 分类

             振荡器主要分为RC,LC振荡器和晶体振荡器:

              RC振荡器采用RC网路作为选频移相网络的振荡器。

              LC振荡器是采用LC振荡回路作为移相和选频网络的正反馈振荡器。

              晶体振荡器的振荡频率受石英晶体的控制。

       1.2.3 RC振荡器

              RC振荡器是电阻电容构成的振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路。

              优点:实现的成本比较低,毕竟就是电阻和电容构成

              缺点:由于电阻电容的精度问题所以RC振荡器的会有误差,同时受到温度,湿度的影响。

        1.2.4 晶体振荡器

               晶体振荡器是高精度和高稳定的振荡器,被广泛应用于彩电,计算机,遥控器等各类振荡电路中,以及通信系统中用于频率发生器、为数据处理设备产生时钟信号和为特定系统提供基准信号。

               优点:是相对来说振荡频率一般都比较稳定,同时精度也比较高

               缺点:就是价格少微贵一点,还有用晶体振荡器一般还要配15~33pf起振电容。

1.3  STM32时钟源介绍

 

         HSI:高速内部时钟,RC振荡器,频率为8MHZ或16MHZ

         HSE:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHZ~16MHZ

         LSI(Low-speed internal (LSI) RC oscillator):低速内部时钟,RC振荡器,频率为40KHZ。独立看门狗时钟源只能是这个,还可以做RTC时钟源。

         LSE:低速外部时钟,接32.768KHZ的石英晶体。这个主要是RTC的时钟源。

 

1.4   时钟树分析

     1.4.1 概念

            微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩散流动的路径,

     犹如大树的养分通过主干流向各个分支,因此常称之为“时钟树”。在一些传统的低端8位单片机诸如51,AVR,PIC等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,

     亦即在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于正常工作的状态)。比如51单片机使用典型的12MHz晶振作为时钟源,则外设如IO口、定时器、串口等设备的驱动时钟速

      率便已经是固定的,用户无法将此时钟速率更改,除非更换晶振。

      而STM32微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的关系,本文将详细解析STM32微控制器的时钟树和STM32CubeMX Clock Configuration的配置关系。


      1.4.2 时钟树  STM32L011G4U6微控制器为例

            以STM32L011G4U6微控制器为例,时钟树如下,左侧为6种时钟源时钟,经过一些运算和转换到达右边的系统时钟和外设时钟。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

 时钟树并不难读懂,沿着导线耐心一步步可以很快理解,例如系统时钟可支持MSI、HSI16、HSE和PLLCLK四种时钟源配置,其中HSI16时钟源可支持倍频器分频(1倍和4倍),

     PLLCLK锁相环倍频输出可支持HSI16和HSE时钟源两种时钟源配置,并且进行倍频输出(预分频寄存器和时钟倍频寄存器配置)。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

1.4.3 时钟树  STM32F4XX中文参考手册  微控制器为例

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

1.5    原理图分析之CPU最小单元电路系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

电源:3.3V

          振荡器:HSI,LSE    太阳能S350 RTC采用外部晶体振荡器LSE,CPU采用内部时钟系统HSI(原理图没有这个管脚的配置,而且这两个管脚被用来监控充电状态了)

          复位电路:100nF的电容或者通过按键

          CPU:STM32F401RET6

2、使用 STM32CubeMX 新建项目工程

第一步:双击打开 STM32CubeMX,点击新建工程,在 MCU 选型框里输入 STM32F401RET6,右侧选择芯片封装为 LQFP 的型号,双击进入。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第二步,点击Start_Project 显示图如下

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

此时就可以通过原理图分析专题,来配置各个管脚的功能如,重点是如何配置时钟系统,这里只配置一个蜂鸣器的IO程序Demo

第三步,RTC采用外部晶体振荡器LSE

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第四步,CPU采用内部时钟系统HSI

由于采用内部时钟系统,所以直接RCC HSE Disable就可以

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第五步,进入Clock Configuration

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第六步,选择合适的时钟源和倍频,即可便捷快速实现相关配置(时钟频率越低,功耗越小,过低可能部分外设无法驱动)

比如配置HCLK到最高84MHZ,直接修改HCLK为84就可以了,STM32CubeMX 会自动设置PLL,然后配置需要的参数

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第七步,顺便配置一个蜂鸣器IO口,测试一下吧,省的不知道程序有没有跑起来

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

BUZZER_EN 对应CPU的PB9,PB9输出不同频率的高低电平可以让蜂鸣器输出对应的响声。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

但是,对于R232这个电阻就有一些细节需要考虑了。首先

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

GPIO 配置为了推挽输出,默认输出为低电平,但是GPIO的上拉下拉模式需不需要配置啊?

对于蜂鸣器电路,R232就是硬件直接下拉的电阻,但是其实咱们的GPIO支持上拉下拉模式,要不要省掉这个钱,其实是需要硬件考虑的。

如果没有R232这个电阻,软件工程师可以通过配置GPIO的下拉模式,同样可以实现默认输出低电平。

第八步,点击Project Manager

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第九步、配置生成代码的一些配置。在 Project 界面设置本工程名称,选择按照什么开发工具生成项目工程,这里我们使用的是 MDK5。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第十步、在这个界面中还需要配置的是 Code Generator,这一栏中将“Generate peripheral initialization as a……”选中,这样生成的工程会把使用的资源(IIC、SPI、USART、GPIO 等)初始化代码分别放在对应名字的单独的.c 文件中,方便我们自己增删改查使用。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第十一步、点击上面的 OK 生成工程代码。 生成工程代码成功后,可以选择打开工程目录或者直接打开工程。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

第十二步、选择打开工程目录。可以看到工程目录分为两个部分,一个是 MDK5 的工程目录,一个是 STM32CubeMX 的工程。STM32CubeMX 工程文件还可以用 STM32CubeMX 打开提供增加或者删除、修改本工程,非常方便。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

3、工程介绍

3.1、MDK工程目录结构介绍

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

3.2、MDK工程文件介绍

进入MDK-ARM文件夹,打开LED工程文件。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

整个工程目录设置的特别清楚,分为 4 个部分:

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统

并且在用户代码区的每一个.C 文件中,都有多处是 BEGIN 和 END 且每处 BEGIN 和 END都有对应的提示,开发者只需将自己的代码放在对应的区域就行

(当然也可以不这么做,这个只是为了方便再次使用 STM32CubeMX 开发缩小研发时间,增强代码可读性,便于团队协作)。编译之后无错误无警告。

三、如何使用STM32CubeMx构建keil5,并且配置时钟系统