嵌入式铁头山羊stm32:一文总结

发布于:2025-09-12 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

一、stm32介绍

1.STM32是什么?

2.扮演什么角色、怎么使用?

3.理解STM32型号 的含义

二、GPIO:General Purpose Input/Output(通用输入输出口)

1.GPIO引脚

2.八种工作模式

(1)输入、输出的区别:

(2)输出:

》GPIO的输出引脚实验:LED闪灯实验

(3)输入

》GPIO的输入引脚实验:按钮持续按下导致灯亮,松开则灭

3.GPIO的所有标准库函数接口

三、硬件通信协议之串口USART(注意区分网络通信协议)

1.定义与结构

》本节也讲了串口调试助手的使用和为啥使用USB转TTL这个设备

2.USART的引脚位置和模式

3.串口的发送数据(核心标准库的SendData())

4.串口的接收数据

5.串口的格式化打印字符串,即:print();

6.标志位

7.编程接口

8.自建的编程接口

四、硬件通信协议之I2C(注意区分网络通信协议)

1.串口的缺点(即有了USART,为啥要有I2C)

2.I2C的基本电路结构

(1)基本电路结构

(2)时钟线和数据线

(3)通信本质(逻辑线与)

(4)通信的流程(核心)

(5)I2C的数据帧格式

3.I2C外设本身模块

(1)结构

(2)IO引脚初始化

(3)自身模块的初始化

(4)发送数据(核心是I2C_SendData()函数)

(5)接收数据

》接收一个字节

》接收两个字节

》接收两个以上字节

(6)标志位

(7)编程接口

(8)自己建立的编程接口

(9)输出和输入测试-使OLED屏幕全亮和读取屏幕是否亮的信号

4.软I2C

(1)硬I2C缺点

(2)IO引脚初始化

(3)自己编写总线上的IO读写函数和延迟函数

(4)发送起始位和停止位

(5)发送一个字节

(6)接收一个字节

(7)自己编写的软I2C编程接口

(8)测试-使OLED屏幕全亮

5.软/硬I2C函数的封装

五、OLED显示器的原理和使用

(1)显示的基本原理(其实本质就是个寄存器,存储着每个像素点的值)

(2)屏幕初始化

(3)画OLED的基本常识

(4)写文字的基本操作

(5)绘图相关的基本操作

六、硬件通信协议之SPI(注意区分网络通信协议)

1.SPI的优点

2.电路结构

3.波形和模块的初始化参数

4.IO初始化的引脚(这里复用了PA15)和模式

5.模块初始化

6.数据发送和接收(为啥不分开写,因为全双工收发是同时的)

7.SPI实验:W25Q64实现断电后的移动硬盘下的灯亮

(1)基本电路

(2)W25Q64的存储结构

(3)传输数据让硬盘进行存储

(4)从硬盘读取数据

(5)实验执行

七、按钮实验

1.持续按压实现持续的点亮或者熄灭灯

2.按钮的点击“后"实现灯的亮/灭

》暴力法:

》EXTI法

3.按钮的点击,双击,长按

八、中断(应对突发事件)

1.概念

2.中断的优点

3.中断初始化(NVIC初始化)

4.中断实验:使用USART发送0/1/2实现闪灯频率的变化

》中断响应函数

》闭合标志位的中断开关

》配置NVIC

九、EXTI(外部中断和事件控制器)

1.概念

2.EXTI的线

3.EXTI的线的内部结构

4.EXTI的IO分配

5.EXTI的初始化

6.EXTI实验:按钮点击后的亮/灭灯(EXTI法)

十、时钟树

1.概念

2.时钟树的结构和关键部分

3.时钟树编程(给芯片提供默认的自定义时钟频率)

十一、定时器

1.概念

2.模块结构之时基单元

(1)时基单元的参数

(2)初始化时基单元

(3)时基单元制造手表的逻辑

(4)利用时基单元以及其中断 去自制延迟函数

3.模块结构之输出比较

(1)概念

(2)PWM

(3)输出捕获本质:CNT和CCRx的比较

(4)输出比较具体结构

(5)输出比较的IO初始化和模块初始化

(6)定时器经典的输出比较实验:呼吸灯实验

4.输入捕获

(1)概念

(2)输入捕获的内部结构

(3)输入捕获结构中各节点的名称

(4)输入捕获的IO初始化与模块初始化

(5)输入捕获经典实验:HCSR-04超声波传感器测距实验

5.从模式控制器

(1)概念

(2)八种从模式、八种主模式

(3)从模式控制器核心编程接口:

(4)从模式控制器的具体结构(主要是看控制器的输入和输出)

 (5)从模式控制器的经典实验1:定时器级联或者同时启停

(6)从模式控制器经典实验2:测试输入的PWM信号的参数

十二、ADC(SAR模式)

1.ADC概念

2.ADC的类别

3.ADC的结构

(1)结构1:12位逐次逼近型ADC

》采样深度:

》12位逐次逼近型ADC的组成

