1. 核心基础知识

1.1 开发准备与规范

# 1.1.1 启动模式配置(BOOT)

芯片上电时的启动区域由BOOT0和BOOT1引脚的电平组合决定。这是一个关键且易错的操作。

BOOT设置

Boot1

Boot2

启动区域设置

主要用途

ICP

0

x

用户闪存(默认flash)

最常用模式,从用户程序Flash启动。

ISP

1

0

系统存储器/ISP

ISP下载模式,芯片内置Bootloader,可通过串口等下载程序。

IAP

1

1

内嵌SRAM

调试模式,将程序代码下载到RAM中执行,适用于临时调试,断电后程序丢失。

# 1.1.2 工程结构与命名规范

良好的规范是团队协作和项目维护的基石。

   文件命名:

       项目名称_模块名称_功能.c (例如:ProjectA_TIM_PWM.c)

       项目名称_模块名称_功能.h

   变量命名:

       全局变量:g_变量名 (如 g_system_tick)

       静态变量:s_变量名

       局部变量:使用小写字母和下划线

目录结构建议规范

文件存放:

Core : 内核、启动文件

Drivers : HAL/LL库、板级支持包

Bootloader :中间件库

Middlewares :第三方中间件 (如FreeRTOS, FatFS)

User :用户应用代码

Software :存放APP代码

README文件

# 1.1.3 库的选择与工程创建

标准库 (StdPeriph):已停止维护,仅用于维护老项目,不推荐新项目使用。

HAL/LL库:ST主推。

HAL库:抽象层次高,代码可移植性强,适合快速开发和初学者。在STM32CubeMX中图形化配置即可生成初始化代码。

LL库:更接近寄存器层的轻量级封装,效率高,适合对性能和时间控制有严格要求的模块(如高速PWM、精确ADC采样、中断服务函数)。

# 1.1.4 启动文件命名规则

启动文件后缀指明了芯片的系列和Flash容量,选对文件至关重要。

cl:互联型产品,stm32f105/107系列。

vl:超值型产品,stm32f100系列。

xl:超高密度(容量)产品,stm32f101/103系列。

ld:低密度产品,Flash小于64KB。

md:中等密度产品,Flash等于64KB或128KB。

hd:高密度产品,Flash大于128KB。

# 1.1.5 程序烧录方式

ISP:在系统编程,通过内置Bootloader(如UART、USB)更新用户Flash。

ICP:在电路编程,通过SWD/JTAG接口直接访问芯片内核,更新整个Flash(含选项字节)。

IAP:在应用编程,用户程序的一部分(IAP引导程序)通过通信接口(如UART、以太网)更新另一部分用户程序,实现产品固件远程升级。

1.2 外设核心模块详解

# 1.2.1 GPIO (通用输入输出)

核心概念:引脚必须配置为正确的模式才能正常工作。下表是理解和使用GPIO的关键。

模式名称

特点与典型应用场景

推挽输出

最常用输出模式,能主动输出高/低电平,驱动能力较强,用于驱动LED、蜂鸣器等

开漏输出

只能主动拉低,高电平靠外部上拉电阻,适用于I2C等总线、电平转换

上拉/下拉输入

内部连接上拉/下拉电阻,确定默认电平,用于按键检测等数字输入

浮空输入

引脚完全悬空,电平不确定,需外部电路确定,用于通信信号接收等

模拟输入

关闭数字功能,引脚直接接入ADC,用于采集模拟电压信号

复用推挽/开漏

引脚用于片内外设(如串口、SPI)功能,根据外设要求选择推挽或开漏

关键技巧:单片机通常低电平驱动能力更强(灌电流 > 拉电流),在驱动大电流负载(如LED)时,常采用“低电平点亮”的连接方式以获得更好的驱动效果和稳定性。口诀:单片机通常是高电平弱驱动,低电平强驱动

# 1.2.2 中断系统

流程链:外设事件 —> 中断控制器(EXTI/NVIC) —> CPU响应 —> 跳转到中断向量表 —> 执行中断服务函数(ISR)。

关键组件:RCC,GPIO,AFIO,EXTI,NVIC

        EXTI:嵌套向量中断控制器,管理GPIO的外部中断/事件线,可配置为上升沿、下降沿或双边沿触发。

          NVIC:外部中断/事件控制器,统一管理所有中断源的优先级(可嵌套)和开关。配置时需设置抢占优先级和子优先级。

