STM32 - 解决一次下位机偶校验收包乱码的问题
问题描述
我们有一个带IP的网口转串口的小设备,用在现场,接在路由器上,从网络来和485设备来通讯。
现场有很多485设备,如果是9600/n/8/1, 通讯没问题;如果校验不是无校验,我们做好的应用,就无法和设备通讯。
这设备固件是2017年写的,现在没人维护了。用起来没发现问题。
以前遇到过有校验的情况,当时是联系设备厂商,让他们指导如何将设备通讯参数改为无校验,就能通讯了。
这次在现场的设备是台空调,现场工程师在仪表面板中提供的功能中,并没有发现如何将空调的通讯参数改为无校验的UI界面。正在和厂家联系。
我从研发的角度看,公司有网转串设备的同型号现货,我可以先验证一下,是否真的是网转串设备本身不支持有校验的通讯方式。
我和同事做了测试,他从一台计算机上,从网口向设备的输入端网口发数据,我从设备的485输出端口接一个485转串口,在电脑上等着他发的数据。
当通讯参数为9600/n/8/1时,可以收到他发来的原样数据。
当通讯参数为9600/偶校验/8/1时,我这边的电脑调试助手收到的是乱码,他发来3个16进制字节,我收到4个16进制字节乱码。乱码和原样数据没人任何关系。
尝试解决
既然确定是设备有问题,从svn上迁出这个设备的固件工程看了一下。
我第一感觉是串口初始化参数有问题。
连上仿真器,单步一下,看下在校验方式设置时,是否有区别?
没看出区别。
去网上查STM32接收乱码的问题,网上说到一个上位机(e.g. 串口助手)数据长度为8,下位机(e.g. STM32固件)的数据长度要设为9。说是数据长度是数据位长度 + 停止位的和。
试了一下,将数据位设置位9, 可以通讯了。
去查一下,这个上位机数据长度为8,下位机数据长度必须设置为9,这个说法是从哪来的?没查到。
官方文档没说法。官方F1固件库中串口的例子工程,都是直接给串口通讯参数赋值,并没有根据上位机通讯参数来设置下位机通讯参数的例子。
那我估计,可能是前面的同学,自己试出来的。比如8位不行,又没有其他解决方法,那还有个9位可以用一下,试了一下好使这样子。
我们工程中,通讯参数是通过udp通讯,先设置到设备中,设备重启后,读通讯参数,然后串口初始化。
void STM32_UART1_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); //UART时钟配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = setinfo.Device_Baudrate; //比特率设定if(setinfo.USART_WordLength==7){USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8数据位长度 }else if(setinfo.USART_WordLength==8){USART_InitStructure.USART_WordLength = USART_WordLength_9b; //9数据位长度}
我们实施的同事,以前遇到这种有校验的方式,都是请厂家工程师指导我们改设备通讯参数,甚至跪求厂家工程师帮我们直接刷无校验的实现
STM32 - 解决一次下位机偶校验收包乱码的问题相关推荐
- 移动机器人下位机软件
文章目录 前言 一.串口通信部分 二.PWM调速 三.编码器数据获取 四.PID速度控制 五.里程计数据计算 总结 前言 移动机器人的控制系统软件部分分为上位机软件与下位机软件两部分,二者之间通过串口 ...
- 用USB代替网络通讯,实现Cartographer上位机与下位机之间的消息传递
任务动机:用USB代替网络通讯,实现Cartographer上位机与下位机之间的消息传递. 任务描述:根据任务动机,研发实现用USB代替网络通讯,形成文档. 1. 在Toybrick-RK3399 P ...
- java实现上位机与下位机串口通信
串口通信是在工程应用中很常见.在上位机与下位机通讯过程中常通过有线的串口进行通信,在低速传输模式下串口通信得到广泛使用.在说个之前先来简单解释一下上位机与下位机的概念. 上位机与下位机 通常上位机指的 ...
- 【STM32实战】机械臂快递分拣系统(一)——机械臂控制程序(下位机)编写
[STM32实战]机械臂快递分拣系统(一)--机械臂控制程序(下位机)编写 前言 题目分析 工程模板生成 蓝牙模块的使用 蓝牙接收数据解析与机械臂控制 测试 前言 近期回校上最后一门课,刚好是做机械臂 ...
- STM32遥控小车下位机及硬件连接部分(Keil MDK5平台的C++编程)
STM32蓝牙控制小车 简介 一.硬件总体介绍 1. L298N电机驱动模块 2. JDY-31蓝牙模块 3. 电源组成 4. 单片机 二.单片机程序介绍 1. main.c文件 2. bluetoo ...
- 计算机基础-工控机、上位机、下位机、stm32、单片机
工控机 定义:(Industrial Personal Computer,IPC)即工业控制计算机,主要用于工业生产上. 性能:采用全钢机箱,抗震性能好,抗电磁干扰,抗冲击. 结构:包括CPU.io外 ...
- 关于Qt上位机与下位机stm32数据传输的解析问题(一)
在制作上位机中,我们常常要把单片机上的数据,比如曲线图.电机速度.信号频率幅值等显示在上位机软件中,那么就需要下位机方将数据不断传给上位机以在Qt的QLCDNumber或者Qchart不断刷新,这是上 ...
- 基于STM32C8T6、ESP8266-01S、JavaWeb、JSP、Html、JavaScript、Android、服务器和客户端设计、上位机和下位机设计等技术融合的物联网智能监控系统设计与实现
系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...
- Labview通过RS422通讯接口PC与下位机通信
前言:最近做的一个关于串口通信的小项目:具体功能就是实现PC发送指令控制下位机的转动,下位机收到指令并返回响应指令给上位机,完成一问一答式串口通信.之前处理的是电脑发送数据的格式问题,这次解决的是另外 ...
最新文章
- 2016 linux发行版排行_灵越7590 安装 linux (manjaro-gnome)
- YOLOv2/YOLO9000 《YOLO9000: Better, Faster, Stronger》论文笔记
- linux 文件系统---类型、创建、
- 121 Best Time to Buy and Sell Stock
- STM32移植UCGUI3.90笔记
- namespace关键字-1
- BZOJ5336 TJOI2018 party 【状压DP】*
- 一个 TypeScript keyof 泛型用法
- HTML之文本相关标签
- 过度使用微信,正在让人越来越焦虑
- 浅谈Android中的MVP架构
- 华为认证hcia含金量_华为HCIA认证含金量如何?
- 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
- python爬取喜马拉雅FM音频
- 新用户腾讯云国外服务器2核4G服务器使用攻略
- MyBatis 插件之拦截器(Interceptor),拦截查询语句
- 学习 FPGA 经验与书籍分享。
- C语言 输入矩形的长和宽 求矩形面积
- C# 把时间转为秒_微信 1秒语音助手/附带安卓教程
- 利用类权重来改善类别不平衡