STM32 新手入门教程

目录

一、前言

二、准备工作

[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 的开发技术。

相关推荐
森焱森1 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
小殷学长3 小时前
【单片机毕业设计17-基于stm32c8t6的智能倒车监测系统】
stm32·单片机·课程设计
TESmart碲视5 小时前
HKS201-M24 大师版 8K60Hz USB 3.0 适用于 2 台 PC 1台显示器 无缝切换 KVM 切换器
单片机·嵌入式硬件·物联网·游戏·计算机外设·电脑·智能硬件
花落已飘6 小时前
STM32中实现shell控制台(shell窗口输入实现)
stm32·单片机·嵌入式硬件
花落已飘7 小时前
STM32中实现shell控制台(命令解析实现)
stm32·shell
没有钱的钱仔7 小时前
STM32低功耗模式全面指南
css·stm32·css3
TDengine (老段)8 小时前
TDengine STMT2 API 使用指南
java·大数据·物联网·时序数据库·iot·tdengine·涛思数据
牵牛老人8 小时前
Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
stm32·单片机·qt
宇钶宇夕10 小时前
针对工业触摸屏维修的系统指南和资源获取途径
单片机·嵌入式硬件·自动化
和风化雨10 小时前
stm32的三种开发方式
stm32·单片机·嵌入式硬件