中断向量表:存储在Flash起始位置的一段地址表,每一项指向一个中断服务函数的入口。启动文件startup_.s中已预定义,用户需在stm32fxxx_it.c中编写对应的服务函数。

# 1.2.3 定时器 (TIM)

STM32定时器功能极为丰富,是学习的重点和难点。

类型与分工:

类型

主要特性

典型型号

基本定时器

仅向上计数,纯定时,用于产生时基。

TIM6, TIM7

通用定时器

支持向上/向下/中央对齐计数,具备输入捕获、输出比较、PWM生成、单脉冲输出等功能。

TIM2, TIM3, TIM4, TIM5

高级定时器

在通用定时器基础上,增加带死区插入的互补PWM输出,用于电机控制、电源数字转换。

TIM1, TIM8

核心功能:

输出比较:当计数器CNT与比较寄存器CCR的值匹配时,根据模式翻转引脚电平,用于生成精确的脉冲或PWM。

输入捕获:当引脚发生特定边沿时,锁存当前计数器CNT值到捕获寄存器CCR,用于测量脉冲宽度或频率。

频率=1/周期时长         占空比=高电平时长/周期时长          分辨率=占空比变化步距

PWM:脉冲宽度调试(方波模拟正弦波)

PWM生成:通过自动重载寄存器ARR决定周期,比较寄存器CCR决定占空比。分辨率 = ARR + 1。

编码器接口:可直接读取正交编码器的两相输出,硬件自动处理方向和计数。

# 1.2.4 模拟数字转换 (ADC/DAC)

   ADC:

分辨率:如12位,表示将参考电压(如3.3V)分为2^12=4096级。

采样时间:必须足够长,让采样电容电压稳定到输入电压。对于高阻抗信号源尤其重要。

多通道与扫描:可配置为连续扫描多个通道,结合DMA实现自动批量数据搬运。

参考电压:精度取决于参考电压的稳定性。建议使用独立的、高精度的外部基准源。

   DAC:将数字值转换为模拟电压输出。可结合DMA和定时器生成任意波形。

# 1.2.5 DMA (直接存储器访问)

核心价值:解放CPU。在数据传输(如UART收发、ADC多通道采样、SPI/I2C通信)期间,CPU可以执行其他任务,大幅提升系统效率。

   数据流与通道:不同DMA控制器有多个数据流/通道,每个通道与特定外设的请求相连。

   传输模式:单次、循环传输。

   数据宽度与对齐:需注意源地址、目标地址的数据宽度(字节、半字、字)要匹配。

1.3 通信接口

USART/UART:同/异步串行通信,最基本、最常用的调试和通信接口。

SPI:高速全双工同步串行接口,主从结构,需要4根线,常用于连接Flash、屏幕等。

I2C:两线制同步串行接口,支持多主多从,节省引脚,用于连接EEPROM、传感器等。

USB、CAN、Ethernet:用于更复杂的设备连接、汽车网络和网络通信。

1.4 编程技巧与建议

   状态写入与取反:通常用于切换一个状态(如LED、使能信号),这是一种防止意外多次操作的有效方法。

// 示例:安全地切换GPIO引脚状态
    void Toggle_LED_Safely(void) {
        static uint8_t led_state = 0; // 记录当前状态
        led_state = !led_state;       // 先取反逻辑状态
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, (GPIO_PinState)led_state); // 再写入物理引脚
    }

   字符与十六进制:在C语言中,用单引号括起的字符常量是其ASCII码值,本质是一个整数。

char c = 'A'; // 等价于 c = 0x41 或 c = 65

    if (uart_received_char == '\r') { // 判断是否收到回车符

        // ...

    }

   头文件保护:防止头文件被重复包含的标准做法。

// 在头文件中

    #ifndef __MY_MODULE_H

    #define __MY_MODULE_H

    // ... 头文件内容 ...

    #endif / __MY_MODULE_H /

1.5 操作系统书籍与单片机

推荐《操作系统概念》和《现代操作系统》。虽然单片机通常运行轻量级RTOS(如FreeRTOS、RT-Thread),而非Linux/Windows这类宏内核系统,但操作系统的核心概念(任务调度、同步互斥、内存管理、中断处理、IO系统)是相通的。深入学习这些理论,能更好地理解和使用RTOS,甚至为未来开发更复杂的嵌入式系统(如基于Cortex-A系列的应用处理器)打下坚实基础。

在进行具体模块学习或项目开发时,深入查阅相应的官方文档(数据手册DS、参考手册RM、编程手册PM、HAL库用户手册UM),这是最权威的学习资料。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