学习STM32单片机,绕不开的串口


本文章主要是说明串口的重要性,用来调试程序很方便。
串口,即串行接口(Serial Interface),是一种用于在设备之间进行数据传输的通信接口。它逐位传输数据,一次只传输一个比特,这种传输方式所需的传输线较少,适合长距离通信和一些对线路成本敏感的应用场景。以下为你详细介绍:
分类
异步串口(UART)
工作原理:不需要时钟信号来同步发送方和接收方,而是通过约定好的波特率(每秒传输的比特数)来协调数据传输。数据以帧为单位进行传输,每帧包含起始位、数据位、奇偶校验位(可选)和停止位。
应用场景:在嵌入式系统中广泛应用,如单片机与传感器、蓝牙模块、计算机等设备之间的通信。常见的波特率有 9600、115200 等。
同步串口
工作原理:使用一个时钟信号来同步发送方和接收方的操作,确保数据的准确传输。时钟信号可以由发送方提供,也可以由外部时钟源提供。同步串口通常用于高速数据传输,能够实现更高的数据传输速率。
应用场景:常用于一些对数据传输速率和同步性要求较高的场景,如 SD 卡接口、SPI(串行外设接口)、I²C(集成电路总线)等。
本文章主要是说明串口的重要性,用来调试程序很方便。
本文介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法;之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应速度。
瑞萨RZ/G2L的串口简称SCI,全称Serial Communication Interface。RZ/G2L有两种串口,一种带FIFO叫SCIFA,另一种不带FIFO叫SCIg。
本文给介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法;之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应速度。
本节我们对CKS32F4xx系列的DMA进行介绍,同时利用DMA对串口数据进行传输。
嵌入式开发中,UART串口是最常见的一种通信接口,你知道为啥串口这么常见吗?本文就带你深入了解串口最底层的本质内容。
说在前面
码代码的应该学数据结构都学过队列。环形队列是队列的一种特殊形式,应用挺广泛的。因为有太多文章关于这方面的内容,理论知识可以看别人的,下面写得挺好的:STM32进阶之串口环形缓冲区实现。
代码实现
环形队列数据结构
typedef struct ringBuff{ unsigned int in; //写入的位置 unsigned int out; //读出的位置 unsigned char buffer[RING_BUFF_SIZE]; //数据域 }stRingBuff;
写一字节数据到队列
RX系列MCU UART空闲中断的软件实现,对于RX系列MCU,为了提高运行效率,减少CPU的占用,UART的数据接收往往和DMA功能一起使用,这样可以无需CPU的介入即可完成UART接收寄存器的数据向指定的接收缓存区的数据传送。
DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。
使能UART串口中断之后,有接收到UART数据,进入中断,此时要清除RXNE接收标志位......