一 STM32简介
1.1 stm32是什么
stm32是一类芯片的总称,由ST(意法半导体)公司生产的一种32位微控制器。
1.2 stm32芯片型号规格介绍
以STM32F103C6T6为例:
ST: 厂家(意法半导体)
M: 微控制单元
32: 32位寻址位宽(32个bit表示一个地址)
F103: 产品系列(通用型、Cotex-M3内核、最大主频72MHz)
C8T6: 产品参数
1.3 存储密度
根据存储容量(Flash)的不同划分位不同的等级,也就说芯片中能烧录进去程序的大小,若所编写的程序太大的话,芯片是装不下的
1.4 最小系统板介绍
最小系统板:就是提供STM32芯片最基本工作条件的电路板,STM32芯片的运行,需要供电,需要晶振,我们将程序下载到开发板,还需要下载和调试接口,这些功能会集成到最小系统板上,通过PCB连接到STM32芯片对应的引脚。而这些功能没有用到的引脚,会被引出来供开发者使用。
高速晶振:给CPU和大部分外设提供时钟
低速晶振:给RTC模块提供时钟
复位按键:每次按下,程序会从头执行
1.5 STM32启动方式
二 GPIO和AFIO
2.1 芯片的引脚分布
2.1.1 特殊功能引脚和普通IO引脚
2.1.2 普通IO引脚的命名规则
2.1.3 IO复用
一个芯片的引脚数量是一定的,以C8T6为例只有48个引脚,再扣除11个特殊功能引脚只有37个引脚,从设计者角度希望芯片功能更加强大,往芯片里塞更多的模块当芯片模块足够多该芯片就更加强大因此会出现引脚不够用的情况所以会采用IO复用功能。
通用功能:由编程人员直接对IO脚进行读写
复用功能:IO引脚的控制权交给其他模块,如定时器,串口等,编程人员对该模块进行编程从而间接对IO引脚进行控制,复用功能可有多个
复用的好处:让有限的IO引脚实现更多的功能,闲置的引脚可以当作普通IO来用
2.1.4 IO重映射
当同时使用串口和定时器时PA9和PA10不知道归谁,这时候就需要IO重映射
2.2 GPIO
2.2.1 GPIO简介
芯片内部最核心的就是CPU像人的大脑,只能负责执行指令或进行运算,本身无法进行独立的功能,因此需要在芯片内部加入各种独立的功能模块,这些模块统一叫做芯片的片上外设。GPIO就是一种片上外设,负责对引脚的高低电平的读写。
2.2.2 GPIO寄存器组
STM32编程模型最中央是一个CPU,在其周围有许多片上外设负责协助CPU完成一些具体的功能,编程的时候程序是在CPU里执行,但最终目的是操纵这些片上外设去实现具体的功能,这就要求CPU与这些外设进行通信,CPU通过读写模块的寄存器来对模块进行操作,把这些寄存器加起来就是寄存器组。
2.2.3 GPIO的八种工作模式
输入模式读取GPIO的值时不会相互产生干扰,输出模式要么CPU直接控制GPIO,要么通过其他外设间接控制GPIO
2.2.4 IO的最大输出速度
2.2.5 GPIO的内部结构
2.3 LED编程
2.3.1 LED的推挽接法和开漏接法
开漏输出只能输出低电平,外接上拉电阻可输出高电平。
2.3.2 编程流程
STM32片上外设都是时序电路,对于时序电路只有在外部时钟激励下才能工作,默认情况下这些片上外设时钟都是关闭的
2.3.4 GPIO的读取和写入
2.4 按键编程
2.4.1 按钮的电路设计
外接上拉电阻情况下按钮按下读IDR寄存器可读0,按钮松开可读1
IO处于输入模式下内部有两个电阻,当选择IO模式时选择输入上拉模式可等效为外接上拉电阻情况,可省下一个元件。
2.4.2 按键消抖
2.5 AFIO
PA8为ch1 PA9为ch2 PA10是ch3 PA11是ch4
PA9是TX PA10为RX 想同时使用串口和定时器就会出现冲突,使用AFIO就可以解决这个冲突(查表)
2.5.1 AFIO相关API
三 中断
3.1 中断原理
3.2 中断优先级
一:假设在执行常规程序时在某个点中断源A触发了,程序转而去处理A的中断响应函数,在此期间中断源B触发了,考虑到B是否会对A进行中断嵌套,比较两者抢占优先级,B的数值更小于是程序转而去处理B的中断响应函数结束之后返回A最后执行常规程序
二:在执行常规程序时发生了中断A转而处理A的中断响应函数再次期间发生了中断B和C,考虑嵌套,B数值高于 A不产生影响,C数值相等,BC会进行中断排队
3.3 NVIC
3.3.1 NVIC简介
NVIC位于内核(CPU)内部
3.3.2 NVIC内部结构
3.3.3 中断向量表
3.3.4 NVIC标准库编程
设置几个bit位给抢占优先级和子优先级
3.3.5 中断编程流程
NVIC位于内核内部默认情况下内核时钟开启
3.4 EXTI
3.4.1 EXTI简介
3.4.2 EXTI工作原理
中断处理需要CPU介入
3.4.3 EXTI通道
多路信号同时检测
3.4.4 EXTI寄存器组
20个bit位控制20个通道
3.4.5 EXTI标准库编程
3.5 EXTI按键编程实验
3.5.1 实验流程
NVIC管理中断源 EXTI5-EXTI9共用一个中断源
主要理解NVIC管理中断源
3.6 单片机编程原则
四 USART与串口通信
4.1 串口通信
4.1.1 串口简介
4.1.2 串口接线
4.1.3 数据帧
传数据由小到大
上图数据位为11001000(LSB)
实际书写习惯由MSB到LSB 00010011(0x13)
1 4使用最多
对于连续发送数据传输过程中没有空闲,使用停止位对数据帧进行分割,起始位表示数据的开始
4.1.4 异步通信与波特率
4.1.5 硬件流控
有时候数据发送过快会导致数据丢失,接收方加个反馈信号
4.2 USART
4.2.1 USART简介
前三个同步异步模式均可,后两个只能工作在异步模式下
4.2.2 USART工作原理
一个数据线逐个发送/多个数据线同时发送
一次性写8个bit位,发送的时候是单根线发送所以要进行并转串
收的时候串行接受,CPU一次性读取8个bit位并行读取,所有要串转并
4.2.3 USART参数配置
4.2.4 数据发送过程
4.2.5 数据的接受过程
4.3 USART标准库编程
4.3.1 实验介绍
只能TX RX进行重映射,可搬到PB6 PB7
4.3.2 标准库接口介绍
4.3.3 USART初始化流程介绍
4.4 串口中断
4.4.1中断接收简介
轮询缺点:代码执行时间不确定
4.4.2 配置中断源
七个标志位都能产生中断
C8T6只有60路中断,如果不共用 5个串口就是5x7=35个中断 中断不够用 以此来节约中断源数量
给标志位加开关(中断使能位)可以分别屏蔽
4.4.3 中断接收的编程思路
4.4.4 中断发送的编程思路
五 RCC与时钟树
5.1 时钟树
降低芯片功耗
5.2 RCC与时钟树编程
六 IIC
6.1 IIC简介
模块多的时候串口不够用
6.2 主机与从机
6.3 IIC通信协议
空闲:SCL=H, SDA=H(高电平)
正常情况下SCL=L,SDA可以变化;SCL=H,SDA保持不变
起始位:SCL=1,SDA=⬇(下降沿)
停止位:SCL=1,SDA=⬆(上升沿)
6.4 IIC模块的使用方法
6.4.1 IIC模块简介
6.4.2 寄存器组与结构框图
6.4.3 IIC初始化
6.4.4 主机数据发送
6.4.5 主机数据接收
IIC是串行通信方式,双缓冲结构可实现并行和串行的转换
数据帧只有一个字节时
数据帧有2个字节时
数据帧大于2字节时
6.4.6 MPU6050
七 定时器
定时器与时钟树的关系:定时器为时钟树上的一片树叶,以一块手表为例
把手表当作定时器,石英晶振为时钟树石英晶振为手表提供时钟信号,手表则用来看时间
定时器内部结构
7.1 时基单元
时钟来源
APB分频系数为1则为1倍频,大于1则为2倍频
例:
预分频器
CNT有三种计数方向
RCR
注:只有高级定时器才有重复计数器RCR
阴影前面的为活动寄存器,阴影为影子寄存器
写入的值会先进入影子寄存器进行缓冲,产生update事件后才会进入活动寄存器,这样的缓冲机制会更安全(预加载功能)
PSR和RCR的预加载功能是强制开启的ARR可手动
定时器种类
7.2 输出比较
输出比较就是定时器向外输出精确定时的方波信号
八种模式
7.3 输入捕获
定时器有4个通道,既可以作为输入也可以作为输出,作为输入的时候可以把外部信号通过通道输入进来然后使用定时器对这个信号的时间参数进行测量这种功能就叫做定时器的输入捕获。作输出的时候定时器向外输出精确的方波信号这种功能叫做输出比较。
外部信号通过通道一输入到定时器中,让通道一工作在输入捕获模式下,每当检测到外部信号发生变化时CNT的值就会被拍照保存到CCR寄存器中,然后读取CCR寄存器的值,这样就知道在什么时间发生的信号变化
输入捕获:捕捉信号变化的时间点并保存。
信号来自通道本身为直接,信号来自对侧通道则为间接
7.4 从模式控制器
从模式禁止:不使用从机功能 使能:通过TRGI把实基单元的开关状态输出出去
复位模式:使用TRGI的上升沿来复位CNT,同时产生Update事件 更新:每产生一个Update事件就向TRGO输出一个脉冲
门模式:使用TRGI控制时基单元高电平导通,低电平断开
触发模式:使用TRGI的上升沿来启动定时器
外部时钟模式1:把TRGI作为定时器的时钟
TRGI来源