当前位置: 首页 > news >正文

STM32 UART通信协议 基础知识

        通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议。

        在通信领域中,有两种数据通信方式:并行通信串行通信。串口的数据传输是以串行方式进行的。串口在数据通信中,一次只能传输一个比特的数据。串行数据的传输速度用bps或波特率来描述每秒的二进制位数,单位为bps(bit per second)也称为波特率。

        同步通信和异步通信是指在通信过程中数据传输的方式。

        同步通信是指发送方和接收方在传输数据时需要同步进行,也就是说,发送方必须等待接收方确认后才能继续发送数据,而接收方必须等待数据到达后才能继续处理。这种通信方式可以保证数据的准确性和可靠性,但是会降低通信效率。

A———数据总线————B

A————CLK—————B

A————\bar{cs}——————B

        cs上面加一个横线代表 低电平有效。

        当A给B传输的时候,A把 \bar{cs} 电平拉低,B看到电平被拉低了,就知道A要给B传数据了。此时A就会在数据总线把数据发送出来,但是B如何判断A发送的这么多信息中哪些是数据呢?A用CLK信号线中告诉他,B只需要在CLK中的上升沿取值就可以了,在上升沿取到的值就是需要的数据。简而言之,就是收发双方有一个同步信号线,把他们同步在一起。

        USART中的S就是同步通信但是用的很少,常常直接成为UART。

        异步通信是指发送方和接收方可以独立地进行数据传输,不需要等待对方的确认或回应。发送方可以继续发送数据,而接收方可以在数据到达后再进行处理。这种通信方式可以提高通信效率,但是由于没有同步的保证,数据的准确性和可靠性可能会受到影响。

        在异步通信中没有cs也没有CLK,只有一个数据总线。

A.RX—————B.TX

A.TX—————B.RX

A———GND———B

TX:发送,RX:接收,GND:接地。

空闲状态:高电平

起始位:1位的起始位,从空闲状态转换为起始位是靠一个下降沿产生的。

数据位:5~8位的数据位连同校验位

奇偶校验:数据位连同校验位中,“1”的数目等于奇数,则为奇校验;

我们常用8n1,意思是有8位数据位,没有效验码,1位停止位。

        当起始位突然从高电平变到了低电平时,B就是知道A要开始传输了,拉低电平的1个bit后,A就开始发送数据,发送完数据位后,双方规定一下有没有奇偶校验,有的话是奇校验还是偶校验,判断数据有没有错误,然后发送停止位,抬高电平,返回空闲状态。

        这个数据一般用5~8位的数据位,更多的时候用8个bit的数据位,因为c语言中的char正好是8位。并且双方要约定好,传输8位就是8位,不能改变。

        在实际应用中,通常会根据具体情况选择同步通信或异步通信。例如,对于实时性要求较高的应用,可能会选择同步通信,而对于数据量较大或实时性要求不高的应用,可能会选择异步通信。

        全双工是指通信双方可以同时发送和接收数据的一种通信方式。在全双工通信中,通信双方可以同时发送和接收数据,而不会出现发送和接收数据冲突的问题。这种通信方式可以实现更高效的数据传输和更顺畅的通信。常见的全双工通信方式有电话通信、视频会议等。

 bsp_uart.c

#include "bsp_uart.h"void Uart1_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   //TXGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;   //TXGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);
}

 bsp_uart.h

#ifndef __BSP_UART_H__
#define __BSP_UART_H__#include <stm32f10x.h>void Uart1_Configuration(void);#endif

     

http://www.lryc.cn/news/176555.html

相关文章:

  • nginx部署vue前端项目,访问报错500 Internal Server Error
  • @Excel注解
  • 解释器模式简介
  • 图像识别技术在不同场景下有哪些应用?
  • 阿里巴巴OceanBase介绍
  • leetcode 2560. 打家劫舍 IV
  • 正点原子lwIP学习笔记——Socket接口TCP实验
  • 【Flink】
  • 大数据Flink(九十一):Array Expansion(数组列转行)和Table Function(自定义列转行)
  • 华为云云耀云服务器L实例评测|华为云云耀云服务器L实例CentOS的存储和备份策略
  • Web自动化测试 —— 如何进行Selenium页面数据及元素交互?啊哈
  • 点云从入门到精通技术详解100篇-基于全景图的室内场景点云补全方法(续)
  • Debezium系列之:采集数据库数据实现对表指定的字段进行加密,下游实现对表加密后的字段进行解密
  • Win10 cmd如何试用tar命令压缩和解压文件夹
  • 最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt+MJ以图生图+思维导图生成
  • AI绘画普及课【二】图生图
  • C语言 数据类型
  • 瑞芯微RK3568:Debian系统如何安装Docker
  • 联邦学习-Tensorflow实现联邦模型AlexNet on CIFAR-10
  • 嵌入式Linux应用开发-文件 IO
  • 【C++】多态,从使用到底层。
  • uvm白皮书练习_ch2_ch221只有driver的验证平台之*2.2.1 最简单的验证平台
  • 服务断路器_Resilience4j超时降级
  • 【知识点随笔分析】我看看谁还不会用CURL命令
  • ICCV 2023|Occ2Net,一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法...
  • leetcode - 14. Longest Common Prefix
  • MySQL-查询语句语法(DQL)结构(查询操作 一)
  • SWAT-MODFLOW地表水与地下水耦合
  • 工地临时用电之智慧用电:全方位保障用电安全
  • JumpServer开源堡垒机与爱可生云树数据库完成兼容性认证