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);:从从机读数据