STM32二刷学习笔记--STM32概述

发布于:2024-12-19 ⋅ 阅读:(9) ⋅ 点赞:(0)


花了一个多星期把江科协STM32教程刷完了,也算是对STM32有所了解. 现在开始二刷,这次二刷打算半个月拿下STM32. 把代码敲一遍. 【STM32入门教程-2023版 细致讲解 中文字幕】https://www.bilibili.com/video/BV1th411z7sn?vd_source=2fd155d9ed7f2131791233620141a958

系统结构

系统结构

Cortex-M3 内核

Cortex-M3 是 ARM 公司推出的专为嵌入式系统设计的 32 位 RISC 内核,具有以下特点:

  • 高效执行:支持 Thumb-2 指令集,提高代码密度和执行效率。
  • 多总线系统:包含 ICode 总线、DCode 总线 和 系统总线,分别访问 Flash、SRAM 等存储器。
  • 中断管理:提供 NVIC(嵌套向量中断控制器),支持 240 个中断向量及 256 个优先级。

多总线结构

STM32 使用多总线系统来提高数据传输效率:

  • ICode 总线:连接 Flash 接口,用于取指令
  • DCode 总线:访问存储器(SRAM、Flash)用于数据读取
  • 系统总线:连接各种外设和 SRAM,实现数据的高速传输。

存储器结构

STM32 包含 Flash 和 SRAM 存储器:

  • Flash:用于存储程序代码和不可变数据。通过 Flash 接口 与内核连接。
  • SRAM:用于数据存储和运行时变量。
  • FSMC(灵活静态存储器控制器):用于连接外部存储器(如 NOR Flash、SRAM 和 LCD 显示屏)。

外设总线和桥接器

STM32 系统分为三种总线:

  • AHB(高级高性能总线):最快,用于连接高带宽模块,如内核、DMA、SDIO 和 RCC。
  • APB2(高级外设总线 2):快,连接高速外设,如 GPIOA-GPIOG、ADC1-ADC3、SPI1、USART1 等。
  • APB1(高级外设总线 1):不快,连接低速外设,如 I2C1-I2C2、SPI2-SPI3、USART2-5、TIM2-7、RTC 等。

桥接器将 AHB 系统总线与 APB1 和 APB2 连接,实现数据传输。

DMA 控制器

STM32 包含两个 DMA 控制器(DMA1 和 DMA2),用于在存储器和外设之间实现数据搬运,减轻 CPU 负担。 类似于传输数据的小秘书.具有和总线一样的控制权,访问数据.

  • DMA1:有 7 个通道,可以与 AHB 总线进行数据传输。
  • DMA2:有 5 个通道,负责更高速的数据传输任务。

特点:

  • 支持外设到内存、内存到外设、内存到内存的传输。
  • 数据传输过程中 CPU 可执行其他任务,提升系统性能。

复位和时钟控制(RCC)

RCC(Reset and Clock Control)是 STM32 的时钟系统核心,提供以下功能:

  • 复位管理:控制系统上电复位(POR)、看门狗复位、软件复位等。
  • 时钟配置:通过 PLL(锁相环)提供多种时钟源,如 HSI、HSE、LSE 和 LSI。
  • 总线时钟分频:配置 AHB、APB1 和 APB2 不同的时钟频率。

外设模块

STM32 提供丰富的外设模块,包括:

  • GPIO(通用输入输出):GPIOA 到 GPIOG,用于控制输入输出信号。
  • ADC(模数转换器):ADC1 到 ADC3,12 位分辨率,高速采样。
  • USART/UART(串行通信接口):支持同步和异步通信。
  • SPI/I2S:用于高速数据通信和音频传输。
  • I2C:用于连接传感器等低速设备。
  • Timers(定时器):TIM1 到 TIM8(高级定时器) 和 TIM2 到 TIM7(通用定时器)。
  • RTC(实时时钟):用于时间管理和定时唤醒功能。
  • USB 和 CAN:支持 USB 设备模式和 CAN 总线通信。

SDIO 接口

STM32 通过 SDIO(Secure Digital Input/Output)接口支持 SD 卡和 SDIO 设备,实现大容量数据存储和高速传输。

STM32F103C8T6 引脚定义表格

