0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32串口通信入门!附通信编程示例

亿佰特物联网应用专家 2024-07-05 08:21 次阅读

串行通信与并行通信

设备之间的通信方式可以分为串行通信和并行通信,这两种通信方式各有优缺点。串行通信是将数据按位顺序传输,这样做的优势是占用的引脚资源少,对于引脚资源紧张的MCU来大有益处,但是由于每次只能传输一个数据,造成了传输速度较慢的劣势(相对并行传输)。并行通信就是数据的各个位同时传输,优点是数据传输快,缺点是占用引脚资源较多。

串行通信按照传输方向又分为单工、半双工和全双工。单工可以理解为只能向着一个方向传输数据,半双工就是可以双向传输,但每次只能有一个传输方向,全双工就是既可以双向传输,它又可以同时有两个传输方向。按照通信方式又可以分为同步通信和异步通信;同步通信需要时钟线(用作时钟信号的同步)的参与,例如SPI和IIC通信接口,而异步通信就是不带时钟线的,例如UART和one-wire。

7655f3ba-3a64-11ef-a655-92fbcf53809c.png

STM32提供了UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步异步收发器)两种串口通信接口,用于实现与其他设备之间的数据交换。本文将介绍STM32串口通信的基础知识,帮助读者理解和掌握其基本原理和配置方法。

STM32串口通信

STM32的串口通信模块主要包括UART和USART两种接口

UART是一种异步通信协议,它使用起始位、数据位、校验位和停止位来定义一个字符的传输格式。USART则是一种同步/异步通信协议,它支持全双工通信,并具备更高的数据传输速率和更好的抗干扰能力。

在常见的STM32F103C8T6中,根据芯片手册可以得知该型号具备3个USART,但也可以作为UART使用。UART引脚TXD为数据输出引脚,RXD为数据输入引脚,两个设备之间的UART连接为TXD和RXD交叉连接,也需要将GND连接在一起。在需要将UART设备连接其他通信接口设备连接时,则需要电平转换芯片,例如CH340(USB转TTL)、MAX485(UART转485)等。

769e3fee-3a64-11ef-a655-92fbcf53809c.jpg

STM32串口通信参数配置

在进行STM32串口通信之前,需要对串口通信参数进行配置。这些参数包括波特率、数据位、停止位、校验位等。其中,波特率表示每秒钟传输的bit,在STM32F103系列中,最高可达4.5Mbps;数据位表示每个字符的数据长度(8位或者9位),停止位用于表示字符的结束(1bit或者2bit),校验位用于检查数据传输的正确性(无校验、奇校验或者偶校验)。在STM32中,这些参数可以通过配置相应的寄存器来实现。例如,通过配置USART_BRR寄存器可以设置波特率,通过配置USART_CR1和USART_CR2寄存器可以设置数据位、停止位和校验位等参数。

STM32串口通信编程实现

在进行STM32串口通信编程时,需要使用HAL库或标准外设库等提供的API函数来配置串口通信参数和发送/接收数据。以下是一个简单的串口通信编程示例:

初始化串口通信参数:使用HAL库或标准外设库提供的函数配置串口通信参数,如波特率、数据位、停止位和校验位等。

发送数据:使用HAL库或标准外设库提供的发送函数将数据写入串口发送缓冲区,然后等待数据发送完成。在发送数据时,需要注意数据的长度和格式,以确保数据的正确传输。

接收数据:使用HAL库或标准外设库提供的接收函数从串口接收缓冲区读取数据。在接收数据时,需要判断接收缓冲区是否有数据可读,并读取相应的数据长度和格式。

错误处理:在串口通信过程中,可能会出现各种错误情况,如发送超时、接收溢出等。在编程时,需要添加相应的错误处理代码,以处理这些异常情况。

STM32串口通信编程示例

以HAL库,基于STM32CubeMX配置软件,示例一个简单的STM32串口例程。

1.创建CUBE工程:File->New Projiect

76b5797a-3a64-11ef-a655-92fbcf53809c.png

2.型号选择

76dc9e4c-3a64-11ef-a655-92fbcf53809c.png

3.时钟RCC配置和SYS配置

