【STM32】UART串口通讯学习

零、前言:

两天看完这本书:

脑子里一堆一堆的知识.....睡一觉翻几个身,再到公司,成了一堆的浆糊...不行,我得做个实打实的东西,通过实践去理解。

上次点亮的STM32开发板的LED灯,算是一个脚指头踏入STM32中。这次我想做一个串口通讯,用一根RS-232-usb线,将主板和电脑相连,板子能够接受我电脑发送的数据,并回复我得发送,本次实验就算成功。

一、UART:

(这篇博客介绍的不错:https://blog.csdn.net/junyeer/article/details/46761853

(摘自百度百科,让我理解了经常再串口通讯工具中见到的com字样)

UART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件。

UART是通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。 
而RS232、RS449、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。
实际上是属于通信网络中的实体层(Physical Layer)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的资料链接层(Data Link Layer)的概念。 
COM是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。所以,现在PC机的COM均为RS232。
若配有多个异步串行通信口,则分别称为COM1、COM2... 。

UART是一种异步传输接口,不需要时钟线,通过起始位和停止位及波特率进行数据识别。

1.接口  
    UART仅使用两条线TXDRXD用于数据的发和收。

2.数据格式
    1)起始位
    数据线空闲状态为高电平,要发送数据时将其拉低一个时钟周期表示起始位。
    2)数据位
    使用校验位时,数据位可以有5~8位;如果不使用校验位,数据位可以达9位。
    3)校验位
    奇偶校验,保证包括校验位和数据位在内的所有位中1的个数为奇数或偶数。
    4)停止位
    为了表示数据包的结束,发送端需要将信号线从低电平变为高电平,并至少保持2个时钟周期。
3.优缺点
    1)优点
    只使用两条信号线;
    不需要时钟信号;
    有校验位进行错误检测;
    2)缺点
    传输速率比较低。


4.URAT在计算机中的运用

UART是计算机中串行通信端口的关键部分。在计算机中,UART相连于产生兼容RS232规范信号的电路。RS232标准定义逻辑“1”信号相对于地为-3到-15伏,而逻辑“0”相对于地为+3到+15伏。所以,当一个微控制器中的UART相连于PC时,它需要一个RS232驱动器来转换电平。

Uart这里指的是TTL电平的串口;RS232指的是RS232电平的串口。

TTL电平是5V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平。

Uart串口的RXD、TXD等一般直接与处理器芯片的引脚相连,而RS232串口的RXD、TXD等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。

我们平时所用的电脑的串口就是RS232的,当我们在做电路工作时,应该注意下外设的串口是Uart类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),可不能盲目地将两串口相连。

5.对比SPI、I2C、UART、CAN:嵌入式系统中的总线以及接口

SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输。

而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART速度比上面两者者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡。

CAN 通讯距离最大是10 公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40 米)。
CAN 总线上的节点数可达110 个。通信介质可在双绞线,同轴电缆,光纤中选择。
CAN 采用非破坏性的总线仲裁技术,当多个节点同时发送数据时,优先级低的节点会主动退出发送,高优先级的节点可继续发送,节省总线仲裁时间。
CAN 是多主方式工作,网上的任一节点均可在任意时刻主动地向网络上其他节点发送信息。
CAN 采用报文识别符识别网络上的节点,从而把节点分成不同的优先级,高优先级的节点享有传送报文的优先权。报文是短帧结构,短的传送时间使其受干扰概率低,CAN 有很好的效验机制,这些都保证了CAN 通信的可靠性。
————————————————
版权声明:本文为CSDN博主「HUST_Miao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010183728/article/details/81984433

二、查看芯片手册以及电路图,找到UART的接口

三、配置串口 通过STM32CubeMX

将CPU的引脚配置相应的串口(它不想GPIO是通用的IO引脚)

更新代码,下载到本地。先连接上板子,看能否烧录程序,再验证刚才配置的串口PC能否识别到。

white rx     green tx    black gnd

四、编程思路

  1. 使能 RX和 TX 引脚 GPIO时钟和 USART时钟;
  2. 初始化 GPIO,并将 GPIO复用到 USART上;
  3. 配置 USART 参数;
  4. 配置中断控制器并使能 USART接收中断;
  5. 使能 USART;
  6. 在 USART接收中断服务函数实现数据接收和发送。

 ----------------------------

MD,搞了一天的串口,看了无数的博客,代码和CubeMX自动生成的都不一样啊,没写出来,感觉与原理都理解了,就是做不出功能,啊烦啊

发布了89 篇原创文章 · 获赞 68 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zDavid_2018/article/details/103307289