STM32 CubeMX学习:0. 搭建开发环境
系列文章目录- 前期的准备
- 点亮 LED
- 闪烁 LED
- 定时器闪烁LED
- 未完待续…
文章目录
前言
CubeMx 是一个 由 ST 推出的芯片图形化配置工具,为了使开发者尽可能地可以不再关心底层,允许用户使用图形化向导生成C初始化代码。0.1 软件的安装
在网上有很多安装的相关教程,我这里不做过多的介绍,直接给出我目前的开发环境配置
HOST-OS : Windows-10 pro
STM32 Cube : v5.6
MCU : STM32F407
LIB : stm32cube_fw_f4_v1250
KEIL: MDK V5
注意:使用CubeMX软件需要提前安装对应版本的Java环境,只需安装jre即可
我这里使用的CubeMX版本为5.6,官方推荐使用Java8
0.2 软件使用
看到这里,相信大家已经安装好了CubeMx
如果是第一次安装的话,也要把HAL的包下载好:
下载包
(1)打开软件
(2)Help --> Manage embeded software packages
(3)勾选对应的芯片包,Install now (stm32cube_fw_f4_v1250.zip)
注意:包的位置可以通过: Help -> Updater Settings中的Repository Folder重新指定,这样大家就不怕软件撑破自己的C盘啦
0.3 新建工程
-
打开CubeMX软件,在file选项里选择“New Project”
-
搜索“STM32F407ZG",选择"STM32F407ZGTx"
-
在Cystem Core 下选择RCC选项,在RCC mode and Configuration 中的 High Speed Clock(HSE)下选择Crystal/Ceramic Resonator
一些知识的补充
STM32CubeMX中外部时钟配置可选类型为
Disable 、 BYPASS Clock Source(旁路时钟源) 、Crystal/Ceramic Resonator(石英/陶瓷 晶振) 三种类型。
旁路时钟源:指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。
犹如芯片内部的驱动组件被旁路了。只需要外部提供时钟接入OSC_IN引脚,而OSC_OUT引脚悬空。
外部晶体/陶瓷谐振器(HSE晶体)模式:该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,
有一定的启动时间,精度较高。OSC_IN 与 OSC_OUT引脚都要连接。
-
点击顶部的 Clock Configuration,进行主频配置;将Input frequecncy设置为12,点击旁边的HSE圆形按钮,配置/M为/6,配置*N为X168,配置/P为/2 ,选择PLLCLK圆形按钮,配置APB1 Prescaler为/4,配置APB2 Prescaler为/2;
-
点击顶部的 Pinout & Configuartion,选择SYS,在Debug下拉框中选择Serial Wire;
-
点击顶部的 Project Manager,给工程起名,选择存放目录,在Toolchain/IDE中选择MDK-ARM V5;
注意:路径和名称一定不要包含中文字符,否则你就拿不到你想要的keil代码工程啦。 -
点击旁边的 Code Generator,勾选Copy only the necessary library files以及Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral;
-
点击顶部的GENERATE CODE,等待代码生成,打开工程。
-
注意事项
CubeMX 生成的代码 会有一些特殊的注释,这些注释对于 CubeMx 是有意义的,用户的代码只能写在位于 USER CODE BEGIN …与USER CODE END …之间(自己建立的源码文件不受影响)。否则,当对于 CubeMx 进行重新配置的时候,代码可能会因为被覆盖而消失。例如:
int main(void)`在这里插入代码片`
{
/* USER CODE BEGIN 1 */
用户可编写的代码区
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
用户可编写的代码区
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
用户可编写的代码区
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
用户可编写的代码区
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
用户可编写的代码区
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}