1、串口通信简介

通信接口的两种方式:

并行通信

-传输原理:数据各个位同时传输。

-优点:速度快

-缺点:占用引脚资源多

串行通信

-传输原理:数据按位顺序传输。

-优点:占用引脚资源少

-缺点:速度相对较慢

目前使用最多的还是串行通信,即便速度相对较慢,所以下面都是讲解串行通信。

①串口通信分类:

串口通信按照数据传送方向,分为:

(1)单工:数据传输只支持数据在一个方向上传输

(2)半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信

(3)全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力

②STM32的串行通信的方式

同步通信:带时钟同步信号传输。

异步通信:不带时钟同步信号。

注意:一般所说的串口是USART(通用同步异步收发器),同步异步都支持的。STM32F10x系列芯片,包含3个USART和2个UART

2、STM32的串口通信原理

串口通信是单片机最基本的功能,很多传感器模块与单片机的连接都会用到串口功能。串口通信,顾名思义就是将一整条的内容,切成一“串”个体来发送或接收。发送的核心思想是:将字符串中的一个字符写到一个寄存器中(此寄存器只能存一个字符),写入后会自动通过串口发送,发送结束再写入下一个字符。接收时会直接装入单片机缓冲区的一个字符型数组中,由程序依次读这个数组。

上图是串口数据发送接收的过程做一个简单的图示。收发控制器根据寄存器配置,对数据存储转移部分的移位寄存器进行控制。当需要发送数据时,内核或DMA外设把数据从内存(变量)写入到发送数据寄存器TDR后,发送控制器将自动把数据从TDR加载到发送移位寄存器,然后通过串口线TX,把数据一位一位地发送出去,在数据从TDR转移到移位寄存器时,会产生发送寄存器TDR已空事件TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC,这些事件可以在状态寄存器中查询到。而接收数据则是一个逆过程,数据从串口线RX一位一位地输入到接收移位寄存器,然后自动地转移到接收数据寄存器RDR,最后用内核指令或DMA读取到内存(变量)中。发送完毕或者接收完毕都会有相应的状态或者事件,我们写代码时就可以通过这些事件来判断是否接收或者发送完毕,然后做出下一步。

3、常用的串口相关寄存器

①USART_SR状态寄存器

这个寄存器用到了10个位,也就代表有10中状态标志,每个标志都可以作为中断的标志位,库函数的定义如下:

#define USART_IT_PE             ((uint16_t)0x0028)
#define USART_IT_TXE ((uint16_t)0x0727)
#define USART_IT_TC ((uint16_t)0x0626)
#define USART_IT_RXNE ((uint16_t)0x0525)
#define USART_IT_IDLE ((uint16_t)0x0424)
#define USART_IT_LBD ((uint16_t)0x0846)
#define USART_IT_CTS ((uint16_t)0x096A)
#define USART_IT_ORE ((uint16_t)0x0360)
#define USART_IT_NE ((uint16_t)0x0260)
#define USART_IT_FE ((uint16_t)0x0160)

②USART_DR数据寄存器

发送数据寄存器是TDR,接收数据寄存器是RDR,都只用了前8位,发送和接收用到以下两个函数:

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

4、串口配置的一般步骤

  1. 串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();

  2. GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP

  3. 串口参数初始化:USART_Init();

  4. 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

    NVIC_Init();

    USART_ITConfig();

  5. 使能串口:USART_Cmd();

  6. 编写中断处理函数:USARTx_IRQHandler();

  7. 串口数据收发:

    void USART_SendData();//发送数据到串口,DR

    uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

  8. 串口传输状态获取:

    FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

    void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

欢迎关注我的公众号:物联网技术猿

我可以帮你免费下载csdn积分资料!!

STM32 串口通信基础知识的更多相关文章

  1. LABVIEW串口通信基础

    写这一篇串口通信基础的契机是最近刚刚完成一个温箱的仪器控制程序,LABVIEW通过串口与温箱单片机通讯,我打算将过程中遇到的一些问题和收获列在这里方便有需求的网友比对.寻找答案. 学LABVIEW时间 ...

  2. 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章       STM32H7的USART串口基础知识和 ...

  3. stm32串口之存储与解析

    最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令:秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中. 定义数组 ...

  4. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

  5. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C /************************************************************************** ...

  6. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  7. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

  8. stm32串口接收中断协议解析

    借鉴了文章:<stm32串口中断接收方式详细比较> 文章地址:http://blog.csdn.net/kevinhg/article/details/40186169 串口的配置这里不做 ...

  9. Stm32串口通信(USART)

    Stm32串口通信(UART) 串口通信的分类 串口通信三种传递方式 串口通信的通信方式 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束.其每帧的格式如下: 在一帧格 ...

随机推荐

  1. Vue+ElementUI 导航组件

    创建导航页组件 在components目录下新建一个navigation目录,在Navi目录中新建一个名为Navi.vue的组件.至此我们的目录应该是如下图所示: 然后我们修改main.js文件,修改 ...

  2. GCN 简单numpy实现

    `#参考:https://blog.csdn.net/weixin_42052081/article/details/89108966 import numpy as np import networ ...

  3. Windows远程连接其他主机

    一.远程主机开启允许被远程连接 1. 右键计算机 --> 属性 --> 远程设置 2. 默认是不允许远程桌面的, 在这里我们勾选开启 3. 远程主机设置完成 二.客户机连接设置 1. wi ...

  4. PHP扩展使用-GD

    一.相关函数 1. 获取信息 gd_info() #查看当前系统环境gd库支持的图片格式 getimagesize(imagefile) #获取图像大小,非GD库函数 imagex(imagefile ...

  5. Ubuntu 18.04安装 CUDA 10.1 、cuDNN 7.6.5、PyTorch1.3

    转载请注明出处  BooTurbo https://www.cnblogs.com/booturbo/p/11834661.html 安装平台及环境 CPU:i9-9900k桌面级 GPU:RTX 2 ...

  6. Virtualbox 修改硬盘的序列号等信息 例

    Virtualbox 修改硬盘的序列号等信息 例 http://blog.csdn.net/eidolon8/article/details/42709365 原创 2015年01月14日 14:24 ...

  7. 【转载】Makedown数学公式语法

    Typora数学模块 行间表达式快捷键($$) 点击"段落"->"公式块" 快捷键Ctrl+Shift+m "$$"+回车 行内表达式 ...

  8. 创建war类型项目(六)

    1. 创建maven project时选择packaging为war: 2. 在webapp文件夹下新建META-INF和WEB-INF/web.xml web.xml模板 <?xml vers ...

  9. Netty粘包问题(六)

    netty使用tcp/ip协议传输数据,而tcp/ip协议是类似水流一样的数据传输方法.多次访问的时候可能出现粘包的问题,解决这种问题的方式有如下几种. 一.定长数据流 二.特殊结束符 三.

  10. 【PL/SQL】PLSQL Developer注册码

    [12.0.7] product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number:226959 password: xs374ca