【stm32CubeMX】STM32F103c8t6串口通信

一、串口通信协议

  串行通信协议包括系统间协议内部系统协议

  系统间协议:用于通信两个不同设备的系统间协议。就像计算机与微控制器套件之间的通信一样。通过内部总线系统进行通信。常见的有UART协议、USART协议、USB协议。

  内部系统协议:内部系统协议用于通信电路板上的两个设备。在使用这些系统内协议时,我们将不使用系统内协议而扩展微控制器的外围设备。使用系统内协议会增加电路复杂度和功耗。使用系统内协议,电路复杂度和功耗降低,成本降低,并且访问数据非常安全。常见的有I2C协议、SPI协议、CAN协议。

  串口通信协议有多个标准,比如协议RS-232、RS-422和RS-485。
  我们主要讲解RS-232和RS-485。

1.UART协议

  UART代表通用异步发送器和接收器。UART协议是具有两个有线协议的串口通信。数据电缆信号线标记为Rx和Tx。串口通信通常用于发送和接收信号。它被传输并与串口通信接收数据,而没有类脉冲。UART接收数据字节并按顺序发送各个位。

  USAT协议在嵌入式系统中,通常作为 MCU 的外设; 一般来说,由芯片引脚直接引出的一般是 TTL 电平;而中间接有转换芯片的可能就是RS232电平。详情可查看:串行通讯的标准

在这里插入图片描述

  UART是半双工协议。半双工意味着具有传输和接收数据的功能,但不能同时进行。大多数控制器在电路板上都有硬件UART。它使用一条数据线来发送和接收数据。它具有一个起始位、一个8位数据和一个停止位,表示8位数据传输一个人的信号是从高到低。例如:电子邮件、短信、对讲机,工业物联网传输设备串口服务器。
在这里插入图片描述
      STM32的UART特点
1、全双工异步通信;
2、分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;
3、可编程的数据字长度(8位或者9位);
4、可配置的停止位(支持1或者2位停止位);
5、可配置的使用DMA多缓冲器通信;
6、单独的发送器和接收器使能位;
7、检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志;
8、多个带标志的中断源,触发中断;
9、其他:校验控制,四个错误检测标志。

2.RS-232

  使用RS-232标准的串口设备间常见的通讯结构如下

在这里插入图片描述

  在上面的通讯方式中,两个通讯设备的"DB9接口"之间通过串口信号线建立起连接,串口信号线中使用"RS-232标准"传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。

  电平标准
  根据通讯使用的电平标准不同,串口通讯可分为TTL标准及RS-232标准,见表
在这里插入图片描述
  我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1,+15V表示逻辑0。使用RS232与TTL电平校准表示同一个信号时的对比见图 202。

在这里插入图片描述

  因为控制器一般使用TTL电平标准,所以常常会使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。

特点

(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。
(2) 传输速率较低,在异步传输时,波特率为20Kbps。
(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4) 传输距离有限,最大传输距离标准值为50英尺,实际上也只能 用在50米左右。

3、RS-485

  RS-485总线标准规定了总线接口的电气特性标准即对于2个逻辑状态的定义:正电平在+2V~+6V之间,表示一个逻辑状态;负电平在-2V~-6V之间,则表示另一个逻辑状态;数字信号采用差分传输方式,能够有效减少噪声信号的干扰。但是RS-485总线标准对于通信网络中相关的应用层通信协议并没有做出明确的规定,则对于用户或者相关的开发者来说都可以建立对于自己的通信网络设备相关的所适用的高层通信协议标准-。同时由于在工业控制领域的应用RS-485总线通信网络的现场中,经常是以分散性的工业网络控制单元的数量居多并且各个工业设备之间的分布较远为主,将会导致在现场总线通信网络中存在各种各样的干扰使得整个通信网络的通信效率可靠性不高,而在整个网络中数据传输的可靠性将会直接影响着整个现场总线通信系统的可靠性,因此研究RS-485总线通信系统的通信可靠性具有现实意义。

特点

(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。
(2) 传输速率较低,在异步传输时,波特率为20Kbps。
(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4) 传输距离有限,最大传输距离标准值为50英尺,实际上也只能 用在50米左右。

二、USB转TTL

  USB转TTL串口模块是一个非常实用的工具,可以测试模块的UART串口通信和通过单片机的UART接口给单片机等下载程序。
在这里插入图片描述

USB转TTL详细使用说明请点击
注意:
1.CH340模块插在USB2.0口时,5V排针输出口电流只有500MA左右,如过要接的功率比较的大模块建议接USB3.0或者给大功率模块单独外接电源且共地。
2.与STM32F103C8T6连接
在这里插入图片描述

PA9–RXD
PA10–TXD
3.3V–3V3
GND–GND
3、下载时BOOT0置为1,下载完成后BOOT0置为0(否则下载断电后程序不保存)

三、配置CubeMX并建立工程

1、新建工程;
在这里插入图片描述
在这里插入图片描述

2、配置时钟源,在RCC里面的HSE配置的是晶振时钟;
在这里插入图片描述

3、配置程序烧录引脚SYS为SWD模式;
在这里插入图片描述

4、配置GPIO口,配置一个LED灯(我的板子是PA1),起到串口成功接收到数据时的指示作用;
在这里插入图片描述

5、配置串口收发引脚
在这里插入图片描述

此处我们采用的通信方式为UART通信(异步全双工串口通信),PA9作为TX,PA10作为RX使用。直接在可视框图里点击相应的引脚进行配置。
在这里插入图片描述
配置到目前,效果图为:

可以发现,TX和RX两个引脚配置完之后是黄色的,代表还没有配置完毕,下面继续进行配置。

6、在左边的"Connectivity”里面的USART1模式里选择异步全双工通信模式
⮚点击USATR1
⮚设置MODE为异步通信(Asynchronous)
在这里插入图片描述

⮚基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1,接收和发送都使能
在这里插入图片描述

⮚GPIO引脚设置 (前面已经设置)USART1_RX/USART_TX
在这里插入图片描述

⮚NVIC Settings 一栏使能接收中断
在这里插入图片描述

这里简单扩展一下:
STM32F103系列单片机共有5个串口,其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter),4,、5是通用异步串行接口UART(Universal Asynchronous Receiver/Transmitter)。

7、配置时钟树,我还是开到最高的72MHz
在这里插入图片描述

8、进行项目设置,最后生成代码,CubeMX部分就大功告成了
在这里插入图片描述
在这里插入图片描述
9、点击open project打开工程
在这里插入图片描述

10、在main.c中加入代码

  while (1)
  {
    
    

HAL_UART_Transmit( &huart1,temp_buf,15,10);
    
    
  }

四、串口通信实现

1、使用usb转ttl下载
在这里插入图片描述
2、烧录
在这里插入图片描述
3、打开串口助手并设置
在这里插入图片描述

4、打开串口
在这里插入图片描述

实验成功

五、keil仿真观察串口输出波形

仿真设置
在这里插入图片描述

  在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

在这里插入图片描述

但是通过实验发现,观察PA9、PA10波形一直是平的,没有变化,后来发现是没有用LED高低电平来显示,因此这里需要使用IO口连接LED显示,稍微更改代码,设置GPIOC13闪烁;仿真如下
在这里插入图片描述

六、总结

本次实验比较顺利,不过因为进行仿真,实验了很多次都没有波形变换,后来发现应该用led灯的闪烁来观察,所以稍微更改代码,设置GPIOC13闪烁。

七、参考资料

串口通讯协议是什么,串行通信协议包括哪些

猜你喜欢

转载自blog.csdn.net/qq_52201641/article/details/127289094