基于STM32F407的STM32CubeMX生成C代码和时钟树配置详解

STM32CubeMX初探

  • STM32CubeMX初探
  • 前言
  • 点亮第一个LED
  • 时钟模块配置
  • 时钟系统配置
  • GPIO引脚配置
  • Cortex内核配置
  • 工程生成
  • 注意事项
  • 编译器版本
  • 用户代码位置
  • 前言

    近来对于stm32单片机编程中,HAL库逐渐取代标准库成为主流的库。标准库支持的芯片型号有限,而且目前已经停止支持,而HAL库支持所有类型的芯片,可移植性也很高,再加上有神器STM32Cube可以生成工程模板,越来越多的编程开始从使用标准库转到使用HAL库。

    点亮第一个LED

    l
    新建工程后,在此处输入所用到的芯片型号,此处使用的STM32F407IGT6。
    选好芯片型号进入到配置界面后,需要依次进行时钟模块配置、时钟系统配置、GPIO引脚配置、Cortex内核配置,才能生成工程源码。

    时钟模块配置


    在RCC中选择使用外部晶振作为时钟源,完成对时钟模块的配置。

    时钟系统配置

    时钟是单片机的脉搏,需要极其重视,在stm32Cube中进行时钟配置实则是针对芯片手册中的时钟数对各个时钟频率、锁相环等进行配置。下面对F4的四个时钟源进行介绍。

    时钟源 F407频率要求
    HSE(高速外部振荡器) 4~26MHz
    LSE(低速外部振荡器) 32.768MHz
    HSI(高速内部振荡器)- 16MHz–
    LSI(低速内部振荡器) 32KHZ

    附一张在正点原子参考的时钟树高清图和STM32Cube中对于时钟的配置。二者对比参考理解更深刻。
    STM32F407时钟树
    STM32Cube中对于F407时钟的配置要进行配置首先要理解芯片手册中的时钟树,对于基础的应用来说,只需要理解SYSCLK、AHB、APB1、APB2、RTC时钟的配置即可。
    对于芯片手册中的时钟树,可以先看中间对于SYSCLK进行配置的SW,可以看出,SYSCLK的来源有三个,即HSI、HSE以及锁相环的输出,F407主频最高可以达到168Mhz,仅通过HSI或者HSE来作为时钟源很难发挥最大的效能,一般采用锁相环进行倍频来得到高频率的时钟信号作为系统时钟。

    单独看PLL锁相环,输入可以选择HSI和HSE,一般选用HSE。HSE进行M分频后输入到锁相环中,VCO即理解为电压控制震荡,xN即为放大N倍。随后结合cube中的配置进行理解。
    上一步中以及完成了对时钟模块的配置,随后在Clock Configuration中结合电路板对外部晶振频率进行配置,同时选择系统时钟使用锁相环输出。

    具体配置如上图,不考虑超频的情况下,可达到F407最大的主频168Mhz。

    GPIO引脚配置

    完成时钟配置之后,选择LED对应的引脚,此处使用的是PE0。
    搜索PE0
    选择输出模式。
    下一步见图,可以设置IO的输出模式,初始电平,建议为每个IO添加Label方便进行辨识。

    此时对点亮一个LED的GPIO配置结束。

    Cortex内核配置


    在SYS中选择debug的方式,使用SWDIO和SWCLK进行程序下载的选择Serial Wire

    工程生成

    在Project Manager中进行配置,设置工程名和存储路径,画框的部分需要注意。Structure选择Basic即可,下面的IDE要注意版本对应。

    拉到下面,包的版本需要注意,可能默认的版本与安装的版本不同,可以看自动生成的路径下面包的版本是多少再进行设置。

    在Code Generator中也需要修改默认配置。①处默认是勾选了copy all,这会导致将一些没有用到的库文件生成到工程中,导致工程庞大,编译速度慢,按照如下配置可以只使用用到的文件,工程体积更小。
    ②处需要进行勾选,勾选后会将.c和.h文件分开存放,方便管理。

    配置结束后点击右上方的生成工程可以在指定文件夹下生成配置好的工程文件。

    注意事项

    编译器版本

    新版本的keil没有版本5的编译器,需要选用版本6。否则会导致编译出错。

    用户代码位置

    我们写的代码要放在生成的工程中留出的对应部分,因为下次更新配置重新配置工程时,不在规定位置的代码会被覆盖掉。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32F407的STM32CubeMX生成C代码和时钟树配置详解

    发表评论