STM32串口通信入门

前言

本实验旨在通过STM32微控制器实现串口通信功能。串口通信是一种常见的通信方式,广泛应用于各种嵌入式系统和物联网设备中。通过串口通信,我们可以实现与外部设备的数据传输和交互。
本实验将使用STM32微控制器和一台计算机进行串口通信。我们将通过配置STM32的串口模块,并编写相应的程序,实现STM32与计算机之间的数据传输。
在本实验中,我们将完成以下任务:

  1. 配置STM32的串口模块:配置串口的波特率、数据位、停止位和校验位等参数。
  2. 编写STM32的程序:通过编写适当的代码,实现STM32接收和发送数据的功能。
  3. 编写计算机端的串口通信程序:在计算机上编写串口通信程序,与STM32进行数据通信。

在进行本实验之前,需要具备以下基础知识:

  1. C语言编程基础:了解C语言的基本语法和编程概念。
  2. STM32微控制器基础:了解STM32的基本原理和寄存器配置。
  3. 串口通信基础:了解串口通信的原理和常用的串口参数。
    通过完成本实验,你将掌握以下技能:
  4. 配置STM32的串口模块,实现串口通信的基本参数设置。
  5. 使用STM32的串口模块进行数据的接收和发送。
  6. 与计算机进行串口通信,实现数据的传输和交互。

串口通信模块的介绍

串口协议和RS-232标准:

串口协议RS-232标准
用途用于在计算机和外部设备之间进行串行数据传输。
通信方式全双工或半双工
传输速率通常支持较低的速率,如115200bps
电压级别标准定义了电压级别为±3至±15V
连接方式通过DB9或DB25接口连接设备
距离限制通常支持较短的距离,如15米

RS232电平与TTL电平的区别:

RS232电平TTL电平
电压范围±3至±15V
逻辑电平低电平为正电压,高电平为负电压
传输距离较长的传输距离,通常可达15米以上
适用范围用于长距离传输和噪声环境

"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理:
"USB/TTL转232"模块是一种转换器,用于将USB接口转换为串口RS-232电平或TTL电平。以CH340芯片模块为例,其工作原理如下:

  1. 通过USB接口与计算机连接。
  2. CH340芯片将USB信号转换为TTL电平信号。
  3. 如果需要将TTL电平转换为RS-232电平,CH340芯片将TTL电平通过电平转换电路转换为RS-232电平信号。
  4. 通过转换后的RS-232电平或TTL电平,实现与RS-232设备或TTL逻辑电平设备的连接。
  5. 通过CH340芯片的驱动程序,在计算机上创建虚拟串口,使计算机可以通过虚拟串口与外部设备进行串行通信。

综上所述,"USB/TTL转232"模块通过CH340芯片将USB信号转换为TTL电平信号,并可选地将TTL电平转换为RS-232电平,从而实现USB与RS-232设备或TTL逻辑电平设备之间的串行通信。

实验任务

安装 stm32CubeMX,配合Keil,使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:

任务一

1)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

任务二

2)在完成以上任务一基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送。

硬件

USB转TTL
在这里插入图片描述
USB转TTL是一种常见的硬件设备,用于将USB接口转换为TTL(逻辑电平)串口接口。它通常用于将计算机(PC、Mac、Raspberry Pi等)的USB接口连接到其他设备(如微控制器、传感器、模块等)的串口接口,以便进行通信和数据交换。
USB转TTL设备通常具有以下硬件特性和接口:

  1. USB接口:用于将设备连接到计算机或其他USB主机设备。通常是标准的USB Type-A接口,用于插入计算机的USB端口。
  2. TTL串口接口:用于将设备连接到其他设备的逻辑电平串口。常见的TTL串口接口是UART(通用异步收发传输)接口,其中包括TX(发送)和RX(接收)引脚。
  3. 电源供应:USB转TTL设备通常通过USB接口从计算机或其他USB主机设备获取电源供应。
  4. 信号电平转换:USB转TTL设备将USB接口的电压(通常为5V)转换为TTL串口接口的逻辑电平(通常为3.3V或5V,具体取决于设备)。这是为了确保不同设备之间的电平兼容性。
  5. LED指示灯:通常,USB转TTL设备会配备一些LED指示灯,用于显示设备的工作状态,如电源指示灯、发送/接收指示灯等。

总的来说,USB转TTL是一种方便实用的工具,可简化计算机与其他串口设备之间的连接和通信。它被广泛应用于嵌入式系统开发、物联网应用、传感器数据读取和调试等场景。
在这里插入图片描述
通信电路如下:
在这里插入图片描述

