切换到宽版
  • 5510阅读
  • 5回复

[ARM]ARDUINO:用STM32做个串口监视器 [复制链接]

上一主题 下一主题
离线huaweiwx
 

发帖
1372
M币
2167
专家
65
粉丝
297
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2017-10-20
序:
        在帖子:ARDUINO 小制作:14行代码做个stm32 usb转串口|http://bbs.mydigit.cn/read.php?tid=2247536 看似数行语句非常简单,实则功能强大,因为我们在此基础上能做无限的扩充;

需求:有时候,我们想了解pc和单片机或设备和设备间通过串口交换了那些信息,通常我们用两种方法:
1 淘宝上的逻辑分析仪,可以抓个通讯片段,分析个波特率等性息;
2 也有些串口调试软件,带有串口监视功能,但部分软件需要 驱动和注册,还有个限制是这只能用于pc和设备的性息监视;

在这里,我们要自己做个串口监视器,插在串口链路里,后台将双向通讯内容dump出来;
直接上源程序:
  1. #define com1 Serial1
  2. #if 1
  3. # define com2 Serial2
  4. # define comspy SerialUSB
  5. #else
  6. # define com2 SerialUSB
  7. # define comspy Serial2
  8. #endif
  9. #define led LED_BUILTIN
  10. void setup() {
  11. uint8_t cn = 0;
  12. pinMode(led, OUTPUT);
  13. SerialUSB.begin(115200);
  14. Serial1.begin(115200);
  15. Serial2.begin(115200);
  16. while (!SerialUSB) {
  17.   digitalToggle(led);
  18.   delay(100);
  19. }
  20. while (!comspy.available()) {
  21.   digitalToggle(led);
  22.   delay(500);
  23. }
  24. comspy.println("serialSpy V0.1 by huaweiwx@sina.com");
  25. comspy.print("please connecting from coms to devieces,then power on the devices");
  26. for (;;) {
  27.   if (com1.available()) {
  28.    uint8_t c = com1.read();
  29.    com2.write(c);
  30.    if (cn == 1) {
  31.      comspy << " " << _HEX(c);
  32.    } else {
  33.     comspy << "\ncom1: " << _HEX(c);
  34.     cn = 1;
  35.    }
  36.   }
  37.   if (com2.available()) {
  38.    uint8_t c = com2.read();
  39.    com1.write(c);
  40.    if (cn == 2) {
  41.     comspy << " " << _HEX(c);
  42.    } else {
  43.     comspy << "\ncom2: " << _HEX(c);
  44.     cn = 1;
  45.    }
  46.   }
  47. }
  48. }
  49. void loop() {}
程序简单说明:
1~8 定义了转接的串口com1 和com2,comspy 是我们的监听口;com1 是 Serial1(PA9/10)
其中监听口可以是 usb虚拟串口 SerialUSB 或者是Serial2(PA2/3), 这取决于line2 取值是1 还是 0;
16~19 等待pc机 usb虚拟串口的驱动准备好,led 快闪;
20~23 等待我在监视口发送任意一个字符(如回车),否则 每秒一次led闪亮;
30~35 在com1 收到一个信息转送到com2后我们向监听口dump出来(16进制)用空格作为间隔;如果上一次dump数据是com2则先发送一个回车;
40~45 同30~35 dump com2 数据;
使用:
先将usb转串口pc,如果这作为comspy口,则用usb转串口连接并插上pc,则通过串口调试软件打开串口;
将com1 和com2 插入监视的通讯链路中;
向 comspy口发个任意字符;启动监听;
将com1 com2 所连接设备 上电并运行;
此时你就可以看到全部通讯内容了,如性息量很大,可以将此在pc上保存为文件,慢慢分析;





本帖最近打赏记录:共4条打赏M币+72
离线蓝_猫

发帖
15149
M币
0
专家
11
粉丝
1220
只看该作者 1楼 发表于: 2017-10-20
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线zzs09

发帖
569
M币
574
专家
4
粉丝
19
只看该作者 2楼 发表于: 2017-10-20
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线jpdd521

发帖
25694
M币
7956
专家
15
粉丝
350
只看该作者 3楼 发表于: 2017-10-20
请登录后查看
本帖最近打赏记录:共1条打赏M币+20
离线dulme

发帖
3617
M币
7511
专家
2
粉丝
145
只看该作者 4楼 发表于: 2017-10-20
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线cao57508

发帖
2265
M币
3657
专家
9
粉丝
85
只看该作者 5楼 发表于: 2017-10-20
请登录后查看
本帖最近打赏记录:共1条打赏M币+20
快速回复
限80 字节
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
 
上一个 下一个