770abd36-3a64-11ef-a655-92fbcf53809c.png772b5ed8-3a64-11ef-a655-92fbcf53809c.png

4.UART参数配置

7742a502-3a64-11ef-a655-92fbcf53809c.png

5.时钟树配置

77680d9c-3a64-11ef-a655-92fbcf53809c.png

6.工程管理

778eedcc-3a64-11ef-a655-92fbcf53809c.png77aa3eb0-3a64-11ef-a655-92fbcf53809c.png

7.程序修改

Main函数修改如下:

int main(void){
/* USER CODE BEGIN 1 */ uint8_t testbuf[] = {"stm32 uart\r\n"}; /* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ HAL_UART_Transmit(&huart1,testbuf,sizeof(testbuf),0xFFFF); HAL_Delay(1000); } /* USER CODE END 3 */}

编译并下载至MCU,使用串口调试助手,即可看到MCU在输出testbuf内的内容。

结论

STM32串口通信是嵌入式系统开发中不可或缺的一部分。通过掌握STM32串口通信的基础知识和编程实现方法,可以更加高效地进行嵌入式系统开发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354094
  • uart
    +关注

    关注

    22

    文章

    1216

    浏览量

    101066
  • 串口通信
    +关注

    关注

    34

    文章

    1605

    浏览量

    55350
  • 并行通信
    +关注

    关注

    1

    文章

    31

    浏览量

    10803
收藏 人收藏

    评论

    相关推荐

    如何使用stm32串口进行通信

    如何使用stm32串口进行通信?基于寄存器与基于固件库的stm32编程方式有什么差异是什么?
    发表于 12-03 07:18

    STM32串口通信如何编程

    STM32怎么使用串口STM32串口通信如何编程
    发表于 12-07 08:03

    STM32串口通信相关资料分享

    STM32串口通信文章目录STM32串口通信前言一、基于寄存器与基于固件库的
    发表于 02-10 06:28

    stm32串口通信实战

    STM32串口通讯一、基于寄存器与基于固件库的编程方式的差异二、stm32串口通信实战1、烧录代
    发表于 02-10 07:00

    stm32f407串口通信的代码

    stm32f407串口通信的代码 原理图还有封装 很清楚自己画的
    发表于 03-21 17:22 0次下载

    STM32的三种串口通信协议介绍

    本文首先介绍了STM32串口硬件电路及串口编程,其次介绍了STM32的三种串口
    发表于 05-25 09:33 3.8w次阅读
    <b class='flag-5'>STM32</b>的三种<b class='flag-5'>串口</b><b class='flag-5'>通信</b>协议介绍

    STM32串口通信数据乱码的相关问题

    STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到
    发表于 06-22 08:01 1.2w次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>数据乱码的相关问题

    STM32串口通信

    STM32串口通信串口通信简介编程代码注意:本文参考STM3
    发表于 12-07 09:36 15次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    Stm32串口通信基础实验

    目录二、stm32串口通信二级目录三级目录二、stm32串口通信1.本次实验使用的是
    发表于 12-07 09:36 32次下载
    <b class='flag-5'>Stm32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>基础实验

    STM32串口通信与它的堆、栈、全局变量

    STM32串口通信文章目录STM32串口通信前言一、基于寄存器与基于固件库的
    发表于 12-07 09:51 12次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>与它的堆、栈、全局变量

    初步了解STM32串口通讯

    STM32串口通讯一、基于寄存器与基于固件库的编程方式的差异二、stm32串口通信实战1、烧录代
    发表于 12-07 09:51 13次下载
    初步了解<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>通讯

    "2个STM32串口之间的串口通信(RX,TX)"

    "2个STM32串口之间的串口通信(RX,TX)"
    发表于 12-09 17:21 83次下载
    "2个<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>之间的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(RX,TX)"

    STM32串口通信

    STM32串口通信串口通信简介编程代码注意:本文参考STM3
    发表于 01-14 13:47 12次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    MSP430串口通信入门级)

    MSP430串口通信入门级)
    发表于 03-14 15:44 19次下载

    STM32串口通信简明知识

    STM32串口通信简明知识
    的头像 发表于 10-25 15:48 1253次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>简明知识