前言
本实验旨在通过STM32微控制器实现串口通信功能。串口通信是一种常见的通信方式,广泛应用于各种嵌入式系统和物联网设备中。通过串口通信,我们可以实现与外部设备的数据传输和交互。
本实验将使用STM32微控制器和一台计算机进行串口通信。我们将通过配置STM32的串口模块,并编写相应的程序,实现STM32与计算机之间的数据传输。
在本实验中,我们将完成以下任务:
1、 配置STM32的串口模块:配置串口的波特率、数据位、停止位和校验位等参数。
2、编写STM32的程序:通过编写适当的代码,实现STM32接收和发送数据的功能。
3、编写计算机端的串口通信程序:在计算机上编写串口通信程序,与STM32进行数据通信。
在进行本实验之前,需要具备以下基础知识:
1、C语言编程基础:了解C语言的基本语法和编程概念。
2、STM32微控制器基础:了解STM32的基本原理和寄存器配置。
3、串口通信基础:了解串口通信的原理和常用的串口参数。
通过完成本实验,你将掌握以下技能:
1、配置STM32的串口模块,实现串口通信的基本参数设置。
2、使用STM32的串口模块进行数据的接收和发送。
3、与计算机进行串口通信,实现数据的传输和交互。
串口通信模块的介绍
串口协议和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的学习上又进步了;另一方面,感受到了在自己的操作与设置之下,电脑与STM32通过串口通信成功进行“对话”,感受真的很不一般咯!希望看完本文章的你也能成功做出来,同时也能体会到我的愉悦感受。