stm32usart通信接口 1.目的将一个设备的数据传输到另一个设备扩展硬件系统2.通信协议指定通信的规则通信双方按照协议规则进行数据收发1.全双工双方能够同时进行双向通信一班有两根通信线一根发送一根接收2.单工只能从一个设备到另一个设备3.时钟特性接收方可以在时钟信号的指引下进行采样无时钟线需要约定一个频率异步通信还需要加帧头和帧尾进行采样位置对齐4.电平特性1.单端引脚高低电平都是对GND的电压差所以通信双方必须共地把GND接在一起3.串口通信单片机的串口可以使单片机与单片机单片机与电脑与各种模块互相通信4.串口模块1.USB转串口1.搭载了可以把串口协议转换为USB协议的CH340芯片实现单片机与电脑的通信2.陀螺仪1.可以测量角速度加速度这些姿态参数2.左右各有4个引脚一边是串口另一边是I2C3.蓝牙串口模块1.模块中的芯片可以和手机互联5.硬件电路1.TX发送RX接收2.TX,RX需交叉连接3.当只需单向数据传输时可以只接一根通信线4.当电平标准不一致时需要加电平转换芯片6.电平标准1.电平标准是数据1和0的表达式是传输线缆中认为规定的电压与数据的关系2.常用电平标准1.TTL:3.3或5为10伏表示02.RS232:-3--15为13-15为03.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.5MBits3.可配置数据位长度8/9停止位长度0.5/1.5/24.可选校验位无校验/奇校验/偶校验5.支持同步模式硬件流控制DMA智能卡IrDA,LIN9.电路示意图1.TDR和RDR共用一个地址2.nRTS是输出脚nCTS是输入脚n意思是低电平有效接线方法1.找另一个支持流控的串口TX接到这个串口RXRTS要输出一个能不能接收的反馈信号接到对方的CTS能接收时RTS就置低电平请求对方发送对方CTS接收到之后就可以一直发处理不过来时RTS就会置高电平对方CTS接收到之后就会暂停发送知道接收数据寄存器被读走RTS置低电平新的数据才会继续发送2.CTS和RTS要交叉连接3.SCLK是用于产生同步的时钟信号配合发送移位寄存器输出发送寄存器没移位一次同步时钟电平就跳变一个周期只支持输出不支持输入用途1.兼容别的通信协议2.做自适应波特率4.唤醒单元1.作用实现串口挂载多设备发送指定地址时此设备唤醒开始工作5.中断输出控制配置中断是否能通向NVIC1.中断申请位状态寄存器的各种标志位TXE发射寄存器空RNXE接收寄存器非空用于判断发送状态和接收状态6.波特率发生器分频器APB时钟进行分频得到发送和接收移位的时钟1.时钟输入fPCLKxx1或2USART挂载在APB272M其他的USART挂载在APB136M2.进行分频除一个USARTDIV的分频系数分频完成后再除以16得到发送器和接收器时钟通向控制部分3.TE为1发送器失能发送的波特率就有效RE为1接收器使能接收部分的波特率就有效10.基本结构图1.寄存器往右移低位先行2.数据由数据寄存器转到移位寄存器时会置一个TXE标志位判断标志位就可以知道是不是可以写下一个数据3.写入DR寄存器时数据走上面这条路进行发送读取时走下面这条路进行接收11.数据帧再程序中配置8位字长和9位字长数据位长度进行波形对比1.stm32的串口可以配置停止位长度为0.511.52四种四种参数的区别是停止位市场不一样2.起始位侦测1.当输入电路侦测到一个数据起始位后就会以波特率的频率连续采样一帧数据同时从起始位开始采样位置就要对齐到位的正中间第一位对齐后面肯定对齐2.采样时钟会以波特率16倍频率进行采样1位的时间进行16次采样3.开始置1采到0之后证明出现下降沿4.数据采样1.从1-16是一个数据位时间的长度在1个数据位有16个采样时钟2.数据采样过程判定标准为21两次以上为1返回1两次以上为0返回03.波特率发生器分频器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则自动清除若没读取则手动清除