数据手册(datasheet)

St官方 www.st.com/
中文:华秋 IC资料 立创

F1 F4 G0架构

Flash存储器

STM32系列微控制器内部集成了Flash存储器,主要用于存储程序代码

SRAM(Static Random-Access Memory)

SRAM(Static Random-Access Memory)即静态随机存取存储器,所谓“静态”是指这种存储器只要保持通电,里面存储的数据就可以一直保持,但是掉电之后就会丢失。与DRAM(动态随机存取存储器)相比它不需要周期性的刷新里面的数据,操作简单,速度更快,但是更加的昂贵,集成度不如DRAM高。

EEPRA

STM32L系列单片机内部提供了EEPROM存储区域,但实质上,其FLASH也是EEPROM类型,只不过有一块区域被开放出来专门用作EEPROM操作而已。

RCC

在STM32微控制器中,RCC(Reset and Clock Control,复位和时钟控制)模块是一个非常重要的部分。它负责管理和配置系统时钟、外设时钟以及复位控制。时钟系统是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。

AHB bus

AHB=Advanced High Performance Bus,译作高级高性能总线。AHB用于高性能模块(如CPU、DMA和DSP等)之间的连接。
APB=Advanced Peripheral Bus,译作高级外设总线。APB主要用于低带宽的周边外设之间的连接,例如UART、1284等。在STM32中APB又可分为APB1和APB2,具体所连接的外设又有所不同,如下图(STM32F10xxx系统结构图)。

HAL库

它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
hal文件分为两大类
Driver文件下:
_hal_ppp.c(ppp指外设)主要外设驱动源文件
用户级别文件CORE文件下
_hal_msp.c 包含用户应用程序使用外设msp
main.c/.h

HandleTypedef

句柄是一个整数,单独的看它只是数字。

但这个整数是进程句柄表数组的下标,有了这个下标,操作系统就可以找到其索引的数据结构,并能找到数据结构里面的指针,然后根据这个指针获取内核里的某个对象。

MSP 函数

MSP函数是指MCU支持包中的函数,主要用于进行MCU级别的硬件初始化设置。特别是带有MspInit的函数,负责初始化外设使用到的GPIO、时钟、NVIC、DMA等硬件,以便于用户代码在不同型号的MCU上进行移植。

UART

UART(通用异步收发器)是一种广泛使用的串行通信协议,它允许设备通过串行端口进行通信。UART协议是异步的,意味着它不需要时钟信号来同步发送和接收数据。这种通信方式是全双工的,即可以同时发送和接收数据。

回调函数

函数指针的调用,即是一个通过函数指针调用的函数;

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。

何为__weak?

__weak 用于修饰函数,赋予这个函数 弱 的属性。

GPIO

GPIO是什么?
General Purpose Input Output 通用功能输出输出
GPIO就是从芯片内部引出来一根功能复用的口线(电线)
功能复用是指:GPIO的引脚可以由CPU配置成不同的功能
比如:输入功能 输出功能 模拟功能 复用功能等等

电源引脚

VCC VSS VDD

复位

RST

晶振

OSC32.768Khz外部低速
OSC 高速

输入输出

GPIO电气特性

屏幕截图 21 7 2025 182625 www.bilibili.com

施密特触发器

屏幕截图 21 7 2025 20366 www.bilibili.com

IDR

在STM32微控制器中,IDR(Input Data Register)寄存器是一个端口输入数据寄存器,用于读取当前端口的电平状态。IDR寄存器的低16位(0~15)每一位对应一个端口,表示该端口的输入状态。

工作模式

浮空输入(Floating Input)
上拉输入(Pull-up Input)
下拉输入(Pull-down Input)
模拟输入(Analog Input)
开漏输出(Open-Drain Output)
推挽输出(Push-Pull Output)
开漏复用输出(AF Open-Drain Output)
推挽复用输出(AF Push-Pull Output)
详细见:https://www.cnblogs.com/cute-jiojio/p/18706955#23-ttl%E8%82%96%E7%89%B9%E5%9F%BA%E8%A7%A6%E5%8F%91%E5%99%A8

按键

消除抖动加电容0.1uf

基地址与偏移地址

但是 CPU 的寻址能力只有16位,也就是能够访问到 2^16 = 65536 个地址,远远不够地址总线的 1048576 个地址,CPU 总共有 65536 个地址可以处理,也就是 64K 的内存空间,这样显然是远远不够的。

三、解决方案
假设外部地址共有 1M 的内存,也就是 1048576 个地址空间,利用 CPU 的 16 位的寻址能力去访问,CPU 内存为 64K,就可以将外部内存分为许多快,每一块的内存大小就为 CPU 的内存大小:64K,通过计算 1048576 / 65536 = 16,也就是需要将1M的内存空间分成 16 块 64K 的空间。

软件延迟

HAl_delay()

HAL库常用函数使用介绍—HAL_GPIO

https://blog.csdn.net/llq_the7/article/details/108235951

中断

中断与异常的区别
下图 表示中断时 CPU 的活动轨迹。还可进一步把中断分为外中断和内中断。

外中断

——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;

内中断

——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。

异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。
中断则是由于系统中某事件引起的,该事件与现行指令无关。

https://blog.csdn.net/qq_29996285/article/details/88078939

屏幕截图 27 7 2025 194525 www.bilibili.com

一、NVIC简单解释
1、在 STM32(Cortex-M3)中有两个优先级控制(这与学 C51时只有一个中断等级不同):

-抢占式优先级(NVIC_IRQChannelPreemptionPriority)
-子优先级 也叫响应优先级(NVIC_IRQChannelSubPriority)
2、NVIC是在 M3内核处理器上的,在 M3的所有中断机制都由NVIC实现,看下图

64beb4ed15b018089171089ba04ae70c

3、Cortex-M3支持大量异常,包括16 -4 -1=11个系统异常,和最多 240个外部中断——简称IRQ。具体使用了这 240个中断源中的多少个,则由芯片制造商决定。由外设产生的中断信号,除了 SysTick的之外,全都连接到 NVIC的中断输入信号线。典型情况下,处理器一般支持 16到 32个中断,当然也有在此之外的。
1076794dd48de85fc7baaaf9e4cce987

优先级规则

屏幕截图 27 7 2025 195657 www.bilibili.com

https://cloud.tencent.com/developer/article/2092912

屏幕截图 27 7 2025 20557 www.bilibili.com

末尾连锁,延迟到达

处理完异常后还检测到异常会处于挂起,继续处理,减少压栈操作。如果后面的中断优先级更高则会处理后面

中断事件控制器

屏幕截图 27 7 2025 202330 www.bilibili.com

EXTI(extern interrupt)配置

相关标准库代码https://blog.csdn.net/qq_50808730/article/details/132320733

5e549f35cc9fcde7bf42e12fe944e482

1、使能GPIO时钟;

2、设置GPIO的工作模式;(上拉、下拉、浮空输入)

3、使能AFIO时钟;(设置AFIO时钟,开启相关寄存器);

4、设置GPIO与EXIT映射关系;(选择IO对应EXIT输入线,AFIO_EXICR寄存器);

5、设置EXIT屏蔽、上升沿、下降沿;(设置EXIT对应通道的屏蔽和上升沿、下降沿触发,EMR、RTSR、FTSR寄存器);

6、设置NVIC,分3步(优先级分组、优先级以及使能);

7、设置中断服务函数(包括清除中断标志);

定时器

屏幕截图 28 7 2025 212413 www.bilibili.com