前言

公司的产品嵌入式主机要更换短信模块,临时搞一台。
老模块原来直接做在板子上,这次生产后,同事将老模块吹下来了。

新短信模块是个小模块产品,同事将壳子拆掉,将产品板子塞进主机箱。
新短信模块原来是RS232通讯,过的SP3232, 走的DB9串口。
同事将SP3232拆掉,将短信模块从模组出来的TTL的串口收发和主机箱中MCU的TTL收发连在一起。
用2根排线连接的。

2个板子之间的收发为 A-TX => B-RX, A-RX => B-TX.
2个板子通过供电(220V=>12V开关电源)的GND相连通,用万用表的通断档量过,确实是通的。

看起来没啥问题。
准备写段程序,将老短信模块操作换成新短信模块操作,看起来很容易啊:)

最开始在产品程序上找到发短信的函数,就替换这个函数就行。
结果发串口包后,收不到短信模块的串口回包。这…

我生产的同事从来就没错过。我就在折腾程序,一定是我写错了。
查来查去也看不出错在哪里…
正好下班了,准备申请封闭一天,看看这2个模块之间不能通讯的问题出在哪里。

试验

写专门的测试工程

因为产品程序我只是维护者,没准哪里我没搞对。
先写个HAL库程序试试。
MCU是STM32F103VET6, 就将RCC, SYS, UART4留出来,生成框架程序。然后将收发测试代码写上,看看疗效。
不行啊,没反应,始终没串口回包。

将同事在2个模块之间的排线从中间剪断。

单独测试MCU的TTL串口

因为同事就接了2根通讯线(TX/RX), 我从MCU所在的板子上找到一个GND, 又接出一根线。
查了下淘宝,买过好几个TTL转USB串口的通讯模块。翻了几个零件箱,就找到一个。
将TTL转串口模块和MCU所在模块用3根线连在一起(A-RX => B-TX, A-TX => B-RX, A-GND => B-GND )
刚才写的HAL库测试程序已经在MCU里面,将TTL转串口模块接在本本的USB口。在本本上运行串口助手,按照16进制显示,可以看到MCU发来的内容。用串口助手循环发送一段内容,用JLINK跑MCU的程序,可以看到能接收到本本串口助手发来的内容。

这说明MCU所在板子TTL通讯是好的。

单独测试新短信模块

将TTL转串口模块和新短信模块用3根线连在一起(A-RX => B-TX, A-TX => B-RX, A-GND => B-GND )
将TTL转串口模块接在本本的USB口。
用本本上的串口助手发标准AT指令给短信模块,短信模块回答OK\r\n.

这说明短信模块的TTL通讯是好的。

这说明,我同事帮我做的样机还是靠谱的。
那问题出哪里了?2个模块对一起就不能通讯了?

组合测试2个模块对接在一起的情况

是不是我同事将收发接反了? 看着原理图也不像。他从来就没做错过事情。
将MCU所在模块和新短信模块用3根线连在一起(A-RX => B-TX, A-TX => B-RX, A-GND => B-GND )
还是在MCU上跑,现在能通讯了。

问题解决

比较同事给我搭的样机和我现在能通讯的环境。
唯一的差别就在我多拉了一条GND.
只能估计是2个模块之间的地有电位差吧。但是用外用表量,同事给我搭的样机,2个模块之间的GND确实是通的。

HAL库串口(UART4)测试代码