引脚号 引脚名称 类型 I/O 口 主功能 默认复用功能 重定义功能 备注介绍
1 VBAT S - - - - 备用电池供电引脚,维持RTC和备份寄存器供电。
2 PC13-TAMPER-RTC I/O PC13 TAMPOER-RTC RTC 时钟 - 连接 RTC 外部时钟或触发器。
3 PC14-OSC32_IN I/O PC14 OSC32_IN 32.768kHz 晶振输入 - 外部 32.768kHz 晶振输入端,用于 RTC 时钟。
4 PC15-OSC32_OUT I/O PC15 OSC32_OUT 32.768kHz 晶振输出 - 外部 32.768kHz 晶振输出端,用于 RTC 时钟。
5 OSC_IN I OSC_IN HSE 晶振输入 高速外部时钟 - 连接外部高速时钟(HSE)输入端。
6 OSC_OUT O OSC_OUT HSE 晶振输出 高速外部时钟 - 连接外部高速时钟(HSE)输出端。
7 NRST I NRST 复位引脚 系统复位 - 系统复位引脚,低电平触发复位。
8 VSSA S - 模拟地 - - 模拟电路地引脚。
9 VDDA S - 模拟电源 - - 模拟电源引脚,为 ADC、DAC 等提供电源。
10 PA0-WKUP I/O PA0 WKUP/USART2_CTS/ADC12_IN0 TIM2_CH1_ETR - 唤醒引脚,ADC 输入引脚,USART 控制线 CTS。
11 PA1 I/O PA1 USART2_RTS/ADC12_IN1/TIM2_CH2 TIM2_CH2 - USART2 发送线 RTS,ADC 输入引脚,TIM 定时器通道 2。
12 PA2 I/O PA2 USART2_TX/ADC12_IN2/TIM2_CH3 USART2_TX - USART2 数据发送引脚,ADC 输入引脚,TIM 定时器通道 3。
13 PA3 I/O PA3 USART2_RX/ADC12_IN3/TIM2_CH4 USART2_RX - USART2 数据接收引脚,ADC 输入引脚,TIM 定时器通道 4。
14 PA4 I/O PA4 SPI1_NSS/USART2_CK/ADC12_IN4 SPI1_NSS - SPI 片选引脚,USART2 时钟输出引脚,ADC 输入。
15 PA5 I/O PA5 SPI1_SCK/ADC12_IN5 SPI1_SCK - SPI 时钟引脚,ADC 输入引脚。
16 PA6 I/O PA6 SPI1_MISO/ADC12_IN6/TIM3_CH1 SPI1_MISO/TIM3_CH1 - SPI 数据输入引脚,ADC 输入引脚,TIM3 定时器通道 1。
17 PA7 I/O PA7 SPI1_MOSI/ADC12_IN7/TIM3_CH2 SPI1_MOSI/TIM3_CH2 - SPI 数据输出引脚,ADC 输入引脚,TIM3 定时器通道 2。
18 PB0 I/O PB0 ADC12_IN8/TIM3_CH3 ADC12_IN8/TIM3_CH3 - ADC 输入引脚,TIM3 定时器通道 3。
19 PB1 I/O PB1 ADC12_IN9/TIM3_CH4 ADC12_IN9/TIM3_CH4 - ADC 输入引脚,TIM3 定时器通道 4。
20 PB2 I/O PB2 BOOT1 - - BOOT1 引脚用于系统启动模式选择。
21 PB10 I/O PB10 I2C2_SCL/USART3_TX I2C2_SCL - I2C 时钟引脚,USART3 数据发送引脚。
22 PB11 I/O PB11 I2C2_SDA/USART3_RX I2C2_SDA - I2C 数据引脚,USART3 数据接收引脚。
23 VSS1 S - 电源地 - - 系统地引脚,供电返回路径。
24 VDD1 S - 电源正 - - 为数字电路供电。
25 PB12 I/O PB12 SPI2_NSS/I2C2_SMBA/USART3_CK SPI2_NSS - SPI2 片选引脚,I2C 地址引脚,USART3 时钟引脚。
26 PB13 I/O PB13 SPI2_SCK/USART3_CTS/TIM1_CH1N SPI2_SCK - SPI2 时钟信号引脚,USART3 控制线 CTS,引脚支持 TIM1 通道功能。
27 PB14 I/O PB14 SPI2_MISO/USART3_RTS/TIM1_CH2N SPI2_MISO - SPI2 数据输入引脚,USART3 控制线 RTS,引脚支持 TIM1 通道功能。
28 PB15 I/O PB15 SPI2_MOSI/TIM1_CH3N SPI2_MOSI - SPI2 数据输出引脚,TIM1 通道 3N 输出引脚。
29 PA8 I/O PA8 USART1_CK/TIM1_CH1/MCO TIM1_CH1 - USART1 时钟输出引脚,TIM1 通道 1,引脚支持微控制器时钟输出。
30 PA9 I/O PA9 USART1_TX/TIM1_CH2 USART1_TX - USART1 数据发送引脚,TIM1 通道 2。
31 PA10 I/O PA10 USART1_RX/TIM1_CH3 USART1_RX - USART1 数据接收引脚,TIM1 通道 3。
32 PA11 I/O PA11 USART1_CTS/USB_DM/CAN_RX USB_DM PA11 USART1 控制线 CTS,引脚支持 USB 数据线负极功能。
33 PA12 I/O PA12 USART1_RTS/USB_DP/CAN_TX USB_DP PA12 USART1 控制线 RTS,引脚支持 USB 数据线正极功能。
34 PA13 I/O PA13 JTMS/SWDIO JTMS/SWDIO - 调试接口引脚,用于 SWD/JTAG 调试通信。
35 VSS2 S - 系统地 - - 系统地引脚,为数字电路提供参考地。
36 VDD2 S - 电源正 - - 数字电路电源引脚。
37 PA14 I/O PA14 JTCK/SWCLK JTCK/SWCLK - JTAG/SWD 调试时钟引脚。
38 PA15 I/O PA15 JTDI JTDI - JTAG 数据输入引脚。
39 PB3 I/O PB3 JTDO JTDO TIM2_CH2/USART3_CK JTAG 数据输出引脚,也支持 TIM2 和 USART3 时钟功能。
40 PB4 I/O PB4 NJTRST NJTRST SPI1_MISO/TIM3_CH1 JTAG 复位引脚,复用为 SPI1 数据输入和 TIM3 通道 1。
41 PB5 I/O PB5 I2C1_SMBA I2C1_SMBA - I2C 地址报警引脚,连接 I2C 设备。
42 PB6 I/O PB6 I2C1_SCL/TIM4_CH1 I2C1_SCL USART1_TX I2C 时钟信号引脚,TIM4 通道 1,USART1 数据发送引脚。
43 PB7 I/O PB7 I2C1_SDA/TIM4_CH2 I2C1_SDA USART1_RX I2C 数据引脚,TIM4 通道 2,USART1 数据接收引脚。
44 BOOT0 I - BOOT0 系统启动模式选择 - 引脚控制 MCU 启动方式(BootLoader、用户代码等)。
45 PB8 I/O PB8 TIM4_CH3 TIM4_CH3 I2C1_SCL TIM4 定时器通道 3,也支持 I2C1 时钟功能。
46 PB9 I/O PB9 TIM4_CH4 TIM4_CH4 I2C1_SDA TIM4 定时器通道 4,也支持 I2C1 数据功能。
47 VSS3 S - 系统地 - - 系统地引脚。
48 VDD3 S - 电源正 - - 数字电路电源引脚。

