串口通信小试牛刀

串口通信小试牛刀

一、题目要求

二、 串口协议和RS—232标准,RS232电平与TTL电平的区别,以及"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。

1、串口协议

什么是串口协议?
串口协议又指串口通信,串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
设备之间的通信方式一般分为串行通信和并行通信。
按照通信方式,分为:同步通信和异步通信。
按照数据的传输方向,串口通信分为:单工、半双工、全双工。
常见串口通信接口:
在这里插入图片描述

(一)STM32串口通信

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)和USART(通用同步异步收发器),对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。
UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(3.3V或以上)。如下图:
在这里插入图片描述
UART引脚连接方法:
在这里插入图片描述
芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD,GND接GND,然后这两个芯片之间就可以进行TTL电平通信了。

(二)RS-232

RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。
虽然PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。
在这里插入图片描述
芯片串口和rs232的电平标准:Rs232的电平标准:+15/+13 V表示0,-15/-13表示1;单片机的电平标准(TTL电平):+5V表示1,0V表示0。
连接方式:在单片机串口与上位机给出的rs232口之间,通过电平转换电路,实现TTL电平与RS232电平之间的转换。
RS232接口:
在这里插入图片描述
通信过程中只有两个脚参与通信,所以在电路连接时,我们只需要连接三个脚即可。2脚:电脑的输入RXD,3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步通信,5脚:接地。
PC串口与单片机串口连接方式:
其中,DB91是在电脑上的 DB92是在单片机实验板上焊接着的。如果电脑没有rs232口,只有USB口,可以用串口转接线转出串口,在电脑上位机上需要安装驱动程序。

(三)TTL电平与RS—232电平的区别

TTL电平标准:输出 L: 《0.8V ; H:》2.4V;输入 L: 《1.2V ; H:》2.0V。TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。
。比TTL有更高的噪声容限。
RS232标准:逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。
TTL232:晶体管-晶体管逻辑集成电路。
RS232:数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准。
TTL:是以某个固定的速率去传输的,但是可以传输多个bit比特位。
RS232:以固定的某个速率(1200bps,9600bps,115200bps等),一次只能只传输一个bit比特位。

(四)USB/TTL转232(以CH340为例)

USB转串口模块可以使用5V、3V3电压供电,需要将跳线帽进行安装。可以对USB转串口模块进行测试,将USB的电压引脚用跳帽接上,然后将RXD和TXD两个引脚用跳帽或者杜邦线接上。然后打开串口终端,点击“手动发送”或者“自动发送”,如果在接收区可以接收到数据,说明USB转串口模块工作正常,否则需要检查接线是否正确、电路板元器件是否损坏。
VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连,如下图:
在这里插入图片描述

2、stm32的USART的串口通信(查询方式)

(一)内容

完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
3)在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

(二)安装CH340驱动

安装已完成
在这里插入图片描述
在电脑设备管理器处查看有无com端口出现,有即可证明成功。
在这里插入图片描述

(三)代码建立工程

可以参考之前的博客https://blog.csdn.net/qq_48641886/article/details/120919205?spm=1001.2014.3001.5502
只需要修改下usart.c和test.c文件即可。
在SYSTEM组下双击usart.c,其中的uart_init函数,代码如下:

void uart_init(u32 pclk2,u32 bound)
{  	 
	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
	mantissa=temp;				 //得到整数部分
	fraction=(temp-mantissa)*16; //得到小数部分	 
    mantissa<<=4;
	mantissa+=fraction; 
	RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
	RCC->APB2ENR|=1<<14;  //使能串口时钟 
	GPIOA->CRH&=0XFFFFF00F;//IO状态设置
	GPIOA->CRH|=0X000008B0;//IO状态设置 
	RCC->APB2RSTR|=1<<14;   //复位串口1
	RCC->APB2RSTR&=~(1<<14);//停止复位	   	   
	//波特率设置
 	USART1->BRR=mantissa; // 波特率设置	 
	USART1->CR1|=0X200C;  //1位停止,无校验位.
#if EN_USART1_RX		  //如果使能了接收
	//使能接收中断 
	USART1->CR1|=1<<5;    //接收缓冲区非空中断使能	    	
	MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级 
#endif
}

