STM32使用HAL库中断控制串口通信

前言
本实验旨在通过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通过串口通信成功进行“对话”,感受真的很不一般咯!希望看完本文章的你也能成功做出来,同时也能体会到我的愉悦感受。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值