STM32笔记(九)---串口通信

串口通信(USART)

一、 串口通信协议简介
1-1 概念
  • 物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。
  • 协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。

简单来说物理层规定我们用嘴巴还是用肢体来交流,协议层则规定我们用中文还是英文来交流。

1-2 常用标准
①.RS232标准

RS232标准串口通讯结构图

  • RS232标准串口主要用于工业设备直接通信

  • 电平转换芯片一般有MAX3232,SP3232

    DB9 标准的公头及母头接法

RS-232 与 TTL 电平区别(232趋向高容错)

②.USB转串口(USB2TTL)

USB转串口通讯结构图

  • USB转串口主要用于设备跟电脑通信
  • 电平转换芯片一般有CH340、PL2303、CP2102、FT232
  • 使用的时候电脑端需要安装电平转换芯片的驱动
③.原生的串口到串口 (TTL2TTL)

原生的串口到串口结构图

  • 原生的串口通信主要是控制器跟串口的设备或者传感器通信,不需要经过电平转换芯片来转换电平,直接就用TTL电平通信
  • GPS模块、GSM模块、串口转WIFI模块、HC04蓝牙模块
1-3 串口数据包的基本组成

image-20200625162144075

  • 起始位:由1个逻辑 0 的数据位表示

  • 结束位:由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示

  • 有效数据:在起始位后紧接着的就是有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 、9位长

  • 校验位:可选,为的是数据的抗干扰性。

    校验方法分为:

    1-奇校验(odd)、 2-偶校验(even)

    3-0 校验(space)、 4-校验(mark)

    5-无校验(noparity)

    • 奇校验 (odd) :有效数据和校验位中“ 1”的个数为奇数

      比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“ 1”,为达到奇校验效果,校验位为“ 1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位

    • 偶校验 (even) :有效数据和校验位中“ 1”的个数为偶数

      比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“ 1”,为达到偶校验效果,校验位为“ 0”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位

    • 0 校验:不管有效数据中的内容是什么,校验位总为“ 0”。

    • 1 校验: 校验位总为“ 1”。

    • 无校验: 数据包中不包含校验位。

二、 STM32串口功能框图讲解
2-1 引脚

TX:数据发送

RX:数据接收

SCLK :时钟,仅同步通信时使用

nRTS :请求发送(Request To Send)

nCTS :允许发送(Clear To Send)

2-2 数据寄存器
  • 数据寄存器 —USART_DR :9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。

  • 字长配置:USART_CR1:M,0:8bit,1:9bit

  • 停止位配置:USART_CR2:STOP

  • 奇偶验证位:USART_CR1:PCE(使能校验控制)、PS(奇偶校验选择)、PEIE(PE中断使能)

  • USART_SR :PE(奇偶校验反映位)

2-2-1 如何通过串口实现发送接收?

​ 1、 USART_CR1:UE、TE、RE均配置为开启

​ 2、 以发送为例,发送过程涉及2个寄存器的值改变(发送数据寄存器----TDR)

2、 TDR发送数据后状态寄存器(USART_SR)中的TXE(empty)位置1,若TXEIE=1则产生中断,不代表数据发送成功,此时TC位置1才表示发送成功,若此时TCIE=1则产生中断(相应的读取时UE、RE使能情况下,读取数据进入接收移位寄存器后传到RDR,RXNE置1,用户可从DR寄存器中读数据,若RXNEIE=1,则产生中断)、

  • TXEIE/TCIE/RXNEIE均位于CR1寄存器

image-20200626000318680

​ USART_SR:TXE,Transmit data register empty

2-3 控制器

2-4 波特率
  • 每秒钟要发送多少数据(多少个二进制位)

  • 配置单位:USART_BRR:波特率寄存器

  • 计算公式:

    例:**USART:**USART1,时钟为72M **波特率:**115200

    最小精度:1/16(2^4)

三、 代码
3-1 固件库相关配置结构体
  • USART初始化结构体:USART_InitTypeDef

    typedef struct
    {
         
      uint32_t USART_BaudRate;      //波特率 BRR
      uint16_t USART_WordLength;    //字长 CR1_M
      uint16_t USART_StopBits;      //停止位 CR2_STOP
      uint16_t USART_Parity;        //校验控制 CR1_PCE、CR1_PS
      uint16_t USART_Mode;          //模式选择CR1_TE、CR1_RE
      // 硬件流选择 CR3_CTSE、CR3_RTSE
      uint16_t USART_HardwareFlowControl;
    } USART_InitTypeDef;
    
  • USART同步时钟初始化结构体:USART_ClockInitTypeDef

    typedef struct
    {
         
      uint16_t USART_Clock;      // 同步时钟 CR2_CLKEN
      uint16_t USART_CPOL;       // 极性 CR2_CPOL
      uint16_t USART_CPHA;       // 相位 CR2_CPHA
      uint16_t USART_LastBit;    //最后一个位的时钟脉冲 CR2_LBC
    } USART_ClockInitTypeDef;
    
3-2 固件库相关配置函数
  • 串口初始化函数

    void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
    
  • 中断配置函数:

    void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
    
  • 串口使能函数:

    void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
    
  • 数据发送函数

    void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
    
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值