前言
本实验旨在通过STM32微控制器实现串口通信功能。串口通信是一种常见的通信方式,广泛应用于各种嵌入式系统和物联网设备中。通过串口通信,我们可以实现与外部设备的数据传输和交互。
本实验将使用STM32微控制器和一台计算机进行串口通信。我们将通过配置STM32的串口模块,并编写相应的程序,实现STM32与计算机之间的数据传输。
在本实验中,我们将完成以下任务:
配置STM32的串口模块:配置串口的波特率、数据位、停止位和校验位等参数。
编写STM32的程序:通过编写适当的代码,实现STM32接收和发送数据的功能。
编写计算机端的串口通信程序:在计算机上编写串口通信程序,与STM32进行数据通信。
在进行本实验之前,需要具备以下基础知识:
C语言编程基础:了解C语言的基本语法和编程概念。
STM32微控制器基础:了解STM32的基本原理和寄存器配置。
串口通信基础:了解串口通信的原理和常用的串口参数。
通过完成本实验,你将掌握以下技能:
配置STM32的串口模块,实现串口通信的基本参数设置。
使用STM32的串口模块进行数据的接收和发送。
与计算机进行串口通信,实现数据的传输和交互。
串口通信模块的介绍
串口协议和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芯片模块为例,其工作原理如下:
通过USB接口与计算机连接。
CH340芯片将USB信号转换为TTL电平信号。
如果需要将TTL电平转换为RS-232电平,CH340芯片将TTL电平通过电平转换电路转换为RS-232电平信号。
通过转换后的RS-232电平或TTL电平,实现与RS-232设备或TTL逻辑电平设备的连接。
通过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(逻辑电平)串口接口。它通常用于将计算机(PC、Mac、Raspberry Pi等)的USB接口连接到其他设备(如微控制器、传感器、模块等)的串口接口,以便进行通信和数据交换。
USB转TTL设备通常具有以下硬件特性和接口:
USB接口:用于将设备连接到计算机或其他USB主机设备。通常是标准的USB Type-A接口,用于插入计算机的USB端口。
TTL串口接口:用于将设备连接到其他设备的逻辑电平串口。常见的TTL串口接口是UART(通用异步收发传输)接口,其中包括TX(发送)和RX(接收)引脚。
电源供应:USB转TTL设备通常通过USB接口从计算机或其他USB主机设备获取电源供应。
信号电平转换:USB转TTL设备将USB接口的电压(通常为5V)转换为TTL串口接口的逻辑电平(通常为3.3V或5V,具体取决于设备)。这是为了确保不同设备之间的电平兼容性。
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创建工程文件的步骤,直接看下图流程:
使用高速外部时钟
之后导出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串口通信的入门实验。首先,我们需要安装STM32CubeMX软件,并配合Keil进行开发。在开发过程中,我们可以选择使用HAL库或标准库的方式进行编程。在本次实验中,我们需要设置USART1的波特率为115200,停止位为1位,无校验位。
任务一中,我们需要实现STM32向上位机(Windows 10)连续发送“hello windows!”,而上位机则使用串口助手工具接收数据。为了实现这个功能,我们需要在STM32中编写代码,配置USART1为发送模式,并通过串口发送函数连续发送指定的数据。在上位机中,我们需要打开串口助手工具,并设置好相应的串口参数,以便接收STM32发送的数据。
任务二是在任务一的基础上进行扩展,当上位机给STM32发送一个字符“#”后,STM32会暂停发送“hello windows!”;而当上位机发送一个字符“*”后,STM32会继续发送数据。为了实现这个功能,我们需要在STM32中编写代码,配置USART1为接收模式,并通过串口接收函数获取上位机发送的数据。然后,我们可以通过判断接收到的字符,来决定是否继续发送数据。
总结一下,本次实验任务是关于STM32串口通信的入门实验。我们通过安装STM32CubeMX软件和配合Keil进行开发,使用HAL库或标准库的方式进行编程。在任务一中,我们实现了STM32向上位机连续发送数据的功能。在任务二中,我们扩展了功能,通过上位机发送特定字符来控制STM32的发送行为。通过完成这些任务,我们加深了对STM32串口通信的理解,并掌握了如何在STM32中使用串口进行数据的发送和接收。