STM32二刷学习笔记–STM32概述
文章目录
花了一个多星期把江科协STM32教程刷完了,也算是对STM32有所了解. 现在开始二刷,这次二刷打算半个月拿下STM32. 把代码敲一遍. 【STM32入门教程-2023版 细致讲解 中文字幕】https://www.bilibili.com/video/BV1th411z7sn?vd_source=2fd155d9ed7f2131791233620141a958
系统结构
Cortex-M3 内核
Cortex-M3 是 ARM 公司推出的专为嵌入式系统设计的 32 位 RISC 内核,具有以下特点:
多总线结构
STM32 使用多总线系统来提高数据传输效率:
存储器结构
STM32 包含 Flash 和 SRAM 存储器:
外设总线和桥接器
STM32 系统分为三种总线:
桥接器将 AHB 系统总线与 APB1 和 APB2 连接,实现数据传输。
DMA 控制器
STM32 包含两个 DMA 控制器(DMA1 和 DMA2),用于在存储器和外设之间实现数据搬运,减轻 CPU 负担。 类似于传输数据的小秘书.具有和总线一样的控制权,访问数据.
特点:
复位和时钟控制(RCC)
RCC(Reset and Clock Control)是 STM32 的时钟系统核心,提供以下功能:
外设模块
STM32 提供丰富的外设模块,包括:
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
函数完成系统初始化。system_xx.c
文件中,主要完成系统时钟初始化。main
。stm32f10x_it.c
中进行定义。2. 用户代码文件
用户代码主要包括三个文件:
system_xx.c / .h:
main.c:
stm32f10x_it.c / .h:
其他用户文件:
3. 库文件
库文件是 STM32 标准库或 HAL 库的一部分,主要包括:
stm32f10x.h:
core_cm3.c / .h:
库函数文件 (misc.c、stm32f10x_adc.c 等):
stm32f10x_conf.h:
运行流程总结
- 复位中断:系统启动后,
startup_xx.s
调用SystemInit
进行初始化。 - 调用 main:初始化完成后,系统进入
main.c
中的main
函数,执行用户程序。 - 中断响应:当外设或系统产生中断时,调用
stm32f10x_it.c
中定义的中断处理函数。 - 库文件支持:用户代码和启动文件依赖库文件完成底层硬件操作,包括外设配置和内核寄存器的操作。
作者:tt555555555555