STM32学习:串口通讯仿真实验(Proteus模拟)

文章目录

  • 前言
  • 一、相关知识点
  • 二、电路搭建与硬件配置
  • 1、proteus电路搭建
  • 1、COMPIM元件
  • 2、VIRTUAL TERMINAL虚拟终端元件
  • 3、整体电路:
  • 2、CubeMx硬件电路配置
  • 三、串口通讯函数与程序编写
  • 1、串口通讯函数
  • 1、阻塞式发送函数
  • 2、非阻塞式发送函数
  • 3、阻塞式接收函数
  • 4、非阻塞式接受
  • 5、串口发送完毕中断回调函数
  • 2、程序编写
  • 1、宏定义与数据变量设定
  • 2、开机串口发送hello world!(main函数)
  • 3、等待接受串口发来的字符
  • 4、中断回调
  • 四、 proteus仿真与虚拟串口调试
  • 1、工具软件准备
  • 1、串口映射工具
  • 2、串口调试工具
  • 2、仿真电路调试
  • 1、数值匹配
  • 2、串口调试
  • 1、设置虚拟串口
  • 2、串口调试

  • 前言

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

    具体功能:

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

    一、相关知识点

    请添加图片描述

    二、电路搭建与硬件配置

    1、proteus电路搭建

    1、COMPIM元件

    作用:把仿真电路中的数字量映射到计算机的物理端口
    接法:将stm32的TX与COMPIM的TX相连,RX与RX相连,而不是像实物那样交叉相连(RX连TX,TX连RX)。请添加图片描述

    2、VIRTUAL TERMINAL虚拟终端元件

    作用:查看发送的数据信息
    接法:将stm32的TX与虚拟终端的RX相连,RX与TX相连
    请添加图片描述

    3、整体电路:

    请添加图片描述

    2、CubeMx硬件电路配置

    请添加图片描述请添加图片描述请添加图片描述请添加图片描述

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

    1、串口通讯函数

    1、阻塞式发送函数

    注意:要等待数据发完才能做其他任务(10000为超时等待10000ms后结束发送)
    请添加图片描述

    2、非阻塞式发送函数

    注意:在阻塞式发送的基础上可以中断(Interrupt)
    请添加图片描述请添加图片描述

    3、阻塞式接收函数

    要等待数据接收完才能做其他任务,所以不推荐
    请添加图片描述

    4、非阻塞式接受

    请添加图片描述

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

    请添加图片描述

    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即可
    请添加图片描述

    2、串口调试工具

    选择创建的虚拟串口之后,波特率与停止位的数值需要和程序中编写的一致
    请添加图片描述

    2、仿真电路调试

    请添加图片描述

    1、数值匹配

    请添加图片描述
    虚拟终端:
    请添加图片描述请添加图片描述

    2、串口调试

    1、设置虚拟串口

    请添加图片描述

    2、串口调试

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

    配置串口调试助手:请添加图片描述
    打开proteus仿真,串口数据发送到串口调试助手
    请添加图片描述

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32学习:串口通讯仿真实验(Proteus模拟)

    发表回复