STM32之USART(串口)通信学习

1.通信接口

在开始通信之前,我们要了解什么是通信,通信就是将一个设备的数据传送到另一个设备

同时按照双方规定的协议即通信协议,指定通信规则通信双方按照规则进行数据的收发。

应用场景:单片机的串口可以使单片机与单片机、(单片机与电脑)、单片机与各式各样的模块互相通信。底下为单片机串口转USB接口,USB端口连接电脑,串口连接STM32.

2.USART通信电路模型

TX为发送数据,RX为接受数据。UART属于全双工可以同时进行收发数据,同时又属于异步,因为它们没有时钟线,通信双方约定好速率发送接受。

3.串口参数及时序

波特率:串口通信的速度。

起始位:数据帧的开始,固定为低电平。

数据位:有效的数据载荷,1为高电平,0为低电平,低位先行

校验位:用于数据验证,根据数据位计算得来。常见的有奇校验,偶校验,无校验。

停止位:数据停止,固定为高电平。

如下图所示左边:起始位-数据位-停止位

如下图所示右边:起始位-数据位-校验位-停止位

4.USART简介

USART为同步收发器,UART为异步收发器。要了解的是USART是STM32内部集成的一个硬件外设,可根据数据寄存器的一个字节自动生成数据帧时序,从TX引脚发送出去,同时自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。

自带波特率发生器,最高达4.5Mbits/s 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2) 可选校验位(无校验/奇校验/偶校验)

支持同步模式、硬件流控制(控制数据帧速度)、DMA(数据搬运)、智能卡、IrDA、LIN

STM32F103C8T6 USART资源: USART1(APB2)、 USART2(APB1)、 USART3(APB1).

下图为STM32中UART内部框图:主要的几个模块为发送数据寄存器TDR,发送移位寄存器,接受数据寄存器,接受移位寄存器,TX端口,RX端口,发送控制器,接受控制器,波特率发生器

5.USART基本结构

USART代码配置流程:

(1)开启时钟,把需要的USART和GPIO时钟打开。

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

(2)GPIO初始化,把TX端口配置成复用推挽输出(USART为STM32外设),RX配置为输入。

     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//引脚9为TX发送端
     GPIO_Init(GPIOB, &GPIO_InitStructure);

(3)配置USART直接使用一个结构体。

  //USART配置9600波特率 8位字长 1位停止位 无校验位 无硬件流控制 只有发送模式
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate=9600;//波特率
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制选择无
    USART_InitStructure.USART_Mode= USART_Mode_Tx ;//模式为发送信息
    USART_InitStructure.USART_Parity=USART_Parity_No;//无校验位
    USART_InitStructure.USART_StopBits=USART_StopBits_1 ;//停止位占一位
    USART_InitStructure.USART_WordLength=USART_WordLength_8b ;//发送字长为8bit
    USART_Init(USART1,&USART_InitStructure);
    

(4)开启USART

    USART_Cmd(USART1,ENABLE);

6.波特率发生器

发送器和接收器的波特率由波特率寄存器BRR里的DIV确定

计算公式:波特率 = fPCLK2/1 / (16 * DIV)

7.发送数据帧

发送数据帧包含:起始位-数据位-校验位(可省略)-停止位

8.发送HEX数据包

HEX数据包(将多个数据打包)

数据包的任务:将属于同一批的数据进行打包和分割,方便接收方识别。

避免载荷数据与包头包尾重复的方法:(1)限幅:限制载荷数据的长度。(2)增加包头包尾的长度。

可变包长意味着载荷数据长度不一。

如下图所示:HEX数据包以0xFF开头,0xFE结尾。

9.发送文本数据包

文本数据意味着对发送的原始数据进行了编码译码

可变包长意味着载荷数据长度不一。

如下图所示:数据包以@开头,'\r'  '\n'结尾。

10.HEX数据包接受

对于串口接收数据来说可以使用查询和中断两种方式。

在本次实验中使用查询的方式:在主函数中不断判断RXNE标志位,置1表明接收到了数据,再调用ReceiveData,读取DR寄存器。

HEX数据包接收用到了状态机思路:(1)根据项目要求定义状态画几个圈(2)考虑好各个状态在什么情况下转移,如何转移画好线和转移条件(3)最后根据图来编程。

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103微控制器具有多个串口通信接口,包括USART1、USART2、USART3和UART4。其中USART3和UART4是两个独立的串口通信接口USART3与UART4是可独立配置为全双工或半双工模式的通信接口。它们可以与其他外部设备(如电脑、传感器等)进行数据通信。 首先,我们需要初始化串口的相应引脚,将它们配置为功能引脚,以便与外部设备进行连接。然后,我们设置串口的工作模式、波特率、数据位数、停止位数、校验位等参数。 在发送数据,我们将要发送的数据写入串口的数据寄存器,并等待发送完成。在接收数据,我们将从串口的数据寄存器中读取接收到的数据,并进行后续处理。 例如,要在USART3上进行串口通信,可以按照以下步骤进行配置: 1. 初始化串口引脚,将USART3对应的引脚配置为串口功能。 2. 配置串口的工作模式、波特率、数据位数、停止位数、校验位等参数。 3. 启用USART3的发送和接收功能。 4. 要发送数据,将要发送的数据写入USART3的数据寄存器,并等待发送完成。 5. 要接收数据,从USART3的数据寄存器中读取接收到的数据,并进行后续处理。 类似地,可以使用相同的方法来配置和使用UART4进行串口通信。 总之,使用STM32F103的USART3和UART4串口通信需要正确配置串口引脚和相关参数,并使用发送和接收数据的相应寄存器来进行数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值