Proteus+VSPD仿真stm32串口
工具软件准备
- stm32 CubeMX
用于创建stm32工程,如果不使用Hal库的话也可以直接用keil创建固件库工程,非必需,本实验采用CubeMX建立工程 - keil5 / IAR
用于编写程序。 - Proteus
用于绘制电路仿真原理图。 - VSPD
VSPD是一款虚拟串口软件,VSPD下载链接:https://pan.baidu.com/s/126ZXjs6z9E8mnMDLybnfIg
提取码:xama
安装以后打开,创建虚拟串口。vspd是以串口对形式添加的,比如COM1,COM2成对,那么COM1的数据就只能发到COM2,COM2会自动接收COM1发送的数据。
如图,我们就成功创建了一对虚拟串口。 - 串口调试助手
如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:虚拟串口用完以后要记得删除,不然会一直占用串口哟