STM32学习:串口通讯(proteus仿真)

这篇具有很好参考价值的文章主要介绍了STM32学习:串口通讯(proteus仿真)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本次通过CubeMx+proteus进行stm32串口仿真

具体功能:

1、开机后,向串口1发送“Welcome”
2、串口1接收字节指令“0xa1",打开LED1,回传“LED1 OPEN!”
3、串口1接收字节指令“0xa2",关闭LED1,回传“LED1 Close!”
4、在串口发送过程中,打开LED2作为发送数据指示灯

一、相关知识点

STM32学习:串口通讯(proteus仿真)

二、电路搭建与硬件配置

1、proteus电路搭建

1、COMPIM元件

作用:把仿真电路中的数字量映射到计算机的物理端口
接法:将stm32的TX与COMPIM的TX相连,RX与RX相连,而不是像实物那样交叉相连(RX连TX,TX连RX)。STM32学习:串口通讯(proteus仿真)

2、VIRTUAL TERMINAL虚拟终端元件

作用:查看发送的数据信息
接法:将stm32的TX与虚拟终端的RX相连,RX与TX相连
STM32学习:串口通讯(proteus仿真)

3、整体电路:

STM32学习:串口通讯(proteus仿真)

2、CubeMx硬件电路配置

STM32学习:串口通讯(proteus仿真)STM32学习:串口通讯(proteus仿真)STM32学习:串口通讯(proteus仿真)STM32学习:串口通讯(proteus仿真)

三、串口通讯函数与程序编写

1、串口通讯函数

1、阻塞式发送函数

注意:要等待数据发完才能做其他任务(10000为超时等待10000ms后结束发送)
STM32学习:串口通讯(proteus仿真)

2、非阻塞式发送函数

注意:在阻塞式发送的基础上可以中断(Interrupt)
STM32学习:串口通讯(proteus仿真)STM32学习:串口通讯(proteus仿真)

3、阻塞式接收函数

要等待数据接收完才能做其他任务,所以不推荐
STM32学习:串口通讯(proteus仿真)

4、非阻塞式接受

STM32学习:串口通讯(proteus仿真)

5、串口发送完毕中断回调函数

STM32学习:串口通讯(proteus仿真)

2、程序编写

1、宏定义与数据变量设定

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

#define LED1_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
#define LED2_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);

uint8_t Tx_strl[] = "Hello World!\r\n";
uint8_t Tx_str2[] = "LED1_Open!\r\n";
uint8_t Tx_str3[] = "LED1_Close!\r\n";
uint8_t Rx_data = 0;

2、开机串口发送hello world!(main函数)

  /* USER CODE BEGIN 2 */
  LED2_ON();//led2亮作为数据传输指示灯
  HAL_UART_Transmit(&huart1,Tx_strl,sizeof(Tx_strl),1000);//阻塞式发送函数
  LED2_OFF();//led2灭作为数据传输指示灯

3、等待接受串口发来的字符

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	//HAL_UART_Receive_IT(&huart1,&Rx_dat,3);//等待接收字符
	HAL_UART_Receive_IT(&huart1,&Rx_data,1);  
  }

4、中断回调

HAL_UART_Receive_IT()函数执行之后,则进入中断,调用中断回调函数HAL_UART_RxCpltCallback()。
回调函数,根据接收的字符执行对应的操作,执行完相关操作。

//回调函数

void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART1);
	{
		if(Rx_data == 0x4f)
		{
			LED1_ON();
			
			LED2_ON();//led2亮作为数据传输指示灯
			HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),1000);//阻塞式发送函数
			HAL_UART_Receive_IT(&huart1,&Rx_data,1);
			LED2_OFF();//led2灭作为数据传输指示灯
		}
		else if(Rx_data == 0x43)
		{
			LED1_OFF();
			
			LED2_ON();//led2亮作为数据传输指示灯
			HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),1000);//阻塞式发送函数
			LED2_OFF();//led2灭作为数据传输指示灯
			HAL_UART_Receive_IT(&huart1,&Rx_data,1);
		}
	}
}

到此程序编写完毕

四、 proteus仿真与虚拟串口调试

1、工具软件准备

VSPD:虚拟串口软件
XCOM:串口调试工具
上述两个软件安装一路 next 即可。
百度云链接:
链接:https://pan.baidu.com/s/1CC5M5msN-RM-cUCdCMEUiQ?pwd=dfb3
提取码:dfb3

1、串口映射工具

创建虚拟串口。vspd是以串口对形式添加的,比如COM1,COM2成对,那么COM1的数据就只能发到COM2,COM2会自动接收COM1发送的数据。

使用方法:创建串口直接点击Add pair即可
STM32学习:串口通讯(proteus仿真)

2、串口调试工具

选择创建的虚拟串口之后,波特率与停止位的数值需要和程序中编写的一致
STM32学习:串口通讯(proteus仿真)

2、仿真电路调试

STM32学习:串口通讯(proteus仿真)

