打印
[应用相关]

【STM32知识点】STM32基础知识总结

[复制链接]
1105|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
【认识STM32】
F1 代表了基础型,基于 Cortex-M3 内核,主频为72MHZ,F4 代表了高性能,基于 Cortex-M4 内核,主频 180M



使用特权

评论回复
沙发
黑心单片机|  楼主 | 2022-4-28 23:10 | 只看该作者
【GPIO外设】
一、GPIO的八种工作模式
1、上拉输入:IO口在无输入的情况下,保持高电平。

2、下拉输入:IO口在无输入的情况下,保持低电平。

3、浮空输入:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。

4、模拟输入:输入信号不经施密特触发器直接接入,输入信号为模拟量而非数字量,其余输入方式输入数字量。

5、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

6、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点:

(1)利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经上拉电阻、MOSFET到GND。IC内部仅需很小的栅极驱动电流。

(2)一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)

(3)开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

(4)可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

7、复用推挽输出:此时IO受内部外设控制,比如定时器的PWM,比如SPI的MOSI,MISO等。 而普通的推挽输出,则IO受ODR控制。

8、复用开漏输出:参考复用推挽。


使用特权

评论回复
板凳
黑心单片机|  楼主 | 2022-4-28 23:11 | 只看该作者
二、总结在STM32中选用IO模式
1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1。

2、带上拉输入GPIO_IPU——IO内部上拉电阻输入。

3、带下拉输入GPIO_IPD—— IO内部下拉电阻输入。

4、模拟输入GPIO_AIN ——应用ADC模拟输入,或者低功耗下省电。

5、开漏输出GPIO_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能。

6、推挽输出GPIO_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的。

7、复用功能的推挽输出GPIO_AF_PP ——片内外设功能(I2C的SCL,SDA)。

8、复用功能的开漏输出GPIO_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)。


使用特权

评论回复
地板
黑心单片机|  楼主 | 2022-4-28 23:12 | 只看该作者
【RCC时钟】
RCC时钟的主要作用:设置系统时钟 SYSCLK 、设置 AHB 分频因子(决定 HCLK 等于多少)、设置 APB2 分频因子(决定 PCLK2 等于多少)、设置 APB1 分频因子(决定 PCLK1 等于多少)、设置各个外设的分频因子;控制 AHB 、 APB2 和 APB1 这三条总线时钟的开启、控制每个外设的时钟的开启。 对于 SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的配置一般是:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M, PCLK1=HCLK/2 = 36M。(以stm32f103vet6为例)
使用HSE时,设置系统时钟的步骤
* 1、开启HSE ,并等待 HSE 稳定
* 2、设置 AHB、APB2、APB1的预分频因子
* 3、设置PLL的时钟来源,和PLL的倍频因子,设置各种频率主要就是在这里设置
* 4、开启PLL,并等待PLL稳定
* 5、把PLLCK切换为系统时钟SYSCLK
* 6、读取时钟切换状态位,确保PLLCLK被选为系统时钟


使用特权

评论回复
5
黑心单片机|  楼主 | 2022-4-28 23:14 | 只看该作者
【NVIC是嵌套向量中断控制器】
一、优先级定义
在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx,用来配置外部中断的优先级,IPR 宽度为 8bit,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是绝大多数 CM3 芯片都会精简设计,以致实际上支持的优先级数减少,在 F103 中,只使用了高 4bit,用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占 优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。




使用特权

评论回复
6
黑心单片机|  楼主 | 2022-4-28 23:15 | 只看该作者
二、优先级分组

优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8] 位 决定,F103 分为了 5 组,具体如下:主优先级 = 抢占优先级。


使用特权

评论回复
7
黑心单片机|  楼主 | 2022-4-28 23:15 | 只看该作者
【EXTI外部中断/事件控制器】
EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事 件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触 发事件的属性。


使用特权

评论回复
8
黑心单片机|  楼主 | 2022-4-28 23:16 | 只看该作者
【SysTick系统定时器】
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。


使用特权

