目录
MCU(Microcontroller Unit)微控制器单元
RAM(random-access memory)随机存取存储器
RCC(Reset and Clock Control)复位和时钟控制模块
GPIO(General Purpose Input/Output)通用输入/输出引脚的缩写
EXTI(External Interrupt)STM32微控制器中的一种外部中断
一 入门套件
最小系统板
oled显示屏4引脚
电位器
二引脚小按键
ST——Link'
u转串口
有缘蜂鸣器
光敏电阻模块
热敏电阻模块
对射式红外模块
反射式红外模块
W25Q64Flash存储模块
MPU6050陀螺仪加速度计
旋转编码器
直流电机和PB6612点击驱动模块
SG90舵机
二、入门需要知道的概念
- 低功耗:STM32采用了基于Cortex-M内核的低功耗设计,可以在低至0.5毫安的待机电流下运行,适用于各种便携式和电池供电的应用场景。
- 高性能:STM32具有高达72MHz的主频,可以满足大多数嵌入式应用的性能需求。此外,它还支持硬件定时器、中断向量表等高级功能,提高了系统的实时性和可靠性。
- 高集成度:STM32集成了丰富的外设资源,如GPIO、UART、I2C、SPI、ADC、DAC、PWM等,方便用户快速实现各种功能。同时,STM32还提供了丰富的库函数和开发工具,降低了开发难度。
- 易于开发:STM32支持多种编程语言,如C/C++、汇编、Python等,用户可以根据自己的需求选择合适的开发方式。此外,STM32还有丰富的示例代码和文档,帮助初学者快速上手。
对于初学者来说,学习STM32可以从以下几个方面入手:基本概念:了解微控制器的基本概念,如时钟频率、指令集、中断、外设等。开发环境搭建:安装Keil MDK(STM32官方开发环境)或IAR Embedded Workbench(第三方开发环境),熟悉软件界面和基本操作。外设配置与使用:学习如何配置STM32的外设资源,如GPIO、USART、I2C等,并编写相应的驱动程序。编程实践:通过实际项目练习,掌握STM32的基本编程技巧,如中断处理、定时器编程等。进阶知识:学习更高级的功能,如DMA(直接内存访问)、RTOS(实时操作系统)等,提高系统性能和可扩展性。总之,STM32是一款非常适合初学者学习的微控制器平台。通过掌握STM32的基本知识和编程技巧,你可以逐步提高自己的嵌入式开发能力,为更复杂的项目打下坚实的基础。——以上部分来自讯飞星火大语言模型
高性能系列 | F2 | F4 | F7 | H7 |
主流系列 | F0 | F1 | F3 | |
超低功耗 系列 | L0 | L1 | L4 | L5 |
无线系列 | WL | WB |
ARM
•ARM既指ARM公司,也指ARM处理器内核
•ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
•ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片
为了适应市场需求,ARM推出了Cortex系列的内核,以及三款适用于不同场景的子型号,它们分别是Cortex-A系列、Cortex-R系列、Cortex-M系列,后两者适用于嵌入式领域,A型适用于高端应用型领域,类似于手机芯片研发。
MCU(Microcontroller Unit)微控制器单元
它把中央处理器(CPU)-(Central Processing Unit)的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的芯片。
UART(Universal Asynchronous Receiver/Transmitter):是通用异步收发传输器的缩写,是一种串行通信协议,用于计算机和其他设备之间的数据传输。它是一种异步串行通信协议,可以配合许多不同类型的涉及发送和接收串行数据的串行协议工作 。
串行通信协议:是一种通信方式,数据是一位一位按顺序传送的通信方式,相对于并行通信,其突出优点是只需要一对传输线,缺点是传输速度较低。串行通信的传输方向通常有三种,单工、半双工和全双工 。
PLC:是可编程逻辑控制器(Programmable Logic Controller)的缩写,是一种具有微处理器的数字电子设备,用于自动化控制的数字逻辑控制器,可以将控制指令随时加载存储器内存储与运行 。
RAM(random-access memory)随机存取存储器
是一种用于存储计算机当前使用的数据和代码的计算机存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质 。RAM的存储原理是通过电子元件的变化来存储数据的。RAM是一种易失性存储器,即当电源关闭时,存储器中的数据会丢失。RAM通常由六个晶体管组成,每个晶体管都有一个存储位。当CPU需要读取数据时,它会发送一个信号到RAM中的相应地址,然后RAM会将该地址对应的位设置为1。如果CPU需要写入数据,则它会发送一个信号到RAM中的相应地址,并将该地址对应的位设置为0 。
ROM(Read Only Memory)只读存储器
通常用于存储计算机固件或其他不需要修改的数据。ROM的特点之一是它不能被修改,这意味着它只能读取数据,而不能写入数据。另一个特点是它是非易失性的,这意味着即使电源关闭,它仍然可以保持数据 。我们灌入MCU的程序一般被保存在这里。Flash同理是一种非易失性存储器,通常用于存储操作系统、应用程序和数据。片载硬盘是一种固态硬盘,它使用闪存芯片作为存储介质。
SOC(System on Chip)系统级芯片
也称为片上系统。它是将CPU、GPU、内存、基带和GPS模块整合在一起的解决方案,是将系统运行所需的芯片整合在一块芯片上 。SOC的举例说明有很多,比如智能手机、平板电脑、路由器、电视等电子设备都是使用SOC芯片。其中,智能手机中的SOC芯片通常包括CPU、GPU、内存、基带和GPS模块等 。
寄存器
寄存器是计算机中的一种存储器件,用于暂时存放数据和指令。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器 。寄存器在内存中有固定的地址指定的空间。
BL指令
BL指令是ARM汇编语言中的一条指令,全称是Branch with Linking,即带链接分支指令。BL指令的作用是将当前程序的运行地址保存到链接寄存器LR中,然后将子程序的地址写入PC寄存器,从而实现子程序的调用。在子程序执行完毕后,通过将PC寄存器的值写回LR寄存器,实现返回到原来的程序继续执行 。
所以在以后编写程序是,要减少跳转的使用方式,可以多使用内联,甚至使用宏,可以大大提高效率。内联(Inline)是一种优化技术,通常用于C++等编程语言中。它是指在编译时将函数调用替换为函数体本身,从而减少函数调用的开销(典型空间换时间),提高程序执行效率。
内联函数通常是简单的、短小的函数,因为它们被编译器认为足够小而不会引入额外的开销。此外,内联函数还必须是无副作用的,因为编译器无法确定在函数调用之后程序的状态会发生什么变化。因此,如果一个函数有副作用或者非常复杂,就无法使用内联优化来提高程序性能。
RCC(Reset and Clock Control)复位和时钟控制模块
- 系统时钟源选择:可以选择内部时钟源(HSI、HSI48、LSE等)或外部时钟源(HSE、LSE等)作为系统的主时钟。
- 时钟分频器配置:可以配置时钟分频器来控制各个外设的时钟频率,以满足不同外设的时钟要求。
- 外设时钟使能:可以使能或禁用各个外设的时钟,以控制外设的工作状态。
- 复位控制:可以对系统的各个模块进行软件复位或硬件复位。
GPIO(General Purpose Input/Output)通用输入/输出引脚的缩写
- 可编程性:GPIO引脚可以通过编程来配置为输入或输出模式,并且可以通过编程来控制引脚的电平状态。
- 多功能性:GPIO引脚通常具有多种功能,可以通过配置寄存器来选择不同的功能,如输入、输出、模拟输入、复用功能等。
- 状态监测:GPIO引脚可以用于检测外部信号的状态变化,如检测按钮的按下或释放。
- 电平转换:GPIO引脚可以用于将微控制器的数字信号转换为外部设备所需的电平,如将微控制器输出的3.3V电平转换为5V电平。
- 选择引脚:根据需要选择合适的GPIO引脚,并了解其对应的引脚号和端口号。
- 配置模式:通过配置寄存器来选择引脚的工作模式,如输入模式、输出模式、复用功能等。
- 配置电平:如果引脚为输出模式,可以通过配置寄存器设置引脚的电平状态,如高电平或低电平。
- 读取输入:如果引脚为输入模式,可以通过读取寄存器来获取引脚的电平状态。
EXTI(External Interrupt)STM32微控制器中的一种外部中断
- 多路中断:STM32微控制器通常具有多个EXTI通道,可以同时检测多个外部信号的变化。
- 灵活配置:可以通过编程配置EXTI通道的触发方式、优先级、中断使能等。
- 高效响应:当外部信号发生变化时,EXTI模块可以快速响应并触发中断处理程序,从而实现实时响应外部事件的功能。
- 配置GPIO引脚:如果外部信号来自GPIO引脚,需要先配置GPIO引脚的工作模式和电平触发方式。
- 配置EXTI通道:通过EXTI寄存器配置EXTI通道的触发方式、优先级、中断使能等。
- 编写中断处理程序:当外部信号发生变化时,EXTI模块会自动触发中断处理程序,需要编写相应的中断处理程序来处理外部事件。
- 使能中断:在使用EXTI模块时,需要将对应的中断使能,以便EXTI模块可以正常响应外部事件。
main函数之前
在Keil中,单片机在执行main函数之前,会进行一系列的初始化工作,包括但不限于:初始化时钟、初始化堆栈指针、执行用户定义的底层初始化代码等。此外,单片机还会调用__main函数,这是因为在C代码中定义了main函数,函数标签main()具有特殊含义。main()函数的存在强制链接器链接到__main和__rt_entry中的初始化代码。其中,__main函数执行代码和数据复制、解压缩以及ZI数据的零初始化 。
三 、STM32f130C8T6芯片介绍
1.属性介绍
•系列:主流系列STM32F1
•内核:ARM Cortex-M3
•主频:72MHz
•RAM:20K(SRAM)——运行内存,实际的存储介质是SRAM
•ROM:64K(Flash)——程序存储器,实际的存储介质是Flash闪存
•供电:2.0~3.6V(标准3.3V)
•封装:LQFP48
2.STM片上资源/外设Peripheral
英文缩写
|
名称
|
基础作用
|
英文缩写
|
名称
|
基础作用
|
NVIC
|
嵌套向量中断控制器
|
管理中断设备
|
CAN
|
CAN通信
|
汽车领域
|
SysTick
|
系统滴答定时器
|
给操作系统提供定时服务
|
USB
|
USB通信
|
模拟鼠标,模拟U盘
|
RCC
|
复位和时钟控制
|
使用各模块的时钟
|
RTC
|
实时时钟
|
计时功能
|
GPIO
|
通用IO口
|
点灯,读取按键
|
CRC
|
CRC校验
|
控制芯片进入睡眠状态
|
AFIO
|
复用IO口
|
复用端口的重定义
|
PWR
|
电源控制
|
断电时仍能保存数据
|
EXTI
|
外部中断
|
完成定时中断的任务,完成测频率,生成PWM波形,配置成专用的编码器接口
|
BKP
|
备份寄存器
|
复位电磁干扰,程序设计不合理,
|
TIM
|
定时器
|
IWDG
|
独立看门狗
|
IIO口输出模拟电压,是ADC的逆过程
| |
ADC
|
模数转换器
|
直接读取Io口的模拟电压值,无需外部链接AD芯片
|
WWDG
|
窗口看门狗
| |
DMA
|
直接内存访问
|
DAC
|
数模转换器
| ||
USART
|
同步/异步串口通信
|
SDIO
|
SD卡接口
| ||
I2C
|
I方C通信
|
FSMC
|
可变静态存储控制器
|
扩建内存,配置总线协议
| |
SPI
|
SPI通信
|
USB OTG
|
USB主机接口
|
- GPIO:通用输入输出端口,可用于控制外部设备,如LED灯、电机等。
- USART:通用异步收发器,可用于实现串行通信,如UART、I2C等。
- I2C:内部集成电路总线,可用于连接低速外设,如传感器、EEPROM等。
- SPI:串行外设接口,可用于连接高速外设,如FLASH、SD卡等。
- ADC:模数转换器,可用于将模拟信号转换为数字信号。
- DAC:数字模拟转换器,可用于将数字信号转换为模拟信号。
- PWM:脉宽调制器,可用于控制电机、LED灯等设备的亮度和速度。
3.芯片名称表达的信息
所以,STM32103C8T6的含义就是:
通用类型,增强型,48脚,64k字节闪存存储器,LQFP封装,负四十度到八十五度工业级温度范围
4.器件一览
我们在操作外设时,要判断其是否存在,否则会无法使用
5.系统结构
基本介绍
三条总线
由上图可知,三条总线包括:指令总线Icode,系统总线,数据总线DCode
I-Code 总线(指令总线
I-Code的作用是取指令&执行指令,只和指令有关,I-Code 总线是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作。取指以字(32位)的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。
D-Code 总线(数据总线
D-Code 的作用是对数据读写访问,只和数据有关,D-Code 总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF(与I-Code相同)之间的数据访问操作。尽管 CM3 支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到 D-Code总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不需要支持非对齐访问。
系统总线
系统总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x2000_0000 – 0xDFFF_FFFF 和0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上。和 D-Code 总线一样,所有的数据传送都是对齐的
6.引脚定义

- 红色为电源相关引脚,蓝色是最小系统相关引脚,绿色是io口、功能口引脚
- S代表电源,I表示输入,O表示输出,IO表示输入输出
- FT表示能容忍5V电压,没有FT的表示1能容忍3.3V电压
侵入检测:
- NRST是系统复位引脚,N表示其是低电平复位
- VSS是负极,结GND,VDD是正极,接3.3V
- PA0兼具有WKUP的功能,可以唤醒处于待机状态的STM32
- 34,37-40都为调试端口
7.调试方式
- 串口调试:使用串口调试助手来验证串口是否可以正常使用。需要准备 USB 转 TTL 模块(下载器)和串口调试助手。在 Keil5 中点击 options for target,在 Target 标签下有个 Use MicroLIB ---勾选,使用微库,包含如下头文件。改写 int fputc (int ch, FILE *f) 函数,需要输出调试信息即可按照标准 C 库的 printf 输出。
- JTAG 调试:使用 J-Link 或 ST-Link 等支持 SWD 模式的调试器进行下载程序与仿真。
- IAP 调试:使用 IAR Embedded Workbench 进行编译和下载程序。
- ST-Link/V2 调试:使用 ST-Link/V2 进行下载程序与仿真。
SWD
- 连接烧录器和单片机,确保连接正确。
- 打开烧录软件,选择正确的单片机型号和烧录器型号。
- 点击“下载”按钮,等待下载完成。
- 点击“调试”按钮,进入调试模式。
JTAG
- 连接烧录器和单片机,确保连接正确。
- 打开烧录软件,选择正确的单片机型号和烧录器型号。
- 点击“下载”按钮,等待下载完成。
- 点击“调试”按钮,进入调试模式。
8.启动配置
启动模式选择引脚
|
启动模式
|
说明
| |
BOOT1
|
BOOT0
| ||
x
|
0
|
主闪存存储器
|
主闪存存存储器被选为启动区域
|
0
|
1
|
系统存储器
|
系统存储器被选为启动区域
|
1
|
1
|
内置SRAM
|
内置SRAM被选为启动区域
|

