欢迎光临散文网 会员登陆 & 注册

STM32入门教程-2022持续更新中

2022-11-06 09:18 作者:动感老头  | 我要投稿

1.工程文件的创建

(1)启动文件


2.GPIO简介






3.GPIO输入

(1)c语言中变量类型在32中


typedef一般用以给变量定义


常规使用查看是VS2013的STM32文件夹

4.外部中断

(1)执行流程




9-15,15-20会同时触发一个中断函数,需要通过标志位判断具体触发哪个



[5-2] 对射式红外传感器计次&旋... P12 - 10:30



[5-2] 对射式红外传感器计次&旋... P12 - 14:40


1 重置默认状态

2 配置成参数状态

3 赋默认值给调用的结构体参数

4 软件触发外部中断

5-9标志位相关



[5-2] 对射式红外传感器计次&旋... P12 - 22:26



[5-2] 对射式红外传感器计次&旋... P12 - 25:28



[5-2] 对射式红外传感器计次&旋... P12 - 28:60



[5-2] 对射式红外传感器计次&旋... P12 - 39:30



5.定时器中断


向上计数:从0开始,向上自增到重装值,清零并申请中断;

向下计数:从重装值开始,向下自减到0,回到重装值并申请断;

中央对齐模式:从0开始到重装值,申请中断;再自减到0,申请中断;



①基本定时器(仅支持向上计数)


1.预分频器写1——2分频 出=入/2 = 36M

2——3分频 /3 =


实际分频系数 = 预分频器 + 1


2.更新事件&更新中断

更新事件不会触发中断


3.中断流程:

基准时钟》预分频器》计数器计数自增并自动重装寄存器比较,值相等时产生更新中断(NVIC)&更新事件》CPU响应


4.主从触发模式

实际使用时要用DAC输出一段波形,每隔一段时间触发一次DAC让其输出下一个电压点,使用定时器中断可能会导致主程序中断频繁,影响其他中断的运行


使用主模式可以将定时器的更新事件映射到触发输出(TRGO)的位置,TRGO直接接到DAC的触发转换引脚,定时器更新则不用再中断


②通用计时器(向上+向下+中央对齐)


[6-1] TIM定时中断 P13 - 19:54



采用内部时钟(72MHz)

如果要采用外部时钟,首选ETR引脚外部时钟模式2的输入


③高级定时器


[6-1] TIM定时中断 P13 - 27:01




④具体结构





外部晶振8MHz,经过PLL锁相环倍频9倍变为72MHz,并设置为系统时钟


⑤定时器中断库函数


[6-2] 定时器定时中断&定时器外部时钟 P14 - 04:42



[6-2] 定时器定时中断&定时器外部时钟 P14 - 32:53



6.TIM输出比较

①PWM原理

1.PWM输出频率较快从而实现“连续的变化”,故只能用于惯性系统;

2.占空比决定PWM等效出来的模拟电压的大小,占空比越大,等效的模拟电压就越趋近高电平;

E.G.高电平5V,低电平0V,50%占空比等效为2.5V,10%等效为0.5V

3.分辨率——占空比变化的细密程度,越高分辨率&分辨率,对硬件电路的要求越高;


②具体操作

通用计时器

CC1P写1,原相输出;CC1P写0,反相输出

PWM模式2为1的取反

蓝线CNT,黄线ARR,红线CCR,

CNT不断自增,到达设定的ARR值后清零,

采用PWM模式1为例,CNT<CCR时,高电平,CNT>=CRR,低电平

改变CCR的值即可调整占空比

具体计算

外设介绍

舵机一般自带驱动电路

输入一个PWM波形,输出轴固定在某一个角度

PWM为信号线,并不需要大功率

两路推挽电路控制电机


[6-3] TIM输出比较 P15 - 37:07



③代码编写


