解决了一次模块间TTL串口不能通讯的问题
前言
公司的产品嵌入式主机要更换短信模块,临时搞一台。
老模块原来直接做在板子上,这次生产后,同事将老模块吹下来了。
新短信模块是个小模块产品,同事将壳子拆掉,将产品板子塞进主机箱。
新短信模块原来是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串口不能通讯的问题相关推荐
- TTL串口传输时,当收发线的长度和地线的长度不一样时,发生数据传输错误
今天做实验的时候,要用到两块32的板子进行通讯,在这里将其命名为A板和B板,使用的是32引脚直接引出的TTL串口,由于忘记带导线了,所以在做实验的时候找了两根长短不一的线,长线大概一米用在A板和B板的 ...
- DIY一款4路USB转TTL串口调试模块
目录 1.电源设计 2.USB集线器设计 3.USB转TTL设计 4.模块效果 最近调测程序经常用到单片机的三个串口同时交互通信,我使用1路USB转TTL串口调试模块不断切换,不仅影响观察效果,更是劳 ...
- usb转ttl_[开源]双TYPEC转TTL串口模块
在工作中经常会用到USB转TTL串口调试工具.网上买的用的不顺手,所以做了一个.最终效果: 渲染图 实物图 学习目的 做一个USB转串口模块,使用 学习渲染软件keyshot 使用到的工具: 立创ED ...
- 解决行内块元素(inline-block)之间的空格或空白问题
解决行内块元素(inline-block)之间的空格或空白问题 参考文章: (1)解决行内块元素(inline-block)之间的空格或空白问题 (2)https://www.cnblogs.com/ ...
- 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)
[STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...
- USB2.0转TTL串口硬件实现
前言 刚好做XILINX ZYNQ ultrascale芯片的硬件,为了方便PS开发,ZYNQ ULTRASCALE对外接出一组TTL串口,为了方便和PC连接,对外接口希望做成micro USB. 概 ...
- 高速USB转4串口产品设计-TTL串口
基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口.CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Wind ...
- 8路TTL串口转以太网串口服务器芯片EBT3002功能
EBT3002串口服务器芯片简介 EBT3002 以太网芯片是实现8路TTL串口数据与以太网数据互相转换的以太网串口服务器芯片;该以太网芯片具有多种Modbus网关模式以及TCP/DUP/MQTT/H ...
- ch340 linux调试乱码,关于新百魔和m101 ttl串口乱码问题解决
朋友拿过来一台新百魔和m101 1 r, i; @9 ?( d" K W& _开机界面卡在第一屏, 9 a% @" I# D0 e; s0 \用""短 ...
最新文章
- [YTU]_2921( Shape系列-7)
- java 深克隆(深拷贝)与浅克隆(拷贝)详解
- al-khaser 调试器,虚拟机检测工具
- 简单介绍:什么是Python?Python好学吗?
- 第 2 章 OpenStack 架构 - 017 - 部署 DevStack
- SCSI、FC、iSCSI三大协议概述
- signed 与 unsigned 有符号和无符号数
- 【记录】jenkins 安装及环境配置(二)
- mysql二进制日志特点_MySQL二进制日志分析-概述篇
- python 血缘进程共享数据
- python 类创建
- 深度学习之常用优化方法篇
- 【VUE】npm run dev b报错 “'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。”
- 真·不怪云原生:探寻IT大厂逐渐云化的秘密!
- 软件版本的GA、RC的具体含义
- 自定义view:百分比圆弧动画显示
- dsn服务器显示问题,DNS 服务器出现4004错误解决方法
- 华为HCNA教程(笔记)
- 云原生之使用docker部署centos系统测试环境
- Go云原生高性能编程技法,值得观看