STM32串口通信

一、题目要求

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

2、 安装 stm32CubeMX,配合Keil,使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:

1)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送;

3、在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。

二、过程呈现

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

(1)串口通信协议

串口通信指两个或两个以上的设备使用串口按位(bit)发送和接收字节。可以在使用一根线发送数据的同时用另一根线接收数据。 串口通信协议就是串口通讯时共同遵循的协议。 协议的内容是每一个bit 所代表的意义。 常用的串口通信协议 有以下几种
1 )、RS-232(ANSI/EIA-232标准) 只支持 点对点, 最大距离 50英尺。最大速度为128000bit/s, 距离越远 速度越慢。 支持全双工(发送同时也可接收)。
2 )、RS-422(EIA RS-422-AStandard),支持点对多一条平衡总线上连接最多10个接收器 将传输速率提高到10Mbps,传输距离延长到4000英尺(约1219米),所以在100kbps速率以内,传输距离最大。支持全双工(发送同时也可接收)。
3 )、 RS-485(EIA-485标准)是RS-422的改进, 支持多对多(2线连接),从10个增加到32个,可以用超过4000英尺的线进行串行通行。速率最大10Mbps。支持全双工(发送同时也可接收)。2线连接时 是半双工状态。

(2)RS—-232标准

RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。

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

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。

RS232标准

在TXD和RXD数据线上: 
  (1)逻辑1为-3~-15V的电压 
  (2)逻辑0为3~15V的电压 
在RTS、CTS、DSR、DTR和DCD等控制线上: 
  (1)信号有效(ON状态)为3~15V的电压 
  (2)信号无效(OFF状态)为-3~-15V的电压 
这是由通信协议RS-232规定的。 
RS-232:标准串口,最常用的一种串行通讯接口。有三种类型(A,B和C),它们分别采用不同的电压来表示on和off。最被广泛使用的是RS-232C,它将mark(on)比特的电压定义为-3V到-12V之间,而将space(off)的电压定义到+3V到+12V之间。传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。

3、了解“USB/TTL转232“模块(以CH340芯片模块为例)的工作原理

CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。为了增加串口通讯的远距离传输及抗干扰能力,RS-232标准使用-15V 表示逻辑 1, +15V 表示逻辑 0。常常会使用 MH340芯片对 USB/TTL与RS-232电平的信号进行转换。

4、HAL库实现串口通信

1)创建工程

打开STMCubeMx,按之前实验的创建方式选择自己的芯片(STM32F103C8T6),然后进入配置页面,点击RCC,将HSE设置为Crystal/Ceramic Resonator

点击SYS,将DeBug设置为Serial Wire,如下

点击USART1,将mode项设置为Asynchronous,如下

点击NVIC,勾选最后一项

点击Project Manager,设置好自己的项目名称,存储路径以及相关配置

点击Code Generator 勾选第二个方框中的第一项,即可生成keil工程文件,如下

2)串口通信代码实现

我们接下来在keil中打开,可以从保存的路径中打开,也可以从前面stm32cubemx生成keil工程文件时打开,如下

点开main.c文件,这里我们要对主函数相关内容进行编写,以完成串口通信,划到主函数部分,需要在while循环前编写如下代码

 char data[] = "\nHello world!\n";

然后要编译while循环里面的内容,具体代码如下

	 HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xFFFF);
     HAL_Delay(1000);

在keil中具体实现如下

3)编译、烧录、串口调试

点击左上角进入编译,以生成hex文件

当如上图所示,0错误0警告且已生成hex文件则表明编译成功,即可进行烧录

打开flymcu软件,将编译时生成的hex文件烧录上去,即

点击开始编程,完成烧录,如下

成功后打开串口调试助手,按题目要求设置参数,即设置USART1 波特率为115200,1位停止位,无校验位具体设置如下图所示

如上图,串口选择与烧录时一致,波特率设置为115200,停止位为1,然后点击打开串口即可,最终实现效果如下图所示

5、HAL库采用中断方式实现串口通信

1)工程的创建

由于此方式只是对前面实现串口通信的扩展功能,所以创建工程操作与前面一样,仅仅只是对代码做出相关修改

2)采用中断方式完成串口通信的代码实现

用keil打开创建好的工程,点开main.c文件,下面要对代码做出相关修改

首先我们要定义好全局变量,这里定义了一个flag以实现中断函数

char c;
int flag=1;
int flag1=0;
char data1[] = "\nhello windows!\n";
char data2[] ="\n stop \n";

然后我们要在main函数前面编写中断函数,具体代码如下

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  {
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='#'){
		flag=0;
		flag1=flag;
		HAL_UART_Transmit(&huart1, (uint8_t *)data2, 15, 0xFFFF);
	}
	
	//当输入的指令为1时,发送提示并改变flag
	if(c=='*')
	{
		flag=1;
		flag1=flag;
	}
	else
	{
		flag=flag1;
	}
	
	//重新设置中断
		HAL_UART_Receive_

此时,要重写主函数,即当输入#(flag=0)时暂停发送,且显示stop,输入*(flag=1)时继续发送,同时设置好接受中断,具体如下

 HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
  while (1)
  {
	if(flag==1)
	 {
	 HAL_UART_Transmit(&huart1, (uint8_t *)data1, 15, 0xFFFF);
     HAL_Delay(500);
	 }
  /* USER CODE END 3 */
  }

到这里,我们的代码编写完成,点击编译即可进行烧录,调试

3)编译、烧录、串口调试

我们点击左上角进行编译,以生成hex文件

如左下角窗口所示,0错误0警告且生成hex文即可

然后可以进行烧录,打开flymcu软件,将生成的hex文件添加上去,然后点击开始编程即可完成烧录,如下图所示

烧录完成后即可打开串口调试助手,仍然是按题目要求设置参数,即设置USART1 波特率为115200,1位停止位,无校验位具体设置如下图所示

如上图,串口选择与烧录时一致,波特率设置为115200,停止位为1,然后点击打开串口即可,最终实现效果如下图所示

6、仿真实现

点击魔法棒,按如下所示配置

打开右上角的放大镜,进入仿真调试界面,然后点击逻辑分析仪

点击setup

点击左上角开始仿真,最终仿真结果如下

三、总结

这次作业的完成对串口通信的了解更近一步,也学会了使用中断方式实现串口通信,虽然还是不能完全独立写出来,但是对自己的收获还是很大的,希望下一次可以更好。

四、参考网址

https://blog.csdn.net/qq_47281915/article/details/121053903

https://blog.csdn.net/qq_47281915/article/details/121063896

https://blog.csdn.net/afadgfansfa/article/details/120956561

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值