01、单片机简介

单片机简介

1、什么是单片机

单片机(Single-Chip Microcomputer)是一种微型计算机,是一种集成电路芯片。把具有数据处理能力的中央处理器CPU、随机存储器RAM、闪存flash、多种片上外设等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。如下图为STM32F103系列单片机的系统结构图:

对F103系列单片机内部结构的简要介绍

😀CPU:单片机的核心,用于代码的执行,数据的处理和计算等
😀Flash:闪存掉电不丢失,读写速度较慢。①用于存放代码被编译为可执行文件(代码区)和一些常量数据,②存放BootLoader程序,空间为2KB,③存储选项字节数据(即一些配置参数),空间为16B
😀SRAM:临时存储器掉电会丢失,读写速度较快。①用于划分栈空间和堆空间,②栈空间存储代码执行时临时变量的数据,③堆空间是用户自己开辟,用于存储数据
😀片上外设:具有特定的功能的设备,若GPIO,UART等
😀总线:用于CPU和存储器,CPU和外设之间的通信

2、STM32F103ZET6介绍

2.1、参数的含义

由上图所示:STM32F103ZET6属于M3内核,主频72MHz,Flash为512KB,高密度的单片机。

2.2、存储器映射

STM32单片机一共有32位地址总线,则地址由0x0000 0000 ~ 0xFFFF FFFF。而在单片机中一个基本的存储单元是一个字节,如下图所示:

那么0x00 00 00 00 ~ 0xFF FF FF FF一共有多少个字节的空间喃?
答案:一共由2^32 = 4294967296个字节(B) = 4194304KB = 4096MB = 4GB的寻址空间。所以STM32最大空间范围为4GB。

虽然可以寻址 4GB 的空间,但实际可用的存储空间(如 Flash、SRAM)要小得多。其余的地址范围可能会被映射到其他功能区域(如外设寄存器、内存映射的I/O设备等)。

具体的存储器映射如下图所示:

3、外设寄存器介绍

STM32F103ZET6该芯片是STM32F103系列里面配置非常强大的芯片。它拥有的资源包括:64KB SRAM、 512KB FLASH、 2 个基本定时器、 4 个通用定时器、 2 个高级定时器、 2 个 DMA 控制器(共 12 个通道)、 3 个 SPI、2 个 IIC、 5 个串口、 1 个 USB、 1 个 CAN、 3 个 12 位 ADC、 1 个 12 位 DAC、 1 个 SDIO 接口、1 个 FSMC 接口以及 112 个通用 IO 口。该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩 SRAM 和连接 LCD 等,通过 FSMC (可变静态存储控制器)驱动 LCD,可以显著提高 LCD 的刷屏速度。

由上图所示:STM32F103ZET6将片上外设的寄存器映射到起始地址为0x4000 0000的空间里面。那什么是寄存器喃?

寄存器简单来说,可以理解为功能的开关盒子,一个特定的功能对应着一个特定的开关盒子。假设向这个盒子里面写入1代表开启这个功能,那么写入0就代表关闭这个功能。而一个片上外设有很多的功能,所以与之对应的就有很多的寄存器。

而STM32将这些寄存器映射到了存储空间,则操作这些映射的空间,就代表在操作这些寄存器。如下图所示:

如上图:寄存器直接映射到与之对应的空间,直接对映射空间操作就能操作寄存器。那么怎样操作映射空间喃?
答案:使用指针,演示代码如下:

c 复制代码
/* 如上图:想要操作USART寄存器的PE写入1 */
int main(void)
{
    *(uint32_t *)(0x40013800 + 0x00) |= 0x01; //给PE写入1
}

【注意】对寄存器的映射空间进行操作时只能通过寄存器的基地址+偏移地址进行操作,即只能寻址到映射空间的起始地址,这与计算机中的内存对齐有关,如下:

c 复制代码
/* 如上图:想要操作USART寄存器的LBD写入1 */
int main(void)
{
    *(uint32_t *)(0x40013800 + 0x00) |= 0x0100; //给LBD写入1
}

//下面的错误操作
/* 如上图:想要操作USART寄存器的LBD写入1 */
int main(void)
{
    *(uint32_t *)(0x40013801) |= 0x01; //给LBD写入1
}
相关推荐
Yesheldon4 小时前
Cadence 高速系统设计流程及工具使用三
嵌入式硬件·fpga开发·硬件架构·硬件工程·智能硬件
C++ 老炮儿的技术栈4 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
inputA4 小时前
【LwIP源码学习6】UDP部分源码分析
c语言·stm32·单片机·嵌入式硬件·网络协议·学习·udp
思考的味道5 小时前
SVM在医疗设备故障维修服务决策中的应用:策略、技术与实践
嵌入式硬件
JANYI20185 小时前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式
真的想上岸啊6 小时前
学习51单片机01(安装开发环境)
嵌入式硬件·学习·51单片机
7yewh7 小时前
MCU程序加密保护(二)ID 验证法 加密与解密
单片机·嵌入式硬件·安全
YOYO--小天7 小时前
RS485和RS232 通信配置
linux·嵌入式硬件
小_楠_天_问7 小时前
第二课:ESP32 使用 PWM 渐变控制——实现模拟呼吸灯或音调变化
c语言·嵌入式硬件·mcu·esp32·arduino·pwm·esp32-s3
秋山落叶万岭花开ღ7 小时前
C语言顺序表应用详解:从理论到实践
c语言