stm32usart通信接口

1.目的:将一个设备的数据传输到另一个设备,扩展硬件系统

2.通信协议:指定通信的规则,通信双方按照协议规则进行数据收发

1.全双工:双方能够同时进行双向通信(一班有两根通信线,一根发送,一根接收)

2.单工:只能从一个设备到另一个设备

3.时钟特性:接收方可以在时钟信号的指引下进行采样,无时钟线需要约定一个频率(异步通信,还需要加帧头和帧尾,进行采样位置对齐)

4.电平特性:

1.单端:引脚高低电平都是对GND的电压差,所以通信双方必须共地(把GND接在一起)

3.串口通信:单片机的串口可以使单片机与单片机,单片机与电脑与各种模块互相通信

4.串口模块

1.USB转串口:

1.搭载了可以把串口协议转换为USB协议的CH340芯片,实现单片机与电脑的通信

2.陀螺仪

1.可以测量角速度,加速度这些姿态参数

2.左右各有4个引脚,一边是串口,另一边是I2C

3.蓝牙串口模块

1.模块中的芯片可以和手机互联

5.硬件电路

1.TX发送RX接收

2.TX,RX需交叉连接

3.当只需单向数据传输时,可以只接一根通信线

4.当电平标准不一致时,需要加电平转换芯片

6.电平标准

1.电平标准是数据1和0的表达式,是传输线缆中认为规定的电压与数据的关系

2.常用电平标准

1.TTL:+3.3或+5为1,0伏表示0

2.RS232:-3--15为1,+3-+15为0

3.RS485:两线压差+2-+6为1,-2--6为0(差分信号)

7.串口参数及时序

1.波特率:串口通信的速率

2.起始位:标志一个数据帧的开始,固定为低电平

3.数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

4.校验位:用于数据验证,根据数据位计算而来(奇校验在传输数据为末尾补1,保证1为奇数,接收方验证1的个数还是奇数,就认为数据没出错,偶校验同理)

5.停止位:用于数据帧间隔,固定为高电平

6.串口时序波形

8.usart简介

1.usart是stm32内部集成硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,可从tx发射,也可自动接收rx的数据帧拼接为一个字节数据,存放在数据寄存器里

2.自带波特率发生器,最高达4.5MBits

3.可配置数据位长度(8/9),停止位长度(0.5/1.5/2)

4.可选校验位(无校验/奇校验/偶校验)

5.支持同步模式,硬件流控制,DMA,智能卡,IrDA,LIN

9.电路示意图

1.TDR和RDR共用一个地址

2.nRTS是输出脚,nCTS是输入脚(n意思是低电平有效)

接线方法:

1.找另一个支持流控的串口,TX接到这个串口RX,RTS要输出一个能不能接收的反馈信号,接到对方的CTS,能接收时,RTS就置低电平,请求对方发送,对方CTS接收到之后,就可以一直发,处理不过来时,RTS就会置高电平,对方CTS接收到之后,就会暂停发送,知道接收数据寄存器被读走,RTS置低电平,新的数据才会继续发送

2.CTS和RTS要交叉连接

3.SCLK是用于产生同步的时钟信号,配合发送移位寄存器输出,发送寄存器没移位一次,同步时钟电平就跳变一个周期(只支持输出,不支持输入)

用途

1.兼容别的通信协议

2.做自适应波特率

4.唤醒单元

1.作用:实现串口挂载多设备,发送指定地址时,此设备唤醒开始工作

5.中断输出控制:配置中断是否能通向NVIC

1.中断申请位:状态寄存器的各种标志位(TXE发射寄存器空,RNXE接收寄存器非空,用于判断发送状态和接收状态)

6.波特率发生器(分频器):APB时钟进行分频,得到发送和接收移位的时钟

1.时钟输入:fPCLKx(x=1或2,USART挂载在APB2(72M)其他的USART挂载在APB1(36M))

2.进行分频:除一个USARTDIV的分频系数,分频完成后,再除以16,得到发送器和接收器时钟,通向控制部分

3.TE为1,发送器失能,发送的波特率就有效,RE为1,接收器使能,接收部分的波特率就有效

10.基本结构图

1.寄存器往右移,低位先行

2.数据由数据寄存器转到移位寄存器时,会置一个TXE标志位,判断标志位就可以知道是不是可以写下一个数据

3.写入DR寄存器时数据走上面这条路,进行发送,读取时走下面这条路,进行接收

11.数据帧

再程序中配置8位字长和9位字长(数据位长度)进行波形对比

1.stm32的串口可以配置停止位长度为0.5,1,1.5,2四种,四种参数的区别是停止位市场不一样

2.起始位侦测

1.当输入电路侦测到一个数据起始位后,就会以波特率的频率,连续采样一帧数据,同时,从起始位开始,采样位置就要对齐到位的正中间(第一位对齐,后面肯定对齐)

2.采样时钟会以波特率16倍频率进行采样(1位的时间进行16次采样)

3.开始置1,采到0之后证明出现下降沿

4.数据采样

1.从1-16,是一个数据位时间的长度(在1个数据位,有16个采样时钟)

2.数据采样过程判定标准为2:1(两次以上为1返回1,两次以上为0返回0)

3.波特率发生器(分频器)

1.发送器和接收器的波特率有波特率寄存器BRR里的DIV决定

2.计算公式:波特率=fPCLK2/1/(16*DIV)

12.库函数

1.void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);

void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);:用于配置同步时钟输出,包括时钟是否要输出,时钟的极性相位等参数

2.void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);:可开启USART到DMA的触发通道

3.void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);:发送和接收数据

13.串口接收有查询和中断两种方法

1.查询

1.流程:在主函数里不断判断RXNE标志位,置1则说明收到数据,在读取DR寄存器即可

2.中断

1.流程:开启RXNE标志位到NVIC输出

2.在if函数内若读取DR则自动清除,若没读取则手动清除

相关推荐
制冷技术咨询与服务3 小时前
某纯电牵引车整车CAN网络
网络·汽车·can·某纯电牵引车整车can网络
zhengqweasd3 小时前
Linux网络(一):服务器数据包从网卡到应用程序,完整收包流程详解
linux·服务器·网络
脚踏实地,坚持不懈!3 小时前
Linux 6.18.7 内存分配与回收 —— 代码梳理
linux·运维·网络
自小吃多3 小时前
高云FPGA ModelSim中的仿真
笔记·嵌入式硬件·fpga开发
小刘在重生~4 小时前
Java 异常体系完整笔记
java·笔记·python
泡泡鱼(敲代码中)4 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm
云边云科技_云网融合5 小时前
零售餐饮门店网络搭建:POS 交易稳定保障、IoT 设备联网运维、门店带宽优化、多终端并发适配
网络·物联网·零售
luj_17686 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法
luj_17686 小时前
中锋卡位与开放线博弈
c语言·开发语言·网络·经验分享·算法
祁白_6 小时前
防御引擎绕过方法
笔记·web安全·php·防御引擎