目录
[1. 硬件设备](#1. 硬件设备)
[2. 软件环境](#2. 软件环境)
[1. 安装 Keil MDK](#1. 安装 Keil MDK)
[2. 安装 STM32CubeMX](#2. 安装 STM32CubeMX)
[1. 使用 STM32CubeMX 创建项目](#1. 使用 STM32CubeMX 创建项目)
[2. 在 Keil MDK 中打开项目](#2. 在 Keil MDK 中打开项目)
[1. 了解项目结构](#1. 了解项目结构)
[2. 编写第一个程序](#2. 编写第一个程序)
[3. 编译和下载程序](#3. 编译和下载程序)
[1. 设置调试环境](#1. 设置调试环境)
[2. 调试程序](#2. 调试程序)
[1. 官方文档](#1. 官方文档)
[2. 在线教程和论坛](#2. 在线教程和论坛)
[3. 书籍](#3. 书籍)
一、前言
STM32 微控制器以其强大的性能、丰富的外设和广泛的应用场景,成为了嵌入式开发领域的热门选择。对于新手来说,STM32 的学习可能会有一定的挑战,但只要掌握了正确的方法和步骤,就能够快速入门并开始自己的嵌入式开发之旅。本文将为新手提供一个全面的 STM32 入门教程,帮助大家快速上手。
二、准备工作
1. 硬件设备
- 开发板:选择一款适合新手的 STM32 开发板,如 STM32F103C8T6 最小系统板。这种开发板价格便宜、资源丰富,非常适合学习和实践。
- 下载器:用于将编译好的程序下载到开发板中。常见的下载器有 ST-Link、J-Link 等。
- 电脑:安装开发环境所需的软件。
2. 软件环境
- 集成开发环境(IDE):推荐使用 Keil MDK 或 CubeIDE。Keil MDK 是一款非常流行的嵌入式开发工具,具有强大的功能和良好的用户体验。CubeIDE 是 ST 官方推出的集成开发环境,集成了 STM32CubeMX 图形化配置工具,方便进行项目配置和代码生成。
- STM32CubeMX:ST 官方推出的图形化配置工具,可以快速生成 STM32 项目的初始化代码,大大提高开发效率。
三、安装开发环境
1. 安装 Keil MDK
- 下载 Keil MDK 安装包,可以从 Keil 官方网站或其他可靠渠道下载。
- 运行安装包,按照提示进行安装。在安装过程中,需要选择安装路径、注册许可证等。
- 安装完成后,打开 Keil MDK,进行一些基本的设置,如选择芯片型号、设置编译器路径等。
2. 安装 STM32CubeMX
- 下载 STM32CubeMX 安装包,可以从 ST 官方网站下载。
- 运行安装包,按照提示进行安装。在安装过程中,需要选择安装路径、安装组件等。
- 安装完成后,打开 STM32CubeMX,进行一些基本的设置,如选择芯片型号、设置下载器类型等。
四、创建第一个项目
1. 使用 STM32CubeMX 创建项目
- 打开 STM32CubeMX,选择芯片型号。可以通过搜索芯片型号或从列表中选择。
- 配置时钟系统。根据实际需求选择外部晶振或内部振荡器,并设置时钟分频系数和倍频系数。
- 配置外设。根据项目需求,配置 GPIO、UART、SPI、I2C 等外设。可以通过图形化界面进行配置,非常直观方便。
- 生成代码。配置完成后,点击 "Project" 菜单中的 "Generate Code" 按钮,生成项目的初始化代码。
2. 在 Keil MDK 中打开项目
- 打开 Keil MDK,点击 "Project" 菜单中的 "Open Project" 按钮,选择刚才生成的项目文件夹中的 ".uvprojx" 文件,打开项目。
- 在 Keil MDK 中,可以看到项目的结构和代码。可以对代码进行编辑、编译、下载和调试。
五、编写代码
1. 了解项目结构
- 在 Keil MDK 中打开项目后,可以看到项目的结构。主要包括以下几个部分:
- HALLIB 下面存放的是ST官方提供的HAL库文件,每一个源文件stm32f4xx_hal_ppp.c
都对应一个头文件 stm32f4xx_hal_ppp.h。分组内的源文件我们可以根据工程需要添加和删除。
这里对于跑马灯实验,我们需要添加 11 个源文件。- CORE 下面存放的是固件库必须的核心头文件和启动文件。这里面的文件用户不需要
修改。大家可以根据自己的芯片型号选择对应的启动文件。- SYSTEM 是 ALIENTEK 提供的共用代码,这些代码在第五章都有详细讲解。
- HARDWARE 下面存放的是每个实验的外设驱动代码,他的实现是通过调用 HALLIB下面的HAL库文件函数实现的,比如led.c中函数调用stm32f4xx_hal_gpio.c内定义的函数对led
进行初始化,这里面的函数是讲解的重点。后面的实验中可以看到会引入多个源文件。- USER 下面存放的主要是用户代码。但是 system_stm32f4xx.c 文件用户不需要修改,
同时 stm32f4xx_it.c 里面存放的是中断服务函数,这两个文件的作用在 3.3 节有讲解。main.c 函
数主要存放的是主函数了。
2. 编写第一个程序
- 在 "Src" 文件夹中创建一个新的源文件,如 "main.c"。
- 在 "main.c" 文件中,编写一个简单的程序,如点亮一个 LED 灯。以下是一个示例代码:
cpp
#include "stm32f4xx_hal.h"
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
LED_Init(); //初始化LED
while(1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //LED0对应引脚PB1拉低,亮,等同于LED0(0)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //LED1对应引脚PB0拉高,灭,等同于LED1(1)
delay_ms(500); //延时500ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //LED0对应引脚PB1拉高,灭,等同于LED0(1)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //LED1对应引脚PB0拉低,亮,等同于LED1(0)
delay_ms(500); //延时500ms
}
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0置1,默认初始化后灯灭
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1置1,默认初始化后灯灭
}
- 在这个程序中,首先调用HAL_Init函数进行初始化,然后配置 GPIO 引脚为输出模式,最后在一个无限循环中交替点亮和熄灭 LED 灯。
3. 编译和下载程序
- 在 Keil MDK 中,点击 "Build" 菜单中的 "Build Target" 按钮,编译项目。如果编译成功,会在 "Output" 窗口中显示编译信息。
- 将下载器连接到开发板和电脑上,然后在 Keil MDK 中点击 "Flash" 菜单中的 "Download" 按钮,将编译好的程序下载到开发板中。
六、调试程序
1. 设置调试环境
- 在 Keil MDK 中,点击 "Debug" 菜单中的 "Start/Stop Debug Session" 按钮,进入调试模式。
- 在调试模式下,可以设置断点、单步执行、查看变量值等。
2. 调试程序
- 设置断点:在代码中需要调试的地方点击鼠标右键,选择 "Insert/Remove Breakpoint" 设置断点。
- 单步执行:点击 "Debug" 菜单中的 "Step" 或 "Step Over" 按钮,进行单步执行或单步跳过。
- 查看变量值:在 "Watch" 窗口中,可以添加需要查看的变量,实时查看变量的值。
七、学习资源推荐
1. 官方文档
- STM32 的官方文档非常详细,包括芯片手册、参考手册、用户手册等。可以从 ST 官方网站下载。
- 官方文档是学习 STM32 的重要资源,建议新手认真阅读。
2. 在线教程和论坛
- CSDN、电子发烧友等网站上有很多关于 STM32 的教程和经验分享,可以帮助新手快速入门。
- STM32 官方论坛也是一个很好的学习资源,可以在上面提问、交流和分享经验。
3. 书籍
- 《STM32 自学笔记》《STM32 库开发实战指南》等书籍都是非常适合新手学习的书籍。
八、总结
STM32 的学习需要一定的时间和耐心,但只要掌握了正确的方法和步骤,就能够快速入门并开始自己的嵌入式开发之旅。本文为新手提供了一个全面的 STM32 入门教程,希望能够帮助大家快速上手。在学习过程中,建议大家多动手实践,遇到问题多查阅资料和请教他人,相信大家一定能够掌握 STM32 的开发技术。