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

相关推荐
银科院-计算机与人工智能16 分钟前
单片机原理级应用 笔记
笔记·单片机
limingade4 小时前
手机实时提取SIM卡打电话的信令声音--社会价值(二、方案特点和主要优势)
android·java·arm开发·物联网·智能手机·语音识别·蓝牙电话
lucy153027510794 小时前
【青牛科技】D2577——高效升压型DC-DC转换器,固定52KHz开关频率,可以提供最高3A 输出电流能力,具有低纹波,出色的线性调整率与负载调整率等特点
科技·单片机·智能家居·信号处理·工控主板·汽车音响
沐欣工作室_lvyiyi7 小时前
基于stm32的红外测温系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·毕业设计·智能家居
willhuo7 小时前
luatos fskv数据库操作
单片机·lua
神一样的老师8 小时前
物联网中的数据收集:MQTT实现的比较
物联网
凌盛羽15 小时前
C#对Excel表csv文件的读写操作
开发语言·windows·物联网·microsoft·c#·excel
155******9217 小时前
农业园区气象站
物联网
Thanks_ks21 小时前
深入探索现代 IT 技术:从云计算到人工智能的全面解析
大数据·人工智能·物联网·云计算·区块链·数字化转型·it 技术
中科岩创1 天前
重庆轨道交通4号线寸滩地铁站自动化监测
大数据·网络·物联网