int main(void)
{/* USER CODE BEGIN 1 */int RxLen = 0;HAL_StatusTypeDef rc = HAL_OK;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_UART4_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(LED_RUN_GPIO_Port, LED_RUN_Pin, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(LED_RUN_GPIO_Port, LED_RUN_Pin, GPIO_PIN_SET);// huart4// HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);strcpy((char*)sz_buf, "AT\r\n");rc = HAL_UART_Transmit(&huart4, sz_buf, 4, 400); // 这里超时没用, 硬件正常直接就发出去了.if (HAL_OK != rc) {HAL_Delay(100);continue;}// HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);memset(sz_buf, 0, sizeof(sz_buf));// AT指令回包不定长,给出的接收缓冲区一定比回包长度长,// 这里的超时接收500ms有用. 每次都是HAL_TIMEOUTrc = HAL_UART_Receive(&huart4, sz_buf, sizeof(sz_buf), 500); RxLen = huart4.RxXferSize - huart4.RxXferCount;if ((HAL_OK != rc) && (HAL_TIMEOUT != rc)) {HAL_Delay(100);continue;}sz_buf[10] = (uint8_t)RxLen;}/* USER CODE END 3 */
}

解决了一次模块间TTL串口不能通讯的问题相关推荐

  1. TTL串口传输时,当收发线的长度和地线的长度不一样时,发生数据传输错误

    今天做实验的时候,要用到两块32的板子进行通讯,在这里将其命名为A板和B板,使用的是32引脚直接引出的TTL串口,由于忘记带导线了,所以在做实验的时候找了两根长短不一的线,长线大概一米用在A板和B板的 ...

  2. DIY一款4路USB转TTL串口调试模块

    目录 1.电源设计 2.USB集线器设计 3.USB转TTL设计 4.模块效果 最近调测程序经常用到单片机的三个串口同时交互通信,我使用1路USB转TTL串口调试模块不断切换,不仅影响观察效果,更是劳 ...

  3. usb转ttl_[开源]双TYPEC转TTL串口模块

    在工作中经常会用到USB转TTL串口调试工具.网上买的用的不顺手,所以做了一个.最终效果: 渲染图 实物图 学习目的 做一个USB转串口模块,使用 学习渲染软件keyshot 使用到的工具: 立创ED ...

  4. 解决行内块元素(inline-block)之间的空格或空白问题

    解决行内块元素(inline-block)之间的空格或空白问题 参考文章: (1)解决行内块元素(inline-block)之间的空格或空白问题 (2)https://www.cnblogs.com/ ...

  5. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  6. USB2.0转TTL串口硬件实现

    前言 刚好做XILINX ZYNQ ultrascale芯片的硬件,为了方便PS开发,ZYNQ ULTRASCALE对外接出一组TTL串口,为了方便和PC连接,对外接口希望做成micro USB. 概 ...

  7. 高速USB转4串口产品设计-TTL串口

    基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口.CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Wind ...

  8. 8路TTL串口转以太网串口服务器芯片EBT3002功能

    EBT3002串口服务器芯片简介 EBT3002 以太网芯片是实现8路TTL串口数据与以太网数据互相转换的以太网串口服务器芯片;该以太网芯片具有多种Modbus网关模式以及TCP/DUP/MQTT/H ...

  9. ch340 linux调试乱码,关于新百魔和m101 ttl串口乱码问题解决

    朋友拿过来一台新百魔和m101 1 r, i; @9 ?( d" K  W& _开机界面卡在第一屏, 9 a% @" I# D0 e; s0 \用""短 ...

最新文章

  1. [YTU]_2921( Shape系列-7)
  2. java 深克隆(深拷贝)与浅克隆(拷贝)详解
  3. al-khaser 调试器,虚拟机检测工具
  4. 简单介绍:什么是Python?Python好学吗?
  5. 第 2 章 OpenStack 架构 - 017 - 部署 DevStack
  6. SCSI、FC、iSCSI三大协议概述
  7. signed 与 unsigned 有符号和无符号数
  8. 【记录】jenkins 安装及环境配置(二)
  9. mysql二进制日志特点_MySQL二进制日志分析-概述篇
  10. python 血缘进程共享数据
  11. python 类创建
  12. 深度学习之常用优化方法篇
  13. 【VUE】npm run dev b报错 “'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。”
  14. 真·不怪云原生:探寻IT大厂逐渐云化的秘密!
  15. 软件版本的GA、RC的具体含义
  16. 自定义view:百分比圆弧动画显示
  17. dsn服务器显示问题,DNS 服务器出现4004错误解决方法
  18. 华为HCNA教程(笔记)
  19. 云原生之使用docker部署centos系统测试环境
  20. Go云原生高性能编程技法,值得观看

热门文章

  1. Java的 Class字节码文件结构和内容全面解析【两万字】
  2. Category的用法
  3. RAD Studio/Delphi 2010 3615下载+破解
  4. joan sola_Joan Touzet在CouchDB和Apache方式上
  5. 以服务为驱动 看阿里云重新定义云计算
  6. 基于GINA/凭证提供程序的自助密码管理
  7. 商业智能(Business Intelligence,简称:BI)
  8. 中信soeasy网络硬盘 瑞星杀毒软件升级包
  9. 十二、阿里云 maven 配置
  10. linux番茄时钟,Linux 番茄时钟 定时 取消 快捷方式