串口

串口,即串行接口(Serial Interface),是一种用于在设备之间进行数据传输的通信接口。它逐位传输数据,一次只传输一个比特,这种传输方式所需的传输线较少,适合长距离通信和一些对线路成本敏感的应用场景。以下为你详细介绍:

分类

异步串口(UART)

  • 工作原理:不需要时钟信号来同步发送方和接收方,而是通过约定好的波特率(每秒传输的比特数)来协调数据传输。数据以帧为单位进行传输,每帧包含起始位、数据位、奇偶校验位(可选)和停止位。

  • 应用场景:在嵌入式系统中广泛应用,如单片机与传感器、蓝牙模块、计算机等设备之间的通信。常见的波特率有 9600、115200 等。

同步串口

  • 工作原理:使用一个时钟信号来同步发送方和接收方的操作,确保数据的准确传输。时钟信号可以由发送方提供,也可以由外部时钟源提供。同步串口通常用于高速数据传输,能够实现更高的数据传输速率。

  • 应用场景:常用于一些对数据传输速率和同步性要求较高的场景,如 SD 卡接口、SPI(串行外设接口)、I²C(集成电路总线)等。

干货 | STM32串口发送数据和接收数据方式总结

由 cathy 提交于

<strong><font color="#004a85">串口发送数据</font> </strong>

<strong><font color="red">1、串口发送数据最直接的方式就是标准调用库函数 。</font> </strong>

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

第一个参数是发送的串口号,第二个参数是要发送的数据,但是用过的朋友应该觉得不好用,一次只能发送单个字符,所以我们有必要根据这个函数加以扩展:
<pre>void Send_data(u8 *s)
{
while(*s!='\0')
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);
USART_SendData(USART1,*s);
s++;
}
}</pre>

【妙招】一份 " IO口模拟串口 " 独门秘籍

由 cathy 提交于

<strong>1、聊一聊</strong>

好了,今天为大家带来几种IO口模拟串口"硬核"操作,相信大家对类似于串口这样的电平类通信会有新的认识。

<strong>2、IO模拟串口需求</strong>

"IO模拟UART"是作者大一加入学校创新团队老师出的第一道题目。毕竟当时专业知识不够,心里想:“实验室老师怎么这么变tai,有现成的串口不用,非得整个模拟串口”,接到这个题目一头雾水,于是上网各种找资料,最后基本实现了该功能,实现办法算是最初级的实现方式,不过确实给我开启了嵌入式的大门,所以今天也把这方面的东西分享给大家,希望对大家有帮助。

<strong><font color="#004a85">IO模拟串口需求</font> </strong>

● 很多小伙伴应该都了解到现在很多的高性能的MCU都有大量的串口外设,比如下图的stm32F103系列USART高达5个,然而在我们一般的项目中可能仅仅就使用了2个左右的样子,并且串口外设引脚还可以remap重新映射,这对于那些对串口资源需求量比较大的项目,或许带来了一些缓解的福音。

如何写一个健壮且高效的串口接收程序?

cathy /

学单片机的大概最先、最常写的通信程序应该就是串口程序了,但是如何写出一个健壮且高效的串口接收程序呢?接下来鱼鹰将根据多年的开发经验教你如何编写串口接收程序。

1、传入参数指针

2、互斥锁释放顺序

3、数据帧检查

4、串口空闲

5、通信吞吐量

为了更好的理解接下来的知识点,鱼鹰将设计一个串口框架,让道友心中有一个参考方向。

本篇重点在于解决如何写一个健壮、高效的串口接收数据,发送与接收处理过程略讲。

<strong><font color="#004a85">帧格式</font> </strong>

先聊聊帧格式,一般来说,一个数据帧有以下几部分内容:

万变不离其宗之单片机串口共性问题

由 cathy 提交于

[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为具有共性以及相对比较重要的点做了些梳理。

<strong>啥是串口?</strong>

首先这玩意儿分两种:

<ul data-tool="mdnice编辑器">
<li><strong>通用异步收发器(UART)</strong>是用于异步串行通信的一种物理层标准,其中数据格式和传输速度是可配置的。</li>
<li><strong>通用同步收发器(USART)<strong>是一种串行接口设备,可以对其进行编程以进行</strong>异步</strong>或<strong>同步</strong>通信。</li>
</ul>

<strong>数据格式</strong>

基于STM32的串口循环队列

由 cathy 提交于

先说串口,这个应该都知道吧!(不知道的童鞋,先把基本功学好)大部分单片机或者处理器都会带一个或者多个串口,方便进行数据的通信。

那么串口的循环队列是什么?这里以STM32的串口为例,进行解释说明。

假设串口一次只发一个数据,这倒是简单了,每次只对这一个数据进行判断,然后处理相关指令。但现实不会一直都这么美好,很多时候你收到的可能是一大串数据,你要先小心翼翼的把它们存好,然后再依次判断这里面有哪些指令要处理。

<center><img src="http://mouser.eetrend.com/files/2019-02/博客/100017812-60842-st1.png&quot; alt=“” width="600"></center>

假设你定义了一个30个元素的数组a[30],每次串口收到数据都往里面存,存的时候地址加一。这个操作很简单吧,应该是都会的。