STM32简单串口通信


前言

野火串口助手
链接: fireTools-win64-v1.0.1.5
提取码: 5x3a
STM32串口下载软件
链接: FlyMcu
提取码: 9y4c

一、 了解串口协议和RS-232标准

1.串口协议和RS-232标准

串口协议是一种用于在计算机和外部设备之间进行数据通信的协议。其中,RS-232是一种常用的串口通信标准,定义了用于串行通信的电气特性和信号传输规范。RS-232标准使用不同电平表示二进制数据,包括数据位、停止位和校验位等信息。
USART协议
  USART代表通用的同步和异步发送器和接收器。它是两线协议的串口通信。数据电缆信号线标记为Rx和TX。该协议用于逐字节发送和接收数据以及时钟脉冲。这是一种全双工协议,意味着同时以不同的板速发送和接收数据。不同的设备通过此协议与微控制器通信。
  
RS-232标准
RS-232标准定义了两个逻辑电平:逻辑1和逻辑0。在RS-232中,逻辑1通常由负电平表示,而逻辑0通常由正电平表示。RS-232标准使用负电平表示逻辑1是因为在通信线路中,负电平更容易受到干扰,因此可以更好地保持信号的稳定性。

2.RS232电平与TTL电平的区别

RS-232电平和TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑)电平是两种不同的电平标准。RS-232电平用于串口通信,而TTL电平用于数字电路和逻辑电路中。

主要区别如下:

电压级别:RS-232电平通常采用正负电压,比如正电平范围为+3V到+15V,负电平范围为-15V到-3V。而TTL电平通常使用0V和5V作为电平表示。
电流:RS-232标准定义了较高的电流要求,以便在较长距离上进行可靠的通信。而TTL电平通常具有较低的电流要求。
信号传输距离:RS-232电平可以在较长的距离上进行通信,通常达到数十米甚至更远。而TTL电平在短距离内通信更为常见。

3.了解"USB/TTL转232"模块的工作原理。

USB/TTL转RS-232模块是一种用于将USB接口转换为RS-232电平的设备,常用于连接计算机和串口设备之间的通信。以CH340芯片模块为例,它是一种常见的USB转串口芯片。

工作原理如下:

USB通信:USB/TTL转RS-232模块通过USB接口与计算机连接,通过USB通信协议与计算机进行数据交换。

芯片转换:模块中的CH340芯片负责将USB信号转换为TTL电平信号。它将计算机通过USB接口发送的数据转换为TTL电平信号,并将其发送到模块的TTL串口引脚。

RS-232转换:模块上的其他电路和芯片负责将TTL电平信号转换为RS-232电平信号。这通常涉及电平转换电路和驱动器,将TTL电平信号转换为符合RS-232标准的正负电平信号。

串口通信:通过RS-232电平信号,模块可以与外部串口设备进行通信,例如与串口打印机、串口终端或其他串口设备进行数据交换。

通过USB/TTL转RS-232模块,可以方便地将计算机与串口设备连接起来,实现数据的传输和通信。

二、简单串口通信实现

1、CubeMX创建项目

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1)新建项目

在这里插入图片描述

2)选择芯片

在这里插入图片描述

3)配置RCC

在这里插入图片描述

4)配置SYS

在这里插入图片描述

5)配置USART

在这里插入图片描述

6)配置NVIC

在这里插入图片描述

7)生成代码

在这里插入图片描述
设置项目路径和名称
在这里插入图片描述

2、Keil配置代码

1)打开项目

在这里插入图片描述

2)编写main.c

定义变量
char c;//指令 #:停止  *:开始
char message[]="hello windows!\n";//输出信息
char tips[]="无效指令......\n";//提示1
char tips1[]="开始发送......\n";//提示2
char tips2[]="暂停发送......\n";//提示3
char flag='#';//标志 #:停止发送, *:开始发送
设置接受中断
	//设置接受中断
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
替换原while循环
	while (1)
	{
		if(flag=='*'){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}
	}
在main函数下重写中断处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为#时,发送提示并改变flag
	if(c=='#'){
		flag='#';
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	
	//当输入的指令为*时,发送提示并改变flag
	else if(c=='*'){
		flag='*';
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	
	//当输入无效指令时,发送提示并改变flag
	else {
		flag='#';
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}

	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}

3)编译并烧录

在这里插入图片描述

4)串口助手操作

输入*,开始发送
在这里插入图片描述
输入#,暂停
在这里插入图片描述
输入其它指令无效
在这里插入图片描述

参考

1.链接: https://blog.csdn.net/qq_47281915/article/details/121053903
2.链接: https://blog.csdn.net/qwert_qqq/article/details/134083704?spm=1001.2014.3001.5502
3.链接: https://zhuanlan.zhihu.com/p/464563001

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值