[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 04:16



[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 17:34



[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 20:57



[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 29:48



7.PWM输入比较

①频率测量

1.测频法在f较低时,误差会很大;测周法在f高时,误差大;两种方法都会在最后时刻出现正负1误差

2.测频法自带均值滤波,体现的是该段时间内的均值,数据更新慢,较平缓;测周法数据更新快,会受噪声影响比较大;

3.令两式中N相等中界频率用以区分两方法的使用条件,低于该频率用测周,高于用测频


[6-5] TIM输入捕获 P17 - 18:27





②代码部分


[6-6] 输入捕获模式测频率&PWMI... P18 - 10:10



[6-6] 输入捕获模式测频率&PWMI... P18 - 17:43



8.编码器接口

①原理


②代码


[6-8] 编码器接口测速 P20 - 05:10


GPIO输入模式选择:外部模块空闲默认输出高电平,选择上拉输入;外部模块低电平则反之;不确定外部模块的默认状态/外部信号输出功率小,一般选择浮空输入


9.ADC

①原理


逐次逼近:二分法确定电压,几位需要确定几次,对于二进制来说,二分法即每位的位权


[7-1] ADC模数转换器 P21 - 16:23


1.规则通道最多可以读取16位数据,但是规则通道数据寄存器只能存1个数据,在读取后应当使用DMA快速转移数据,否则前面的数据可能会被覆盖;注入组通道寄存器可以同时存4个数据;

2.ADCCLK最大输出频率为14MHz,ADC预分频器只能选择6分频(12M)或8分频(9M);

3.

4.ADC1和ADC2可以配合使用为双ADC模式;

5.


[7-1] ADC模数转换器 P21 - 29:45


还有一种在连续模式下的间断模式,在转换几位后需要再次触发才能继续转换

6.其他知识点


左对齐数据会比原数据大16倍;当右对齐数过高时,可以选左对齐后取高几位,舍弃后面的几位,但降低精度

AD转换需要时间,在这段时间需要保持住信号,故存在采样开关&采样保持电路(电容存储电压)

(本节代码未看)

10.通信协议

全双工:双方同时相互通信;半双工:不同时;单工:数据单向传递;

时钟:同步需要靠时钟信号通知采样时间,可以降低对硬件电路的依赖,可以暂停;异步通信:没有时钟线的需要双方约定一个采样频率,并且加帧头帧尾进行采样位置的对齐;节省时钟线

异步时序缺点:十分依赖硬件电路,必须要有USART硬件电路支持;

单端信号使用时需要共地;差分一般不需要;



二进制调试时码元=1比特;故波特率=比特率

校验方式:奇校验&偶校验、CRC校验;


[9-1] USART串口协议 P25 - 27:30


TX引脚输出定时翻转的高低电平,RX读取

11.USART

①基本介绍


[9-2] USART串口外设 P26 - 06:30



[9-2] USART串口外设 P26 - 21:56


1.数据帧;2.起始位侦测;3.数据采样;4.波特率发生器;5.转串口模块分析;6.


[9-3] 串口发送&串口发送+接收 P27 - 05:49




取某十进制数A的x位:(A / 10^x) % 10;

输出中文两种方式: 1.keil5和串口助手都选择UTF-8,且加上特定指令

2.keil5选择GB2312,串口助手选择GBK

②数据包发送

使用添加标志位的分割载荷,避免负载和包头/包尾重复的问题:

1.限制载荷数据范围;

2.使用固定长度数据包,判断包头包尾用于对齐;

3.增加包头包尾数据量;

文本数据包解析较慢;

③数据包接收


[9-4] USART串口数据包 P28 - 15:59



12.I2C通信

①基础知识

设计背景:

1.全双工>半双工;

2.应答机制,每接收到一个数据给予反馈

3.单片机只和指定模块通信,其他模块不产生干扰;

4.异步时序不能同时暂停,容易出现问题;发送方暂停发送,接收方不能暂停;

同步的协议,要加入时钟线指导对方的读写,防止出现问题

1.一主多从

主机权力:对SCL线的完全控制;空闲状态下可以主动发起对SDA的控制,从机发送数据&从机应答时主机才会转交SDA控制权给从机;

从机:SCL时钟线在任何时候都只能进行被动的读取,不允许主动发起对SDA数据线的控制,主机发送读取从机的命令或从机应答时才能短暂地获取SDA控制权;

2.输入输出模式

对于SCL:主机绝对控制SCL,主机可配置成推挽输出,从机配置成浮空输入/上拉输入;主机发送,所有从机接收;

对于SDA:半双工协议,主机发送时要输出,接收时输入;

时序未配置好可能同时出现主机、从机同时输出,一个输出高电平,一个低电平会出现电源短路;

故I2C禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻+开漏输出的电路结构;


[10-1] I2C通信协议 P31 - 18:50


推挽输出:直接接到正负极 >>> 强上拉&强下拉

开漏输出:去除上管,输出低电平时下管导通 >>> 强下拉

高电平无上管 >>> 浮空 >>> 所有设备只能输出低电平,不能输出高电平

SCL&SDA各外置一个上拉电阻,通过电阻拉至高电平


[10-1] I2C通信协议 P31 - 20:27


好处:1.完全杜绝电源短路;2.避免引脚模式频繁切换;3.存在线与现象,所有设备都输出1总线才为1;

3.时序基本单元

I2C时序基本单元的组成:1.起始&终止条件;2.发送&接收一个字节;3.发送应答&接收应答

类似于串口中的起始位&结束位


[10-1] I2C通信协议 P31 - 24:43



[10-1] I2C通信协议 P31 - 27:48


释放SDA == 切换成输入模式


[10-1] I2C通信协议 P31 - 30:04


4.完整时序

分为7位&10位从机设备地址 >>> 相当于名字,出厂会配置,一般最后几位可以改变,板子上的Ax引脚接不同电平情况即可确定从机设备地址

①指定地址写


[10-1] I2C通信协议 P31 - 35:22


发送的第一个字节为7位设备地址+读/写位(0写1读) 》》》 从机应答位 》》》 第二个字节按照设备定义发送 》》》 从机应答位 》》》 第三个字节…… 》》》 终止条件

②当前地址读


[10-1] I2C通信协议 P31 - 41:50


缺少指定寄存器的时序,需要调用当前地址指针

③指定地址读


[10-1] I2C通信协议 P31 - 45:43


主机不想读,最后一个字节后要给予非应答

























STM32入门教程-2022持续更新中的评论 (共 条)

分享到微博请遵守国家法律