1、数值匹配

STM32学习:串口通讯(proteus仿真)
虚拟终端:
STM32学习:串口通讯(proteus仿真)STM32学习:串口通讯(proteus仿真)

2、串口调试

1、设置虚拟串口

STM32学习:串口通讯(proteus仿真)

2、串口调试

整体流程:
1.选择对应的虚拟串口
2.根据前面的代码设置对应波特率以及数据停止位
3.打开对应串口
4.开启proteus仿真

配置串口调试助手:STM32学习:串口通讯(proteus仿真)
打开proteus仿真,串口数据发送到串口调试助手
STM32学习:串口通讯(proteus仿真)文章来源地址https://www.toymoban.com/news/detail-437557.html

到了这里,关于STM32学习:串口通讯(proteus仿真)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32学习----RS232串口通讯

    一、RS232相关概念        RS ==Recommend Standard ==推荐标准;         232==标识号,第232号;         时间:1962年         地点:美国         人物:美国电子工业协会 == Electronic Industries Association ==(美国)电子工业协会         事件:发布了一个串行通信的物理接口结合逻

    2024年02月06日
    浏览(52)
  • Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯

    按键:button 电阻:res 先配置LED灯的GPIO 编写LED亮灭的函数 实现按下按键LED灯的状态取反 led.c总代码 先配置按键的GPIO 获取当前按键键值的函数 key.c总代码 5.1 按键按下实现LED亮或者灭 仿真效果图: 5.2 按键按下实现LED状态取反 仿真效果图: 百度网盘 链接:https://pan.baidu.co

    2024年02月07日
    浏览(58)
  • Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    软件准备:keil uVsion 5 和 proteus 8.15 打开proteus8.15 - 新建项目 - 改名 - 一直next 鼠标右键 - 放置 - 元件 - From Libraries 搜索Stm32 - 选择stm32f103c8 画出点亮一个LED灯的原理图 提示,各元器件搜索: 主控芯片:stm32 电阻:res LED灯:led 鼠标右键 - 放置 - 元件 - From Libraries 地和VCC 在左侧

    2024年02月08日
    浏览(59)
  • 【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真

      博主最近进行单片机的仿真,本篇文章主要利用了STM32CubeMX、Keil和Proteus三个软件,为后期的硬件打下基础。文章主要目的是学习软件的使用和单片机的仿真。   本文是我在学习proteus软件和STM32CubeMX过程当中的心得和学习笔记,在学习时已经有C, C++的基础。文章附上了

    2024年02月16日
    浏览(54)
  • 【软件相关】Proteus仿真STM32记录

    【软件相关】Proteus 8入门教程   最近接了一个项目,是基于Proteus仿真STM32的,虽然此前有听过类似的做法,也大概了解一点,但真正实践还是第一次,所以简单记录一下实践经历,本文所有的仿真都是Proteus 8.13.   之前做过基于8086的仿真,但还是和这个不太一样,前前后

    2024年02月02日
    浏览(33)
  • Proteus仿真STM32驱动oled12864

    工具:proteus8、stm32cubemx、keil5 为了完成机电产品课程设计(包装机),使用protues进行仿真。。。 芯片选用stm32f103系列。。。proteus自带的库芯片种类很少。。。 首先使用cubemx:         用stm32cubemx配置相关引脚,我使用的是软件IIC方式。应该不能使用硬件iic!应该不能使

    2024年02月05日
    浏览(40)
  • STM32(2)-串口通讯实际应用:串口屏

    文章以UART基础知识和串口屏实际应用来说明串口的作用。 、 UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的缩写,是一种串行通讯协议,通常用于将计算机或微处理器与其他设备(如传感器、模块、显示器等)进行通信。UART可以将数据以一定速率和格式(

    2024年02月16日
    浏览(40)
  • STM32CubeMX串口通讯

    根据通讯使用的电平标准不同, 串口通讯可分为 TTL 标准及 RS-232 标准 。而STM32的串口是TTL电平标准的。如果需要使用到RS-232则需要一个电平转换芯片。 讲到串口,我们还需要具备这些基础概念。 单工通讯 (1)单工通讯特点很简单,就是只有一个发送端,一个接收端。 从一

    2024年02月02日
    浏览(69)
  • stm32----串口通讯,通过串口控制LED灯

    1.初始化LED灯(根据原理图修改pin和gpio): 2.初始化串口 3.编译中断函数: 以下是完整代码: 效果如下

    2024年02月11日
    浏览(39)
  • 基于stm32的烟雾浓度检测报警proteus仿真设计(仿真+程序+讲解)

    基于STM32的烟雾浓度检测报警仿真设计(仿真+程序+讲解) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:C0085 功能说明: 1、以STM32单片机和MQ-2控制核心设计烟雾浓度检测报警设计; 2、通过液晶屏LCD1602和串口上位机显示烟雾浓度,MV表示检测值,ALM表示报警值

    2024年02月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包