》例子:逐次逼近型的电压选取

(2)结构2:多路复用ADC

(3)结构3:常规序列

(4)结构4:注入序列

4.ADC的时钟频率

5.采样时间和转换时间

6.ADC的IO初始化和模块初始化

7.两个主要的标志位

8.ADC的经典实验1:使用软触-常规序列-单通道-得到光敏传感器的量化电压

9.ADC的经典实验2:使用定时器触发-注入序列-单通道-得到光敏传感器的量化电压

10.ADC的经典实验3:使用定时器触发-注入序列-多通道-得到电位器的量化电压


一、stm32介绍

1.STM32是什么?

意法半导体-单片机-32位

  • ST = STMicroelectronics(意法半导体)

  • M = Microcontroller(微控制器)

  • 32 = 32-bit(32 位架构,基于 ARM Cortex 内核)


在 STM32 这种单片机里,“32 位”主要有几个含义:

  1. 寄存器宽度:CPU 内部的寄存器是 32 位的,一次能装下一个 32 位数据。

  2. 数据总线宽度:CPU 和内存之间传输数据时,一次能搬运 32 位。

  3. 指令宽度/寻址能力:理论上能直接寻址的内存空间更大(2³² = 4GB)。

  4. 运算能力:支持 32 位加减乘除,比 8 位、16 位 MCU 运算更快。


2.扮演什么角色、怎么使用?

管理者(代码管理)、操作者(控制各种外设)

控制 其他外设 去工作


3.理解STM32型号 的含义

 ST是品牌,M32是啥类型的,F系列,C8T6是型号

类比vivo  品牌, phone手机这个类型(还要平板,电脑),x系列(比如x30,x100),

128g深蓝的型号(别人是256G黑色等等)    

 

二、GPIO:General Purpose Input/Output(通用输入输出口)

1.GPIO引脚

特殊引脚

常规引脚(因为普通引脚太多给定义了编号ZQ)

2.八种工作模式

(1)输入、输出的区别:

取决于  信号/电流 的流向  或者是谁是主动操作者,比如输出,CPU是主动输出,而CPU的寄存器被动被输入信号 所以叫输入

(2)输出:

》作用:向引脚输出信号

推挽:

推,CPU写1,P-MOS二极管开关闭合,N-MOS二极管断开,因为接着VDD所以输出高电压;