STM32F103C8T6
STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由意法半导体(STMicroelectronics)公司生产。它是STM32F1系列微控制器中的一员,具有丰富的外设和强大的性能,适用于各种嵌入式应用。
主要特性:

  • 内核:ARM Cortex-M3 32位RISC处理器,最高工作频率为72MHz。
  • 存储器:
    • 64KB Flash存储器,用于程序存储。
    • 20KB SRAM,用于数据存储。
  • 外设:
    • 2个通用定时器(TIM):用于定时任务和PWM输出。
    • 2个UART串口接口:用于串口通信。
    • 1个SPI接口:用于外部设备之间的串行通信。
    • 2个I2C接口:用于外部设备之间的串行通信。
    • 37个通用I/O引脚(GPIO):用于连接外部设备和传感器。
  • 时钟和电源管理:
    • 内部8MHz RC振荡器。
    • 外部晶体振荡器接口,支持高速外部时钟。
    • 低功耗模式和睡眠模式,以实现低功耗应用。
  • 供电电压:2.0V - 3.6V。
参数
内核ARM Cortex-M3
最高工作频率72MHz
Flash存储器容量64KB
SRAM容量20KB
通用定时器(TIM)个数2
UART接口个数2
SPI接口个数1
I2C接口个数2
通用I/O引脚(GPIO)个数37
内部振荡器频率8MHz
供电电压范围2.0V - 3.6V

这些参数能够帮助你了解STM32F103C8T6微控制器的基本特性和规格。请注意,这只是其中一些主要参数,该微控制器还具有其他功能和特性,可以根据具体需求进行进一步的研究和了解。

实验过程

实验一

之前已学习过STM32cubx创建工程文件的步骤,直接看下图流程:
使用高速外部时钟
在这里插入图片描述
设置USART
在这里插入图片描述

时钟设置
在这里插入图片描述

之后导出Keil文件即可
在main.c文件的主函数while循环中添加以下代码:

HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);
HAL_Delay(1000);  

实验二

在main中,改为一下代码:

    uint8_t receivedChar;  
    if (HAL_UART_Receive(&huart1, &receivedChar, 1, 0xffff) == HAL_OK) 
			{  
      switch (receivedChar) 
			{  
        case '#': // Pause sending message  
					HAL_UART_Transmit(&huart1, (uint8_t *)"stop", 16 , 0xffff);
          break;  
        case '*': // Resume sending message  
          HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);  
          HAL_Delay(1000); //??1s  
          break;  
        default: // Continue sending message  
          HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);  
          HAL_Delay(1000); //??1s  
          break;  
      }  
    }  

实验结果

实验一实验结果

在这里插入图片描述

实验二实验结果

在这里插入图片描述

Keil的软件仿真逻辑分析仪

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。
具体参考:
链接: https://blog.csdn.net/weixin_63019977/article/details/133749827
通过查看peripherals中的USART1可看到其波特率实际为115107baud
在这里插入图片描述
在这里插入图片描述

总结

本次实验我成功地实现了STM32微控制器的串口通信功能。通过配置串口模块和编写相应的程序,我能够实现STM32与计算机之间的数据传输和交互。
在实验过程中,我完成了以下主要任务:

  1. 配置STM32的串口模块:我们通过设置波特率、数据位、停止位和校验位等参数,将串口模块配置为与计算机兼容的通信参数。
  2. 编写STM32的程序:通过编写适当的代码,我实现了STM32接收和发送数据的功能。我使用了串口中断和DMA等技术,提高了数据传输的效率。
  3. 编写计算机端的串口通信程序:在计算机上,我编写了相应的串口通信程序,与STM32进行数据通信。我使用了合适的串口参数和通信协议,在计算机上实现了与STM32的数据交互。

通过本次实验,我掌握了以下重要知识和技能:

  1. 理解串口通信的原理和常用的串口参数。
  2. 掌握STM32串口模块的配置方法,包括波特率、数据位、停止位和校验位等参数的设置。
  3. 熟悉串口中断和DMA等技术,提高串口通信的效率和可靠性。
  4. 熟悉计算机端串口通信程序的编写,实现与STM32的数据传输和交互。

在实验过程中,我也遇到了一些挑战和问题,例如调试串口连接、处理数据传输错误等。通过仔细分析和排查,我最终解决了这些问题,并成功完成了实验目标。
总的来说,本次实验对我深入理解STM32串口通信的原理和操作步骤起到了关键作用。通过实际的操作和编程,我不仅掌握了串口通信的基本原理,还提高了对STM32微控制器的熟练程度。
希望通过这次实验,我能够更好地应用串口通信技术,在嵌入式系统和物联网设备中实现更多功能和应用。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值