STM32部分:3、STM32CubeMX 工程创建

飞书文档https://x509p6c8to.feishu.cn/wiki/LfMpwjktZiMAuMkayt6c0LGZnpx

1、打开STM32CUBEMX,选择File->New Project

如果首次使用,可能会自动下载一些依赖包,可以等待下载完成。

2、选择对应芯片 MCU/MPU Selector->输入"STM32F103RC"->选择搜索到的芯片"STM32F103RCTx"->Start Project

点击Start Project后,等待创建完成即可看到下方界面。

设置时钟源

芯片要运行起来,必须要有时钟源,在STM32中,我们可以选择外部或内部时钟作为芯片时钟源。

这个图中,我先只关注LSI HSI 、LSE HSE和HCLK

内部时钟****LSI HSI

|-----------------------------------------------------------------|
| STM32 MCU内部自带RC振荡电路,其内部时钟就是RC振荡器产生的。 但是RC振荡器精度远低于晶振,且容易受到温度的影响。 |

外部时钟****LSE HSE

|---------------------------------------------------------------------------------------------------------|
| 外部时钟一般有两种接法 外部接有源晶振或其他直接时钟输入源:BYPASS Clock Source模式(旁路时钟源) 外部接无源晶振:Crystal/Ceramic Resonator模式(晶体/陶瓷晶振) |

如果需要选择外部时钟,在RCC界面配置HSE和LSE即可

HSE高速时钟设置为外部无源晶振,LSE为低速时钟,可以不设置,因为我们板卡没有接低速晶振,当用到RTC,并且对精度有要求才加。

同时配置芯片运行时钟频率,这里我们设置HCLK为72,按回车后,会自动生成其它配置。

  1. 外部时钟HSE 8MHz
  2. PLL倍频9倍(8*9=72)
  3. 系统时钟来源选择为PLLCLK

设置烧录调试方式

此步骤非常重要,不开启会导致烧录后,Jlink找不到SWD设备,请记得每个工程都需要开启

STM32作为控制芯片时,程序烧写非常关键的一步,而烧写接口的稳定性及必要时的简洁性就显得尤为重要。目前常用的两种接口是JTAG和SWD,而我们板卡使用SWD接口作为调试接口,SWD(Serial Wire Debug 串行调试),接口仅需4个,分别是VCC、GND、SWIO(双向数据接口)、SWCLK(时钟)。

优点

  • 高速模式更可靠;
  • 接线少,占用的GPIO资源少;
  • SWD搭配ST-Link仿真器使用,相比于JTAG的J-Link,更便宜

打开System Core选项卡,单击SYS选项。

|---------------------------------------------------------------------------------------------|
| SWD模式就选择serial Wire Debug。JTAG模式就选择JTAG,4pin和5pin的区别多了一个复位引脚 stlink调试就是SW模式,jlink调试就是JTAG模式 |

此步骤非常重要,不开启会导致烧录后,Jlink找不到SWD设备,请记得每个工程都需要开启

设置工程

点击顶部工程管理,设置工程名称,设置工程保存路径,选择开发环境,如果使用keil开发,则选择MDK-ARM。
注意:不管工程名称还是路径都不要有中文,否则后面编译文件会出错。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Project Name:工程名称 Project Location:点击后面的"Browse"选择你想要将生成的工程保存到哪个目录里面。 Application Structure:应用程序结构 -Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等) -Advanced:相反就是包含中间件,一般针对相对复杂一点的工程,选择这个,后续方便扩展。 Toolchain/IDE:根据你用的编译软件进行选择 使用KEIL就选择keil的对应版本。 |

源码输出设置

点击左侧Code Generator.选中仅复制需要的库,否则生成的工程会很大.

选择将外设配置为单独的.c和.h文件.

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| copy all used libraries into the project folder: 复制所有库文件(不管工程需要用到还是没用到)到生成的工程目录中。 Copy only the necessary library files: 只复制必要的库文件。这个相比上一个减少了很多文件。比如你没有使用CAN、SPI...等外设,就不会拷贝相关库文件到你工程下。 Add necessary library files as reference in the toolchain project configuration file : 在工具链项目配置文件中添加必要的库文件作为参考。这里没有复制HAL库文件,只添加了必要文件(如main.c)。相比上面,没有Drivers相关文件。 Generate peripheral initialization as a pair of'.c/.h' files per peripheral: 每个外设生成独立的.C .H文件,方便独立管理。不勾:所有初始化代码都生成在main.c 勾选:初始化代码生成在对应的外设文件。 如UART初始化代码生成在uart.c中。 Backup previously generated files when re-generating: 在重新生成时备份以前生成的文件。重新生成代码时,会在相关目录中生成一个Backup文件夹,将之前源文件拷贝到其中。 keep user code when re-generating: 重新生成代码时,保留用户代码(前提是代码写在规定的位置。也就是生成工程文件中的BEGIN和END之间。否则同样会删除。后面会根据生成的工程进行说明) delete previously generated files when not re-generated: 删除以前生成但现在没有选择生成的文件 比如:之前生成了led.c,现在重新配置没有led.c,则会删除之前的led.c文件。(此功能根据自身要求进行取舍) |

点击右上角的GENERATE CODE,就可以生成工程

最后点击Open Project,就可以用你已经安装Keil MDK打开工程。

点击Build,如果最终编译完成没有报错误,就完成STM32CubeMX的搭建啦。

本节课工程参考飞书文档

相关推荐
FreakStudio6 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘11 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484911 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150011 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼11 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志11 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi11 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
goldenrolan11 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘11 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展11 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件