挽:CPU写0,P—MOS二极管断开,N-MOS二极管开关闭合,因为接着VSS,所以引脚被拉到地电压(因为输出的是低电压,所以可以能对外 吸入电流,所以叫挽,但是本质还是CPU控制的输出模式,不要搞混输入输出了

开漏:

开漏的状况是输出这里的P-MOS引脚始终是断开的,而N-MOS这里的漏极既而始终也是断开的(所以是开漏)。那这种情况下,只存在下方的N-MOS管的闭合和断开的情况了。

闭合是类似于上面推挽的挽,即输出低电压。那断开就是处于一个高阻抗的状态,原因就是断开的话,电流为0,则表示R无限大,所以是高阻抗。

所以开漏这里只存在两种状态:低电压和高阻抗

通用和复用:

通用是cpu直接控制GPIO引脚去输出,

复用是cpu复用外设,外设控制GPIO引脚去输出


最大输出速度

最大输出速度:向IO交替写0和1且输出不失真的最快速度

限制IO的最大输出速度:上升时间和下降时间的长短

最大输出速度的选取:选择满足要求的最小值。比如要求8HMz,那就选取10。


》GPIO的输出引脚实验:LED闪灯实验

LED的线路的接线方式就大概两种(科普):推挽接法、开漏接法

一般线路都有其手册,看其是啥接法。这里选取的板载LED是:开漏接法

(3)输入

》作用:读取输入的信号

》上下保护二极管(目的防静电)

上保护二极管:当输入电压处于合适的范围(0-3.3V),不触发保护,但是当超过VDD的3.3V,比如MCU是当输入的电压>VDD+0.3V就触发输入保护。电流从高电位的GPIO引脚流向VDD。

下保护二极管:同理,合适电压范围不触发。但是当低于0V-0.3V,即低于-03V会触发输入保护。电流从高电位0V(地面)流向GPIO的比如-0.3V(比地面低0.3)

》上下拉电阻

上拉电阻默认高电压。

下拉电阻默认低电压

悬空输入:天线般的电压不稳定

模拟模式:输入的是模拟信号,即自然界的连续的模拟信号

注意:当上拉电阻闭合时,当输入一个低电压,那么最后接收的也是低电压。原因是上拉电阻这里有个高电阻,分压太强,对于整个线路来说真正的电压还是靠输入的这个电压。但是如果是输入悬空下啥也没有传进来,那输入上拉里面的这个电压虽然小但会带些高电压,把整个线路都轻轻拉成高电压。

》施密特触发器

将电压信号转为稳定的数字0或者1

》GPIO的输入引脚实验:按钮持续按下导致灯亮,松开则灭

核心思路:单片机输出低电压,中间线路接个按钮(其实就是控制线路的断与不断),断开就是不通电,不断的话就是直接输出电压信号了。

3.GPIO的所有标准库函数接口

三、硬件通信协议之串口USART(注意区分网络通信协议)

1.定义与结构

硬件之间的通信接口


》本节也讲了串口调试助手的使用和为啥使用USB转TTL这个设备

以及为啥USB转TTL上的GND要和单片机上的GND相连接

2.USART的引脚位置和模式

(因为是片上外设,所以一定是复用而不是通用)

》复用的正常模式

》复用的重映射模式

简单来说就是:开启复用(AFIO)模式就行。

3.串口的发送数据(核心标准库的SendData())

4.串口的接收数据

5.串口的格式化打印字符串,即:print();

重写fputc()函数,使其可以通过USART发送数据出去


6.标志位

TXE:Tx接口是不是Empty的


TC:传输Complete了


Rx:Rx 是not empty的


FE


NE


ORE

7.编程接口

8.自建的编程接口

四、硬件通信协议之I2C(注意区分网络通信协议)

1.串口的缺点(即有了USART,为啥要有I2C)

目的是:前面学习了一种通信协议USART,但是这里为啥还要学第二种,因为串口有

缺点:很明显就是每个串口只能最多和一个设备建立通信连接,即只能一对一的通信。

那比如使用的c8t6上的就三个串口,所以最多只能连接三个设备

而I2C则实现了一个接口就可以连接很多的设备

2.I2C的基本电路结构

(1)基本电路结构

  1. 一个主机,
  2. 多个从机(支持100多个,因为7位地址的话,是2^7次=128,从0-127,抛去特殊的地址也还有100多个)
  3. 两条总线(SCL,SDA)
  4. 每个设备(主机或者从机)都要连接SCL和SDA线
  5. 每条总线都要串行一个带有上拉电阻的高电压,

(2)时钟线和数据线

1. 时钟线,SCL(clock),

特点:单向,只能主机往从机发时钟信号,时钟信号显示为:高低变换的信号

---主要用来控制通信的速度


2.数据线,SDA(data),

特点:双向,可以主发从收或者从发主收,数据信号显示为:0/1



注意:一个时钟信号周期下会传输一个数据,所以周期频率越快,数据传输越快(即频率控制快慢)

(3)通信本质(逻辑线与)

随便一个总线(SCL或者是SDA),其他从机默认都是高阻抗下的高电压(其他高阻抗,因上拉电阻的原因,整个线路默认都是高电压),而主机发送电压信号0/1控制整个线路信号

(4)通信的流程(核心)

首先,一定是主机发送起始位,表示通信的开始。

寻址阶段:一定是主机发送一个字节下的(7位的地址+0/1的写读操作位),然后从机响应ACK


之后就是通信双方谁是主,谁是从。

主:发送字节

从:发送ACK响应或者不发送数据即不响应


最后一定是主机发送停止的信号,即发送停止位,表示要停止了


所以注意,整个流程中,只有第二阶段从机才有可能发送数据,其他时间都是主机发送信号;

以及注意不管是主机还是从机发送其本质上:接收方都是高阻抗的开漏输出,而发送方则是靠往自己的SCL/SDA引脚发送0/1信号既而使总线上的信号为高//低电压信号。



 

(5)I2C的数据帧格式

  1. 起始位:SCL恒定高电压,SDA下降
  2. 寻址位:7位地址和1位R/W  +  ACK的响应
  3. 数据位(默认的9位:一定也只能是8位的一个字节+一个响应位)。
  4. 停止位:SCL恒定高电压,SDA上升

注意:寻址位,在主机寻址结束后一定是主机寻址完要会到默认的高电压,但是有人响应了就会把你拉低,没人响应的话自己就会回高。(这就是蓝线和绿线的原理)

数据位,只有在这里才会出现从机发送数据,其他地方都是主机发送数据,即主机发送起始位,主机发送寻址位,主机发送停止位。


注意如果只是发送一个字节的数据,接收方可以不应答,即表示NAK的信号,因为就一个字节,发完不发了,所以不响应也行

3.I2C外设本身模块

(1)结构

SCL控制时钟,SDA控制数据

(2)IO引脚初始化

(3)自身模块的初始化

注意比其他外设,自己要多一个施加复位信号和释放复位信号

(4)发送数据(核心是I2C_SendData()函数)

判断总线是否空闲

发送起始位,并使用SB标志位判断起始位是否发送完成

发送地址位:7位地址和R/W位(注意AF清零,然后ADDR标志位和AF拒绝位的使用)

发送数据(for下发送数据:每次注意AF拒绝位的使用和TXE标志位的使用,检查完后发送数据)

发送完成后使用标志位AF判断是否拒绝以及BTF的标志位

发送停止位

(5)接收数据

》接收一个字节

》接收两个字节

》接收两个以上字节

(6)标志位

(7)编程接口


网站公告

今日签到

点亮在社区的每一天
去签到