PS:写在最前(本文是在深入参考了正点原子提供的STM32F407探索者指南的基础上,结合个人的学习心得与深入理解所撰写的。)
使用 STM32CubeMX 配置工程的一般步骤为:
1.工程初步建立(新建工程,选择芯片的型号)
2.HSE和LSE时钟源设置(时钟模块设置)
3.时钟系统(时钟树)配置(包括PLL、SYSCLK、AHB、APB1、APB2等)
4.GPIO功能引脚配置
5.Cortex-M4内核基本配置(限定项)即SYS(DEBUG)配置、NVIC优先级分组
6.生成工程源码
7.用户程序(main.c)
PS:使用Cubemx的时候,创建文档,需要先修改一下路径。
先点击Help
再点击
免得都存在C盘里。
1.工程初步建立
新建工程有两个方法:
方法一:可以点击“File”,“New Project”即可建新工程。
方法二:直接点击 ACCESS TO MCU SELECTOR选项
随后会进入到芯片选型的界面,可自行根据项目需求选择相应的MCU。
芯片型号选择后会弹出图形化界面。
2.HSE和LSE时钟源设置
进入图形化设计界面后,首先需要设置时钟源HSE和LSE。
依此点击Pinout&Configuration->RCC->HSE以及LSE,均选择Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。查询MCU外围电路的原理图可得其外部高速晶振和外部低速晶振分别是:8MHz和32.768KHz,因此HSE时钟频率就是8MHz,LSE时钟频率就是32.768KHz。
根据需求配置,用的最多的HSE高速外部时钟。
选择Crystal晶振。
3.时钟系统(时钟树)配置
点击Clock Configuration选项卡可弹出时钟树界面,主要配置外部晶振大小,分频系数,倍频系数以及选择器。LSE时钟主要配置看门狗以及RTC,倘若没用到这些外设可以暂时不配置。系统时钟的范围:在数据手册(产品手册)里面可以找到。其时钟必须在其工作限定之内。
PS:实在不了解时钟可以在HCLK输入框,直接输入我们要的时钟频率,这里是72MHz,摁下回车,其会自动配置,CubeMX会帮我们提供一种设置时钟频率和其它时钟的建议。
4.GPIO 功能引脚配置
以PE5及PB5两个GPIO口点亮LED灯为例,配置其引脚功能,可在右下角搜索框中搜索需要的引脚。
点击PF5及PB5,在弹出的下拉菜单中,选择IO口的功能为GPIO_Output。IO口功能配置完之后,还要配置IO口的速度,上下拉等参数。这些参数通过System Core下的GPIO选项进行配置。GPIO mode我们已经在视图中配置为推挽输出了,这里不需要修改。GPIO Pull-up/Pull-down 默认是无上下拉,我们这里用默认配置。Maximum output speed 输出速度配置,默认是低速,我们设置为高速。User Label 用户符号,我们可以给PF5起一个别名 LED0。PB5也是按照这样的方法配置起一个别名LED1。
5.Cortex-M4 内核基本配置(限定项)
由于CubeMX默认关闭Debug选项,因此我们需要在SYS选项里需要选择debug功能,不然无法下载。
选择串行即可。
在Project Manager界面里面需要设置一些选项。首先是Project Name(工程名称)以及Project Location(工程保存路径)不能有中文字符。
Toolchain Folder Location:工具链文件夹位置,默认即可。
Application Structure:应用的结构,选择Basic(基础),不勾选Do not generate the main(),因为需要其生成main函数。PS:advanced型和basic型的区别
advanced型和basic型的格式不同,一般推荐选择基础型,头文件和C文件分开放置。
选择MDK-ARM,就可以用keil打开。
在Code Genernated里面配置。
勾选 Generate peripheral initialization as a pir of ‘.c/.h’ files per peripheral,勾选这个选项的话将会将每个外设单独分开成一组.c、.h 文件。
6.生成工程源码
点击SENERATE CODE即可生成工程源码。
完整的工程生成完毕后,其结构如下所示:
Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件。
MDK-ARM 下面存放的是 MDK 工程文件。
Src 文件夹下面存放的是工程必须的部分源文件。
Atk-f103.ioc是STM32CubeMX工程文件,双击该文件就会在 STM32CubeMX 中打开。
7.用户程序
PS:需要注意的是,STM32CubeMX 生成的 main.c 文件中,有很多地方有“/* USER CODE
BEGIN X */”和“/* USER CODE END X */”格式的注释,我们需要在这些注释的 BEGIN 和 END之间编写代码,只有这样重新生成工程之后,这些代码会保留而不会被覆盖。