- 1-1] 课程简介
- [1-2] STM32简介
- [2-1] 软件安装
- [2-2] 新建工程
- [3-1] GPIO输出
- [3-2] LED闪烁&LED流水灯&蜂鸣器
- [3-3] GPIO输入
- [3-4] 按键控制LED&光敏传感器控制蜂鸣器
- [4-1] OLED调试工具
- [4-2] OLED显示屏
- [5-1] EXTI外部中断
- [5-2] 对射式红外传感器计次&旋转编码器计次
- [6-1] TIM定时中断
- [6-2] 定时器定时中断&定时器外部时钟
- [6-3] TIM输出比较
- [6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机
- [6-5] TIM输入捕获
- [6-6] 输入捕获模式测频率&PWMI模式测频率占空比
- [6-7] TIM编码器接口
- [6-8] 编码器接口测速
- [7-1] ADC模数转换器
- [7-2] AD单通道&AD多通道
- [8-1] DMA直接存储器存取
- [8-2] DMA数据转运&DMA+AD多通道
- [9-1] USART串口协议
- [9-2] USART串口外设
- [9-3] 串口发送&串口发送+接收
- [9-4] USART串口数据包
- [9-5] 串口收发HEX数据包&串口收发文本数据包
- [9-6] FlyMcu串口下载&STLINK Utility
- [10-1] I2C通信协议
- [10-2] MPU6050简介
- [10-3] 软件I2C读写MPU6050
- [10-4] I2C通信外设
- [10-5] 硬件I2C读写MPU6050
- [11-1] SPI通信协议
- [11-2] W25Q64简介
- [11-3] 软件SPI读写W25Q64
- [11-4] SPI通信外设
- [11-5] 硬件SPI读写W25Q64
- [12-1] Unix时间戳
- [12-2] BKP备份寄存器&RTC实时时钟
- [12-3] 读写备份寄存器&实时时钟
- [13-1] PWR电源控制
- [13-2] 修改主频&睡眠模式&停止模式&待机模式
- [14-1] WDG看门狗
- [14-2] 独立看门狗&窗口看门狗
- [15-1] FLASH闪存
- [15-2] 读写内部FLASH&读取芯片ID
STM32 入门详解
一、STM32 简介
什么是 STM32
STM32 是意法半导体(ST)公司推出的基于 ARM Cortex - M 内核的 32 位微控制器系列。ARM Cortex - M 内核提供了高性能、低功耗和易于使用的特点。STM32 系列有多种型号,如 STM32F1、STM32F4 等,不同型号适用于不同的应用场景,涵盖从简单的控制任务到复杂的工业自动化和物联网设备等多种领域。
STM32 的特点
高性能:具有较高的处理速度,能够快速执行复杂的算法和多任务处理。例如,它可以实现高速的数据采集和实时控制,像在电机控制中能够快速响应电机的转速变化并进行精准调速。
丰富的外设接口:包括但不限于通用输入 / 输出接口(GPIO)、定时器(TIM)、串口通信接口(USART、SPI、I2C 等)。这些接口使得 STM32 可以方便地连接各种外部设备,如传感器、显示器、通信模块等。以连接温度传感器为例,通过 ADC(模数转换器)接口可以读取传感器的模拟信号并转换为数字量进行处理。
低功耗模式:适合用于电池供电的设备。它有多种低功耗模式,如睡眠模式、停机模式等。在这些模式下,芯片可以在保持关键功能运行的同时,最大限度地降低功耗,延长设备的续航时间。
二、开发环境搭建
硬件准备
开发板选择:市场上有多种 STM32 开发板可供选择,如正点原子、野火等品牌的开发板。这些开发板通常集成了 STM32 芯片、必要的电源电路、调试接口和一些常用的外设(如 LED、按键等),方便初学者快速上手。
调试工具:J - Link、ST - Link 是常用的调试工具,用于将程序下载到 STM32 芯片中,并进行调试。它们通过 USB 接口与电脑相连,另一端与开发板的调试接口连接。
软件环境
IDE(集成开发环境)选择:Keil MDK 是最常用的开发 STM32 的 IDE 之一。它提供了一个完整的开发环境,包括代码编辑、编译、调试等功能。在安装 Keil MDK 后,还需要安装相应的 STM32 芯片支持包,以确保能够对目标芯片进行开发。
驱动安装:当使用调试工具时,需要安装对应的驱动程序,使电脑能够识别调试工具。例如,使用 ST - Link 时,要安装 ST - Link 驱动,这样才能通过 Keil MDK 等开发工具与 STM32 开发板建立通信。
三、编程语言基础
C/C++ 语言
STM32 开发主要使用 C 或 C++ 语言。C 语言是基础,因为它具有高效、可直接操作硬件等特点。在 STM32 编程中,需要掌握基本的 C 语言知识,如数据类型(char、int、float 等)、运算符、控制语句(if - else、for、while 等)、函数的定义和调用。例如,通过定义一个函数来控制 GPIO 口的输出电平,实现点亮或熄灭一个 LED。
C++ 语言在 C 语言的基础上增加了面向对象编程的特性,如类和对象的概念。在一些复杂的 STM32 项目中,使用 C++ 可以更好地组织代码和提高代码的复用性。
四、基本编程步骤
寄存器操作
理解寄存器:STM32 的功能是通过对一系列寄存器的配置来实现的。寄存器是芯片内部的存储单元,用于存储控制和状态信息。例如,GPIO 端口有多个寄存器,包括配置寄存器(用于设置引脚的输入 / 输出模式)、数据寄存器(用于读取或写入引脚的电平状态)等。
直接寄存器操作示例:以点亮一个 LED 为例,首先要设置对应的 GPIO 引脚为输出模式。这需要通过向 GPIO 端口的配置寄存器写入相应的值来实现。假设 LED 连接到 STM32 的 PA0 引脚,在操作时,要找到 PA 端口的配置寄存器地址,将其配置为输出模式(如设置为推挽输出),然后通过向数据寄存器写入高电平或低电平来点亮或熄灭 LED。不过,直接寄存器操作比较复杂,容易出错,特别是在大型项目中。
库函数开发
标准外设库(SPL)和 HAL 库(硬件抽象层库):为了方便开发,ST 公司提供了标准外设库和 HAL 库。标准外设库相对底层,更接近寄存器操作;HAL 库则是更高层次的抽象,提供了更简单易用的接口。以 GPIO 口操作为例,使用 HAL 库,只需要调用简单的函数,如HAL_GPIO_WritePin()函数就可以实现对 GPIO 引脚的写操作,而不需要直接操作寄存器。
库函数编程步骤:首先要初始化相应的外设,包括时钟使能、引脚配置等。然后,根据具体的功能需求调用相应的库函数进行操作。例如,在使用 USART 进行串口通信时,要先初始化 USART 的波特率、数据位、停止位等参数,然后通过调用发送和接收函数来实现数据的通信。
五、简单应用示例 - 点亮 LED
硬件连接:将 LED 的阳极通过限流电阻连接到 STM32 开发板的一个 GPIO 引脚(如 PA0),LED 的阴极接地。
代码实现(使用 HAL 库)
初始化代码:
主函数中点亮 LED 代码:
六、进阶学习方向
深入学习外设功能:除了基本的 GPIO 和简单的通信接口,深入研究 STM32 的高级外设,如定时器的高级功能(输入捕获、输出比较用于 PWM 生成等)、ADC 和 DAC 的高精度数据转换、USB 和以太网接口等,以满足更复杂的应用需求。
实时操作系统(RTOS)应用:学习并应用实时操作系统,如 FreeRTOS 等,在 STM32 上实现多任务处理。例如,在一个智能家居控制系统中,使用 RTOS 可以同时处理温度采集、门窗控制、数据上传等多个任务,提高系统的响应速度和资源利用率。
项目实践:通过实际的项目开发,如制作一个小型的智能温度控制系统、无线数据传输设备等,将所学知识综合运用,提高自己的 STM32 开发能力。