STM32串口通信入门

一、串口通讯协议和RS-232的介绍以及USB/TTL转232模块的工作原理

1、 串口协议和RS-232标准:

(1)串口协议:
串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单、便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通 讯方式输出调试信息。
在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。

名称组成作用
物理层具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输
协议层规定通讯逻辑,统一收发双方的数据打包、解包标准。

在串口通讯的物理层有很多标准及变种,下面主要讲解 RS-232 标准
(2)RS-232 标准:
RS-232 标准主要规定了信号的用途,通讯接口以及信号的电平标准。
在这里插入图片描述
在上面的通讯方式中,两个通讯设备的“DB9接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准”传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL校准”的电平信号,才能实现通讯。

2、RS232电平与TTL电平的区别
根据通讯使用的电平标准不同,串口通讯可分为 TTL标准和 RS-232标准:

标准名称逻辑1逻辑0
TLL2.4V~5V0~0.5V
RS-232-15V~3V+3V~+15V

从表格中不难看出,两种标准划分的逻辑电压不同。在电子电路中常使用 TTL 的电平标准,理想状态下,使用 5V 表示二进制逻辑 1,使用 0V 表示逻辑 0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑 1,+15V 表示逻辑 0。
下图为用RS232与TTL电平校准表示同一个信号时的对比:
在这里插入图片描述

3、USB/TTL转232“模块(CH340芯片为例)

(1)基本原理:
USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。

  USB主机检测到USB转串口设备插入后,首先会对设备复位,然后开始USB枚举过程。USB枚举时过程会获取设备描述符、配置描述符、接口描述符等。描述符中会包含USB设备的厂商ID,设备ID和Class类别等信息。操作系统会根据该信息为设备匹配相应的USB设备驱动。

  USB虚拟串口的实现在系统上依赖于USB转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的CDC类串口驱动等。驱动主要分为2个功能,其一注册USB设备驱动,完成对USB设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。
发送or接收数据流向
串口发送串口应用发送数据→USB串口驱动获取数据→驱动将数据经过USB通道发送给USB串口设备→USB串口设备接收到数据通过串口发送
串口接收USB串口设备接收串口数据→将串口数据经过USB打包后上传给USB主机→USB串口驱动获取到通过USB上传的串口数据→驱动将数据保存在串口缓冲区提供给串口应用读取

(2)CH340模块介绍:
TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD。

RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD。
在这里插入图片描述
USB转TTL串口模块与单片机连接电路图如下所示:
在这里插入图片描述

二、利用HAL库新建一个工程

(1)打开STM32CubeMX,在主界面点击:ACCESS TO MCU SELECTOR
(2)选择的单片机型号以及点击开始工程项目:
在这里插入图片描述

(3)配置GPIO:PA0。如果仅仅是完成串口通信的话,这一步可以跳过。但是根据实验要求,为了区分串口通信的开启与关闭,要使用一个LED灯来显示。当串口通信开启(STM32向电脑发送信息)的时候,LED灯亮,当串口通信关闭(STM32停止向电脑发送消息)的时候,LED灯灭。
在这里插入图片描述
(4)配置USART1,我们使用USART1进行数据传输。在这个界面按下图进行配置。我们对USART1的配置要做的只有两件事:一是选择串口工作模式为异步,二是开启USART1全局中断
在这里插入图片描述(5)进入Project Manager(工程管理),进行工程设置点击生成工程与代码:

注意:路径不能包含中文和空格,不然生成的工程文件无法在Keil中打开;
在这里插入图片描述
在这里插入图片描述

三、完善keil5工程

1.本工程中几个函数简介:

HAL_UART_Receive_IT:

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_int *data, uint16_t Size)
 
/*
	huart:使用哪个串口进行通信
	data: 一个地址,用于保存接受到的数据
	Size: 接收的数据个数
*/

在调用此函数后,程序会将对应串口的接收中断开启,当我们向单片机发送数据时会触发这个中断。在触发这个中断后,程序会接收数据到你传入的地址中,会读取Size个数据。读取完成后,关闭接收中断使能。

  由于程序在接收完数据后会关闭接收中断。因此这个函数我们要写在main的死循环中,保证接收中断可以一直开启。

HAL_UART_Transmit_IT:

HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_int *data, uint16_t Size)
 
/*
	huart:使用哪个串口进行通信
	data: 一个地址,里面是要发送的数据通常是数组
	Size: 发送的数据个数
*/

使用这个函数开启发送中断,发送寄存器为空时触发中断,将要发送的数据送入发送寄存器并发送。发送完成后关闭中断。在此实验中,我们把它当做普通的发送函数即可。

HAL_GPIO_WritePin:

HAL_GPIO_WritePin(GPIOX,GPIO_PIN_X,GPIO_PIN_STATUS)
/*
	GPIOX:目标GPIO的组号
	GPIO_PIN_X: 目标GPIO的引脚编号 
	GPIO_PIN_STATUS: 引脚状态
*/

使用这个函数修改GPIO_ODR寄存器,将非复用输出的GPIO引脚输出电平设置成自己想要的。

HAL_Delay(uint ms):

HAL_Delay(uint ms)

延时ms函数。

2.完善keil5工程代码:

首先,点击刚刚生成的keil5工程文件,双击main.c文件,然后再main.c中找到图示框住的函数, 接着右击此函数,进入其定义的地方处:
在这里插入图片描述
将图中框住的部分改为SET即可:此步骤是将这个GPIO口设置为高电平,初始时不亮!
在这里插入图片描述
回到main.c文件中,在main函数里把while(1)那一块替换成如下代码:

uint8_t rcData = '*';
  	while (1)
  	{
  	//接收中断使能
		HAL_UART_Receive_IT(&huart1,&rcData,1);
		if(rcData == '#')
		{//如果接收#
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
		}
		else if(rcData == '*')
		{//如果接收*				 
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
			uint8_t hello[20]="hello world\n";
			HAL_UART_Transmit_IT(&huart1,hello,20);
			HAL_Delay(500);
		}
  	}

在这里插入图片描述

四.烧录运行

编译生产hex文件,用于后面的烧录步骤:
在这里插入图片描述
点击FLYMCU的开始编程(P),接着马上点击STM32最小系统板子的复位键即可完成烧录:
在这里插入图片描述
烧录成功示意图:
在这里插入图片描述
运行结果演示:
打开串口,并且同时点击STM32最小系统板子的复位键即可开始运行:

注:输入“*”:让STM32单片机继续向电脑发送信息;

输入“#”:让STM32单片机停止向电脑发送消息;

在这里插入图片描述

五、仿真调试

1、进入keil5仿真:

(1)点击第一步,Target界面中,选择跟正确的晶振大小,使用8MHz的外部晶振:
在这里插入图片描述
(2)接着进行Debug页的设置:
在这里插入图片描述
(3)点击图示圈住的地方进入仿真调试界面进入逻辑分析仪:
在这里插入图片描述
(4)点击Setup设置添加要进行观察的引脚:
在这里插入图片描述

添加引脚信息:添加引脚信息时候,PA脚输入:PORTA,PB脚输入PORTB,PC脚输入PORTC;接着输入".",接着在“.”后面输入对应引脚号,最后回车即可;例如:我这里要输入PA0这个引脚的信息:添加一个引脚,添加一个引脚信息:PORTA.0,最后回车完成添加!

接着对引脚的配置信息进行修改,如下图所示:
在这里插入图片描述

2、仿真结果:

在这里插入图片描述

总结

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值