评论回复
9
黑心单片机|  楼主 | 2022-4-28 23:17 | 只看该作者
【通讯的基本概念】
一、串行通讯与并行通讯
按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线 (一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式。


使用特权

评论回复
10
黑心单片机|  楼主 | 2022-4-28 23:19 | 只看该作者
二、全双工、半双工及单工通讯

根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯,它们主要以信道的方向来区。

在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位, 或者把主体数据进行打包,以数据帧的格式传输数据,见图某种异步通讯 ,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。

在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。


使用特权

评论回复
11
黑心单片机|  楼主 | 2022-4-28 23:19 | 只看该作者
四、通讯速率
衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率 (Bitrate) 来表示,即每秒钟传输的二进制位数,单位为比特每秒 (bit/s)。容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元。通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。

例:常见的通讯传输中,用 0V 表示数字 0,5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有 0V、2V、4V 以及 6V 分别表示二进制数 00、01、10、11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率。


使用特权

评论回复
12
黑心单片机|  楼主 | 2022-4-28 23:21 | 只看该作者
串口通讯一、物理层:

串口通讯的物理层有很多标准及变种,我们主要讲解 RS-232 标准。


根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准及 RS-232 标准。

TTL 的电平标准,理想状态下,使用 5V 表示二进制逻辑 1,使用 0V 表示逻辑 0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V 表示逻辑 1,+15V 表示逻辑 0,即RS232。

因为控制器一般使用 TTL 电平标准,所以常常会使用 MA3232 芯片对 TTL 及 RS-232 电平的信号进行互相转换。

在目前的其它工业控制使用的串口通讯中,一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号,而 RTS、CTS、DSR、DTR 及 DCD 信号都被裁剪掉了。



使用特权

评论回复
13
黑心单片机|  楼主 | 2022-4-28 23:22 | 只看该作者
二、协议层
串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

波特率:串口异步通讯,异步通讯中由于没有时钟信号 (如前面讲解的 DB9 接口中是 没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号 进行解码,图串口数据包的基本组成 中用虚线分开的每一格就是代表一个码元。常见的波特率为 4800、9600,115200 等。

通讯的起始和停止信号:串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示。

有效数据:在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长。

数据校验:在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验 (even)、0 校验 (space)、1 校验 (mark) 以及无校验 (noparity)。


使用特权

评论回复
14
黑心单片机|  楼主 | 2022-4-28 23:24 | 只看该作者
I2C

I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单, 可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备。

一、物理层

1、I2C 通讯设备之间的常用连接方式:

它的物理层有如下特点:


(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。


(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线 (SDA) ,一条串行时钟线 (SCL)。数 据线即用来表示数据,时钟线用于数据收发同步。


(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。


(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都 输出高阻态时,由上拉电阻把总线拉成高电平。


(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。


(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。


(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制。



使用特权

评论回复
15
黑心单片机|  楼主 | 2022-4-28 23:25 | 只看该作者
二、协议层

1、I2C 基本读写过程


使用特权

评论回复
16
黑心单片机|  楼主 | 2022-4-28 23:25 | 只看该作者

2、通讯的起始和停止信号

当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。起始和停止信号一般由主机产生。



使用特权

评论回复
17
黑心单片机|  楼主 | 2022-4-28 23:26 | 只看该作者
2、 数据有效性

SDA 数据线在 SCL 的每个时钟周期传输一位数据。传输时,SCL 为高电平的时候 SDA 表示的数据有效,即此时的 SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL 为低电平时,SDA的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。

每次数据传输都以字节为单位,每次传输的字节数不受限制。

使用特权

评论回复
18
黑心单片机|  楼主 | 2022-4-28 23:27 | 只看该作者
3、地址及数据方向

I2C 协议规定设备地址可以是 7 位或 10 位,实际中 7 位的地址应用比较广泛。紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位 (R/),第 8 位或第 11 位。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据。

读数据方向时,主机会释放对 SDA 信号线的控制,由从机控制 SDA 信号线,主机接收信号,写 数据方向时,SDA 由主机控制,从机接收信号。

使用特权

评论回复
19
黑心单片机|  楼主 | 2022-4-28 23:28 | 只看该作者
4、响应

作为数据接收端时,当设备 (无论主从机) 接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端 希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个 停止信号,结束信号传输。

传输时主机产生时钟,在第 9 个时钟时,数据发送端会释放 SDA 的控制权,由数据接收端控制 SDA,若 SDA 为高电平,表示非应答信号 (NACK),低电平表示应答信号 (ACK)。

使用特权

评论回复
20
黑心单片机|  楼主 | 2022-4-28 23:29 | 只看该作者
【SPI】
SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率 较高的场合。

一、SPI物理层
SPI 通讯设备之间的常用连接方式:SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线NSS。(SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

475

帖子

0

粉丝