STM32完全学习1:stm32手册,标准库和HAL库&&存储器、电源和时钟系统
STM32的相关知识
1.主流的32位高性能单片机,是ARM架构,但是ARM架构不一定是stm32
三种stm32编程的方法:
1.寄存器操作
2.标准库(标准外设库)操作:代码复用
3.HAL库:集成了很多功能,有点像操作系统,图形化编程
下面为数据手册的前4章:存储器和总线架构+电源控制+复位和时钟控制
STM32的存储器映像
四个驱动单元I-bus,D-bus,S-bus和GP-DMA(通用DMA)
三个被动单元:内部SRAM,内部闪存存储器,AHB到APB的桥
AHB是主干道
stm32是32位cpu,数据总线是32位的。
stm32的地址总线也是32位的。
STM32可以访问的地址容量是:4GB=2^32B
数据总线32位,即CPU一次处理的字长为32位。
存储单元是以字节(byte)为单位,N根地址总线能访问2的N次方个存储单元。于是有32位地址总线可以访问2的32次方个存储单元,即4GB。如果有些题目说:按“字”寻址,就说明是存储单元大小为字长的位数,按“字节”寻址,说明存储单元是字节的大小。
STM32用不完4GB,因此有了逻辑地址和物理地址。
存储器映像就是告诉我们STM32涉及时是如何使用4GB的逻辑地址。
ARM是内存和IO统一编址的。
CODE段:
SRAM段
外设段:
stm32的实际地址:
0x00000000 - 0x08000000: 128MB 映射区
0x08000000 - 0x0801FFFF:128K Flash
0x1FFFF000 - 0x1FFFF800: 2KB System Memory
0x1FFFF800 - 0x1FFFF9FF: 512B options bytes
STM32的位带操作详解
Cortex-M3权威指南——相关书籍
bitband:有时候叫位带
别名存储器区 字(32位)
映射
位段存储区 位
stm32只支持8,16,32位的操作,而不支持位操作。
但是我们实际编程中,仍然存在位操作的需求。一般是读出整体的32位操作,然后对其中一位进行操作之后再整体32位写回去。
改进效率:想办法直接一次性修改那一位,还不影响其他位。那就是位带操作。
位带思路的操作:将这一位映射到其他地方的32位,在其他地方操作32位就相当于操作这里的1位。
别名存储器区大小等于位段存储器区大小的32倍
位带操作的核心问题:如何由位段存储器区地址,计算出别名存储器区的地址。
bit_word_addr = bit_band_base+(byte_offset*32)+(bit_number*4)
计算公式需要理解
STM32的启动模式
启动模式是STM32上电复位后从哪里去执行程序的问题。
BOOT1和BOOT0控制启动模式
BOOT1 BOOT0 模式
X 0 用户闪存存储器区启动(开发的程序代码烧录时就烧录到了这里,正常情况下都是从这里启动)
0 1 系统存储器(非常规,为了实现ISP功能)
1 1 内嵌SRAM(非常规,实现调试器调试功能)
ISP和IAP:
ISP:in-system programming 在系统烧录,或在系统编程。PC机通过串口将bin/hex文件直接isp到单片机内部flash中。
IAP:in-application programming (在应用编程,在线升级)IAP的时候,用户程序通过串口来接收PC发送过来的bin/hex文件,然后将其烧录到内部flash中完成IAP。一般实现IAP需要人为的将用户存储器区分为2部分:bootloader+app
STM32的电源管理系统
电源管理芯片
低功耗模式:根据最低电源消耗,最快速启动时间和可用的唤醒源的需求,选取一个最佳的折中方案
待机模式:CPU停,外设停,时钟停,SRM和寄存器停
stm32的复位和时钟控制
系统复位,上电复位和备份区域复位。
系统复位:1.NRST管脚上的低电平(外部复位) 2.窗口看门狗计数终止(WWDG复位)3.独立看门狗计数终止(IWDG复位)4.软件复位(SW复位) 5.低功耗管理复位
可通过RCC_CSR控制状态寄存器中的复位状态标志位来确认复位事件来源。
电源复位:1.上电/掉电复位 2.从待机模式中返回、
STM32复位后CPU都会被强制到复位向量中去执行程序。
备份区域复位
STM32的时钟总体设计
时钟源:纯内部,纯外部,内外部(在外部提供了晶振)
PLL(锁相环电路):功能就是倍频
时钟通道与流向、分频:时钟树
完全独立的多个时钟
时钟框图:
1.两套独立的时钟:HSx和LSx
2.纯内部:HSI,LSI
3.内外部:HSE,LSE
4.纯外部:OSC_IN,OSC32_IN
PLLMUL:倍频控制
PLLSRC:时钟源选择
分频:注意时钟节点的名称
HSI,HSE,LSI,LSE
PLLCLK,SYSCLK
USBCLK,HCLK,FCLK,PCLK1,PCLK2,ADCCLK,RTCCLK,IWDGCLK
时钟相关的寄存器:
时钟开关
基地址,查memory map得到,然后配合偏移地址得到寄存器地址
寄存器位一般有三种:状态位,开关位、设置值位
RCC_CR
RCC_CFGR
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!