工程框架

STM32 工程框架的运行流程通常分为启动文件用户代码文件库文件三大部分。下面根据图中流程进行详细介绍:
在这里插入图片描述

1. 启动文件:startup_xx.s

  • 作用:完成系统复位、初始化工作,并调用用户主程序 main
  • 功能模块
    • 复位中断:在系统复位时,调用 SystemInit 函数完成系统初始化。
    • 调用 SystemInit:该函数位于 system_xx.c 文件中,主要完成系统时钟初始化。
    • 调用 main:系统初始化完成后,执行用户编写的主函数 main
    • 其他中断:调用中断处理函数,这些函数通常由用户在 stm32f10x_it.c 中进行定义。

2. 用户代码文件

用户代码主要包括三个文件:

  • system_xx.c / .h

    • 定义 SystemInit:完成系统时钟、PLL 等初始化配置。
    • 系统初始化:主要为复位中断后调用的第一个函数,确保系统硬件处于稳定状态。
  • main.c

    • 定义 main:用户程序的入口函数,包含主要业务逻辑。
  • stm32f10x_it.c / .h

    • 定义中断处理函数:响应不同外设或系统中断请求,例如定时器中断、外部中断等。
    • 调用中断函数:在启动文件中,当其他中断触发时,会调用这些处理函数。
  • 其他用户文件

    • 用户根据实际需求自定义的代码文件,比如驱动外设、应用程序模块等。

3. 库文件

库文件是 STM32 标准库或 HAL 库的一部分,主要包括:

  • stm32f10x.h

    • 外设寄存器描述:定义了 STM32 外设的寄存器地址、位定义等。
  • core_cm3.c / .h

    • 内核寄存器描述:针对 ARM Cortex-M3 内核的寄存器描述及相关配置。
  • 库函数文件 (misc.c、stm32f10x_adc.c 等)

    • 提供外设驱动的库函数,例如 ADC、GPIO、USART 等外设的初始化和控制函数。
  • stm32f10x_conf.h

    • 库函数配置文件:用于配置哪些库函数模块需要被包含,比如 ADC、UART、I2C 等模块。

运行流程总结

  1. 复位中断:系统启动后,startup_xx.s 调用 SystemInit 进行初始化。
  2. 调用 main:初始化完成后,系统进入 main.c 中的 main 函数,执行用户程序。
  3. 中断响应:当外设或系统产生中断时,调用 stm32f10x_it.c 中定义的中断处理函数。
  4. 库文件支持:用户代码和启动文件依赖库文件完成底层硬件操作,包括外设配置和内核寄存器的操作。