题目:Arduino UNO(Atmega328P)通过串行接口组件与上位机 PC 进行双向 通信。PC 机用串口调试助手软件向 Arduino UNO 发送学生自己的学号,Arduino UNO 收到后在 LCD 上显示学生的学号,并且向 PC 机发送 “OK” 。PC 机上的串口调试助手软件接收窗口显示收到的字符串“OK”。
intro
西电 2022 年秋 A测 题2,仅供大家学习参考。
希望能为忙于考研/推免的 XDUer 省点事(
软件安装
干活居然不给软件(
本次用到的软件有4个:
- Proteus:仿真软件;
- Virtual Serial Port Driver(VSPD):用于创建虚拟串口;
- XCOM:用于串口调试(可以换串口调试助手、SSCOM 等其他软件);
- Arduino IDE1.8.19:用于芯片编程;
下载地址与安装教程如下:
proteus 下载
vspd(虚拟串口)、xcom(串口助手)下载
arduino 官网下载(可能得自己挑版本) 或者 百度网盘(提取码 7ed8,exe 安装)
流程
1. 创建虚拟串口
打开 VSPD ,点击右边的 Add pair 创建一对虚拟串口(默认是 COM1 和 COM2 )。
这里的 COM1 到 4 都是虚拟串口,两两一组构成一个虚拟的串口通信线路,多开的两个是用来测试的;COM6 是物理串口,不碰它就是了。
2. 使用 XCOM 测试串口
直接运行 XCOM V2.0.exe
,在右上角选择串口 COM2 后,COM1 留至仿真时使用:
这里打开两个窗口进行测试(COM3 和 COM4):
COM3 确实收到了 COM4 发送的信息,注意这里需要保持 XCOM 打开且停留在接受信息的串口才能收到。
3. Arduino 编程
完整代码如下:
#include <Wire.h>
#include <LiquidCrystal.h> // LCD控制相关的库
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 初始化对象
String str = ""; // 用于暂存后面读取的数据(学号)
// 这部分代码仅在开始运行一次
void setup() {
Serial.begin(9600); // 初始化串口
lcd.begin(16, 2); // 定义LCD的列数和行数
lcd.print("Hello(");
}
// 这部分会无限循环
void loop() {
if (Serial.available()>0){
// 清除LCD上一次显示
lcd.clear();
lcd.println("STUDENT ID");
lcd.setCursor(0, 1);
// 循环读取串口信息
while (Serial.available()>0){
str += char(Serial.read());
delay(10); // 如果不加延迟,可能会无法读取到完整的字符串
}
// LCD显示,返回OK
lcd.print(str);
Serial.println("OK");
str = "";
}
}
打开首选项
显示详细输出,两个都选上
端口选择 COM1:
点击左上角 验证,完成后打开右下角目录(注意AppData是隐藏文件夹):
找到 *.ino.hex
文件,复制出来备用(建议放在后面的 proteus 项目文件夹下)
4. 仿真
用 proteus 打开附件给的项目文件 Serial communication.pdsprj
双击左上角芯片打开设置,这里改为前面的 *.ino.hex
文件,然后确定
双击右下串口组件,设置端口为 COM1:
点击左下角仿真,LCD 有输出(Hello)
XCOM 选择 COM2,输入信息后点击发送
最后结果:
FAQ
1. Arduino IDE 编译后没有文件地址
打开首选项
显示详细输出,两个都选上
2. 编译后没有 *.ino.hex
注意这里生成的 .ino.hex
文件不在项目(源文件)目录下,一般会生成在 C:\\Users\\lenovo\\AppData\\Local\\Temp\\arduino_build_****
目录下
3. hello 显示不出来
确认一下这里是不是改了(重开项目/软件后可能会重置,也可能是上次编辑完忘保存了)
4. 打开 XCOM 报错
打开 XCOM /修改 XCOM 串口时报错如图
可能的原因:
- 之前打开过的虚拟串口关掉后没开(比如昨天 XCOM 使用 COM3 后关掉,今天重新打开 XCOM 但没有开 COM3);
- 虚拟串口被占用(仿真开着,另一个 XCOM 占用着等);
解决:
先关掉 XCOM ,看看 VSPD 里面对应的串口是否开了,是否占用,然后重开。
图中串口后面有 [9600-N-8-1]
之类的就说明该串口被占用(仿真开着 / XCOM 在使用该串口)。可以在 XCOM 中换一下串口,看看这里有没有变化,没有变化就需要重开 XCOM。
5. 关于串口占用
不要在 XCOM 占着 COM1 时跑仿真,也不要两个 XCOM 同时选一个串口。
6. 双击芯片弹出 Internal Exception: access violation in module 'LXLCORE.DLL'[00028A28]
- 尝试用管理员权限打开文件 / proteus
- 尝试重新下载学校的文件
- 新建工程,把原文件的元件整个复制过去(见评论)
最后
这种时间出个A测属实难顶,好在除了找软件麻烦点,其他都是点点调库完事,加油罢(
果然不该留到半夜再肝,刚发现游戏日常忘刷了(淦
ref
VSPD+XCOM+Proteus仿真stm32串口通信
Arduino 串口的使用
Proteus 8.9 模拟仿真Arduino控制点亮LED文章来源:https://www.toymoban.com/news/detail-408971.html
Arduino – LiquidCrystal库文章来源地址https://www.toymoban.com/news/detail-408971.html
到了这里,关于西电A测:串口通信仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!