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

12-串口外设

一、串口外设的基本概述

1、基本定义

串口通信,通过在通信双方之间以比特位(bit)的形式逐一发送或接收数据,实现了信息的有效传递。其通信方式不仅简单可靠,而且成本很低。

2、stm32的串口

 下面是两个MCU的数据交互,通过连接MCU的UART外设,实现数据通信交互

3、USART外设的基本概念

1.USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备

2.UART和USART的区别:

3.处理器和外部设备通信的两种方式:并行通信和串行通信

并行通信(多车道)

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

    -优点:速度快

    -缺点:占用引脚资源多

使用场景:要求数据传输快,如果外部RAM、LCD、Camera等

串行通信(单车道)

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

    -优点:占用引脚资源少

    -缺点:速度相对较慢

使用场景:要求占用引脚少,使用串口蓝牙、串口WIFI、SPIRFID卡、SPILCD屏等

4.串行通信按传送方向分:

a.单工:

           数据传输只支持数据在一个方向上传输(收音机、遥控器)

b.半双工:

           允许数据在两个方向上传输,但是,在某一时刻,只允许数

           据在一个方向上传输,它实际上是一种切换方向的单工通信;(对讲机)

c.全双工:

           允许数据同时在两个方向上传输,因此,全双工通信是两个

           单工通信方式的结合,它要求发送设备和接收设备都有独立

           的接收和发送能力。(电话机)

二、stm32串口--USART(习惯叫串口,串口为全双工通信)

1.串口信号分析:

TXD 发送数据 Transmit(tx) Data 简写形式 (TX  T  TD)

RXD 接受数据 Receive(rx) Data   简写形式 (RX  R  RD)

2.数据帧格式

传输一个字节,需要包括起始位(1位)、数据位(7、8、9位)、校验位(可选)、停止位(1位)

如:

3.奇偶检验位

        奇偶校验是一种校验代码传输正确性的方法,它根据被传输的一组二进制代码数位中1的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。在STM32的串口通信中,奇偶校验主要用于检测数据传输过程中的错误。如果接收端收到的数据中1的个数与约定的奇偶性不符,则认为发生了传输错误。虽然奇偶校验只能检测出部分误码(如1位误码),并且不能纠错,但由于其实现简单,仍得到了广泛使用。

虽然奇偶校验可以检测数据传输过程中的错误,实际使用过程一般不使用它。除非在一些工控产品中可以考虑使用。增加数据传输判断可靠性

4.流控(了解即可)

           数据在两个串口之间进行通讯的时候常常会出现丢失数据的现象,比如两台计算机或者是一台计算机和一个单片机之间进行通讯,当接收端的数据缓冲区已经满了,这个时候如果还有数据发送过来,因为接收端没有时间进行处理,那这样的数据就有可能会丢失。在工业现场或者其他领域,经常会遇到这种问题,本质原因是速度不匹配、处理能力不匹配。比如单片机的主频只有20M或30M,ARM的处理能力可能是200M,PC机的处理能力是几个G,这种处理能力的不匹配造成了传输的时候数据容易丢失。

        硬件流控就是来解决这个速度匹配的问题。它的基本含义非常简单,当接收端接收到的数据处理不过来时,就向发送端发送不再接收的信号,发送端接收到这个信号之后就会停止发送,直到收到可以继续发送的信号再继续发送。因此流控本身是可以控制数据传输的进度,进而防止数据丢失。

4.1硬件流控

  • RTS(Require To Send,发送请求)为输出信号
  • CTS(Clear To Send,发送允许)为输入信号

5.串行通信的传送速率

        串行通信的传送速率:在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送格式位的数目来表示,称之为波特率(band rate)。每秒传送一个格式位就是1波特。

bps:每秒传输多少比特位数据

9600bps:每秒传输9600位数据,波特率参考值,常见波特率:9600bps 115200bps

注意:两个MCU之间进行通信,数据帧格式及波特率必须是相同的,如果不同,则会出现数据传输异常。

波特率传输时有一定的误差,波特率值越高,误越大。这一点需要注意。

 

三、USART1配置流程

1、串口程序时,需要注意将stm32f4xx.h第127行25000000改为8000000,修改后,如下

  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

2、需要注意将system_stm32f4xx.c第254行25改为8,修改后,如下

#define PLL_M     8

3、理解电路原理图

PA9  ---- USART1_TX(发送端)

PA10 ---- USART1_RX(接收端)

下面是手机蓝牙控制开发板灯的源码

https://download.csdn.net/download/m0_63622771/90835799

四、串口软件的使用方法

1、安装驱动:CH340

2、安装软件:porthelper(单片机多功能调试助手-最新版本1.8.9-CSDN博客)

http://www.xdnf.cn/news/6231.html

相关文章:

  • Java死锁排查:线上救火实战指南
  • mac latex vscode 配置
  • 嵌入式开发学习日志(数据结构--单链表)Day20
  • [python] Python单例模式:__new__与线程安全解析
  • sqlilabs-right-Less-32(宽字节注入)
  • 自定义列甘特图,原生开发dhtmlxgantt根特图,根据数据生成只读根特图,页面展示html demo
  • 面试题-复合
  • JS,ES,TS三者什么区别
  • 【docker】--容器管理
  • GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)
  • 2025年Flutter初级工程师技能要求
  • fiftyone-数据库配置和config与app_config配置文件
  • 视频编解码学习十二之Android疑点
  • Git 用户名与邮箱配置全解析:精准配置——基于场景的参数选择
  • 关于并发编程AQS的学习
  • 为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
  • 什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
  • 电商平台自动化
  • 基于 Spring Boot 瑞吉外卖系统开发(十五)
  • 【MoveIt 2】使用 MoveIt 任务构造器(MoveIt Task Constructor)进行拾取和放置
  • Docker 常见问题及其解决方案
  • NLP的基本流程概述
  • uni-app vue3版本打包h5后 页面跳转报错(uni[e] is not a function)
  • 使用ECS搭建云上博客wordpress(ALMP)
  • 零基础用 Hexo + Matery 搭建博客|Github Pages 免费部署教程
  • [操作系统] 策略模式进行日志模块设计
  • OkHttp连接池
  • 5月13日日记
  • 《社交应用动态表情:RN与Flutter实战解码》
  • 场景以及八股复习篇