在test.c中编写如下代码:

#include "sys.h"
#include "usart.h"		
#include "delay.h"	 
int main(void)
{				 
	u16 t; u16 len; u16 times=0;
	Stm32_Clock_Init(9);	//系统时钟设置
	delay_init(72);	  		//延时初始化
	uart_init(72,115200); 	//串口初始化为115200
  	while(1)
	{
		if(USART_RX_STA&0x8000)
		{ 
			len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度
			printf("\r\n Hello Windows! \r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%200==0)printf("Hello Windows!\r\n"); 
			delay_ms(10); 
		}
	}	 
} 



在这里插入图片描述
编译成功后烧录:
在这里插入图片描述

(四)串口助手观察输出

打开XCOM串口助手,弹出界面点击打开串口,即可以接收到C8T6发送的数据Hello Windows!
在这里插入图片描述

3、KEIL观察串口输出的波形

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。
在这里插入图片描述
我们可以看出PA9、PA10波形是一条直线,没有变化。

三、stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期

1、stm32CubeMX点亮LED灯

(一)内容

安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务:
1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。
2、在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察3个GPIO端口的输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

(二)准备工作

安装完成之后,点击help,下载依赖包
在这里插入图片描述
选择自己的芯片,选上前面的复选框就可以下载了,前面是绿色就代表已经下载好了。
在这里插入图片描述
包下载好之后就可以了,后面回到home界面,创建新项目。在part name那输入自己的芯片,这里以STMC8T6举例,然后在中间回出现一列信息,点击之后再点击start project就行了。
在这里插入图片描述
点击System Core,进入里面的SYS,在debug那里选择Serial Wire。
在这里插入图片描述
接下来就是配置时钟了,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里。
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上。
在这里插入图片描述
所以我们将hse那里设为Crystal/Ceramic Resonator就行了。
在这里插入图片描述
接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA7,PB9,PC15。设置还没完,点击System core里的GPIO,把点击引脚名,把输出等级改为high,其实这里不改也没什么,只是程序运行开始时初始状态不一样,mode不用改
在这里插入图片描述
点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM。
在这里插入图片描述
进入code generate界面,选择生成初始化.c/.h文件,后面点击generate code就行了。
在这里插入图片描述

(三)stm32CubeMX生成代码

进入对应文件夹,再打开MDK-ARM文件夹,通过keil打开刚刚生成的项目。
在这里插入图片描述
通过这个目录打开main.c文件,到主函数那一部分。
在这里插入图片描述
将下面代码放入主函数中(替代里面的内容)。

SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯
		HAL_Delay(500);//延时0.5s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
		HAL_Delay(500);//延时0.5s		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_Delay(500);//延时0.5s
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_Delay(500);//延时0.5s
		
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(500);//延时0.5s
		
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(500);//延时0.5s
		
  }

(四)编译、烧录

在这里插入图片描述
烧录
在这里插入图片描述
在这里插入图片描述

(五)结果

在这里插入图片描述

2、keil观察3个GPIO端口的输出波形

(一)仿真模式的设置

在使用仿真模式时,需要进行Debug模式设置,下图是Debug设置模式。
在这里插入图片描述

(二)逻辑分析仪

设置完成后,开启调试模式,打开逻辑分析仪。
在这里插入图片描述直接以 PORTX 的形式输入,内容取决于代码中定义的管脚。
在这里插入图片描述

我们需要将Display Type处设置为Bit。
得到波形图:
在这里插入图片描述

四、实验总结

通过这次实验我们了解了什么是串口协议,串口协议和RS—232标准,RS232电平与TTL电平的区别。以及如何用使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,在实验也遇到了很多的问题,但是经过网上查找资料,以及同学的帮助,完成了这次实验,还是挺有收获的,明白了要将理论运用到实践,这样也提高了我们的动手能力,也让我们学到更多的新知识。

五、参考文献

https://blog.csdn.net/qq_43279579/article/details/112213196
https://blog.csdn.net/qq_43279579/article/details/112233696
https://blog.csdn.net/vic_to_ry/article/details/110451036
https://blog.csdn.net/junseven164/article/details/120807138?spm=1001.2014.3001.5501

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值