☰
STM32hal库开发-中断与串口和通信协议
2026/10/14 3:25:57 网站建设 项目流程

1.中断

1.原理图

1.边沿检测电路:可以检测输入的电平信号中有没有发生高低电平的转换,即有没有出现上升沿或下降沿,在根据触发选择寄存器的配置,来决定书否向后输出一个高电平信号

2.请求挂起寄存器:接收到高电平信号后会将对应的位置1

2.NVIC:嵌套向量中断控制器

1.中断优先级:抢占优先级,响应优先级(数字越小,优先级越大)

2.需要使用优先级的情况:

1.当两个中断同时发生,先比较抢占优先级,若抢占优先级相同,再比较响应优先级

2.当A中断再执行中,另一个B中断突然发生,只比较二者抢占优先级,若A中断优先级较低,B中断会直接打断A中断,等到B中断执行完成,再恢复A中断执行

2.串口

1.TTL串口:

2.原理图

1.两设备在数据线上按照约定好的频率切换高低电平,代表1和0,就可以完成通信

2.用来发送的IO口称为TX,用来接收的IO口称为RX

3.使用串口时,TX连接RX,RX连接TX(有时两个串口还要连接一根地线,这种情况叫共地)

4.需要共地的原因:我们平常所说的电压是一个相对值(规定一个电势点为0伏,其他的电压则为相对于此电势点的差值,共地是两设备正常通信的前提)

3.涉及到GPIO口复用功能时,会导致cubemx开启GPIO复用相关的代码,这些代码会根据我们的设置对下载调试器接口进行配置,所以我们没有手动设置下载调试器接口时,会导致相关接口关闭,出现了下载一次程序后就无法下载程序的情况,需要在cubumx中打开sys将模式设置为serial wire

4.波特率:每秒传送的码元数量即每秒多少次电平信号,默认情况下TTL串口每传递一个字节即8bit的数据,还需要添加一位起始位和一位停止位,即每传送一字节需要10bit,波特率越高,数据传输速度越快,但收发双方应选择相同的波特率

5.串口配置

1.配置图

1.baud rate:波特率

2.word length:字节长度

3.parity:校验位

4.stop bits:停止位

6.库函数

1.HAL_UART_Transmit(串口指针,需要发送的信息的指针,要发送内容的长度(可用strlen()函数取数组长度),超时时间,即多久后还每发送完成则停止发送);

3.数据帧格式

1.奇校验:数据位中包含奇数个1

2.偶校验:数据位中包含偶数个1

4.串口工作模式

5.句柄:UART_HandleTypeDef huart1:包含跟串口相关所有数据

6.相关库函数

1.HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)

1.作用:通过串口把数据发送出去

2.参数:UART_HandleTypeDef *huart:填写串口句柄的指针,const uint8_t *pData用来填写要发送的数据,uint16_t Size:填写发送数据的长度,以字节为单位,uint32_t Timeout:超时时间(单位:毫秒)

3.返回值:数据发送成功或失败:弹出HAL_OK为成功

2.HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

1.作用:通过串口接收一定数量的数据

2.参数:UART_HandleTypeDef *huart:填写串口句柄的指针,uint8_t *pData:指向接收缓冲区的指针,uint16_t Size:要接收数据的长度,以字节为单位,uint32_t Timeout:超时时间,单位毫秒

3.返回值:数据发送成功或失败:弹出HAL_OK为成功

7.I2C通信协议

1.有SCL(Serial Clock,串行时钟线,负责传输时钟信号,每个时钟周期传输一位,时钟频率越高,传输数据速率越快)和SDA(Serial Data,串行数据线,负责传输数据,高电压表示1,低电压表示0)组成

2.主机和从机的SCL连SCL,SDA连SDA,总线需要两个上拉电阻,阻值一般取4.7K,一颗接在SCL另一颗接在SDA,分别对时钟线和数据线进行上拉

3.主机和从机SCL,SDA均使用开漏输出

4.数据通信过程

1.起始位:在SCL高电压时,向SDA发送下降沿

2.寻址:主机向总线发送从机的地址,地址有7位和10位(R/W#位-用来填写数据传输的方向,R/W#=0-向从机写数据,R/W#=0-从从机读数据),从机发送(释放SDA后把SDA拉低)Ack表示寻址成功,没有从机发送信号,称为NAK表示不应答

出现NAK的原因

1.地址填错,要寻址的从机不存在

2.要寻址从机正忙,没来得及恢复ACK

3.从机故障

3.数据传输:I2C以字节为单位传输数据,每次可以传输多个字节,每读一个字节,发送一个ACK

1.写:主机发送,从机接收

2.读,从机发送,主机接收

4.停止位:当SCL高电压时,向SDA发送上升沿

5.总线模式

1.标准模式(Sm),最大通信速率<=100Kbps,每秒钟传输10万位

2.快速模式(Fm),最大通信速率<=400Kbps,每秒钟传输40万位

3.快速增强模式(Fm+),最大通信速率<=1Mbps,每秒钟传输100万位

4.高速模式(HSm),最大通信速率<=3.4Mbps,每秒钟传输340万位

5.超快模式(UFm),最大通信速率<=5Mbps,每秒钟传输500万位

6.在快速模式下可以设置时钟信号占空比(2/1低电压占2份高电压占1份和16/9低电压占16份高电压占9份)

7.库函数

1.HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);:向从机写数据

参数

1.I2C_HandleTypeDef *hi2c,:I2C句柄的指针

2.uint16_t DevAddress:填写从机地址

3.uint8_t *pData:填写要发送的数据

4.uint16_t Size:填写要发送数据的数量,以字节为单位

5.uint32_t Timeout:用来填写超时时间,单位是毫秒

6.返回值:用于返回结果(成功还是失败)

2.HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);:从从机读数据

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询