Proteus+VSPD实现仿真stm32虚拟串口

工具软件准备

  1. stm32 CubeMX
    用于创建stm32工程,如果不使用Hal库的话也可以直接用keil创建固件库工程,非必需,本实验采用CubeMX建立工程
  2. keil5 / IAR
    用于编写程序。
  3. Proteus
    用于绘制电路仿真原理图。
  4. VSPD
    VSPD是一款虚拟串口软件,VSPD下载链接:https://pan.baidu.com/s/126ZXjs6z9E8mnMDLybnfIg
    提取码:xama
    安装以后打开,创建虚拟串口。vspd是以串口对形式添加的,比如COM1,COM2成对,那么COM1的数据就只能发到COM2,COM2会自动接收COM1发送的数据。
    在这里插入图片描述
    如图,我们就成功创建了一对虚拟串口。
  5. 串口调试助手
    如XCOM等均可。

Proteus工程

新建Proteus工程后,快捷键P打开元件库,选择MCU芯片型号,我这里使用stm32f103c6,并且添加其他元件,其中复位电路和外部晶振不是必需的,可以不用添加。
此外,我们需要使用DB9的串口,元件库搜索COMPIM。将stm32的TX与COMPIM的TX相连,RX与RX相连,而不是像实物那样交叉相连(RX连TX,TX连RX)。
在这里插入图片描述
COMPIM选项配置:
在这里插入图片描述

CubeMX工程配置

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

串口收发程序

关于串口通信参考博客:https://blog.csdn.net/weixin_43116606/article/details/104222528

此处仅贴出部分关键代码:

/* USER CODE BEGIN 2 */
 HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
 user_main_printf("hello,"带火星的小木条!");
  /* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    char *pCmd = NULL;
    uint8_t len;
 switch(aRxBuffer){
        case '1':
            pCmd = "command 1\r\n";
            len  = strlen(pCmd);
            break;
        case '2':
            pCmd = "command 2\r\n";
            len  = strlen(pCmd);
            break;
        case '3':
            pCmd = "command 3\r\n";
            len  = strlen(pCmd);
            break;
    case '4':
            pCmd = "command 4\r\n";
            len  = strlen(pCmd);
            break;
        default:
            pCmd = "command cmd\r\n";
            len  = strlen(pCmd);
            break;
 }
  HAL_UART_Transmit(&huart1, (uint8_t *)pCmd, len,0xFFFF);
 HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);  
}
/* USER CODE END 4 */

虚拟串口仿真

回到Proteus,双击stm32芯片,加载hex文件,同时设置晶振为8M。
在这里插入图片描述
打开串口调试助手,选择COM2,波特率同样为9600。
在这里插入图片描述
先打开串口,然后运行Proteus仿真工程。
在这里插入图片描述
PS:虚拟串口用完以后要记得删除,不然会一直占用串口哟
在这里插入图片描述

发布了17 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43116606/article/details/104333946