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则自动清除,若没读取则手动清除
