精华内容
下载资源
问答
  • 关于STM32 USART DMA数据发送,串口助手接收显示乱码问题总结 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解...

    关于STM32 USART DMA数据发送,串口助手接收显示乱码问题总结

    串口助手打印出现乱码原因:

    1. 串口助手波特率与程序波特率不一致;
    2. 硬件共地;
    3. 发送变量在赋值之前一定要清空,发送完之前一定不要再次填充数据;

    关于第3点做一下说明
    e.g

    void IMU_DataPrintf(void)
    {
        static u32 tick;
    	static char data_buffer[100];
    	memset(data_buffer, 0x00, sizeof(char) * 100);//清零
    
    	if(HAL_GetTick() - tick > 1)//1ms发送一次
    	{
    		tick  = 	HAL_GetTick() ;
    		sprintf(data_buffer,"\nGx:%d,Gy:%d,Gz:%d", imu_test.gyro_x, imu_test.gyro_y, imu_test.gyro_z);
    		
    		Comm_SendData((uint8_t *)data_buffer, strlen(data_buffer));	//发送接口
    	}	
    }
    

    将IMU_DataPrintf()函数放在主循环里面跑,串口助手接收到的数据是乱码;
    原因:主循环里程序跑得很快,data_buffer里面的数据还没发送完,马上就会执行memset(data_buffer, 0x00, sizeof(char) * 100);导致data_buffer被改变;

    将代码改为

    void IMU_DataPrintf(void)
    {
        static u32 tick;
    	static char data_buffer[100];
    	
    	if(HAL_GetTick() - tick > 1)//1ms发送一次
    	{
    		tick  = 	HAL_GetTick() ;
    		memset(data_buffer, 0x00, sizeof(char) * 100);//清零
    		sprintf(data_buffer,"\nGx:%d,Gy:%d,Gz:%d", imu_test.gyro_x, imu_test.gyro_y, imu_test.gyro_z);
    		
    		Comm_SendData((uint8_t *)data_buffer, strlen(data_buffer));	//发送接口
    	}	
    }
    

    注意:data_buffer最好是静态的;

    展开全文
  • 有没有小伙伴跟我一样用串口助手接收传感u器数据的时候显示乱码呢??(手动狗头doge)。。 只需一招 手动把晶振振荡器的频率改为 11.0592MHz

    有没有小伙伴跟我一样用串口助手接收传感u器数据的时候显示乱码呢??(手动狗头doge)。。
    在这里插入图片描述
    只需一招
    手动把晶振振荡器的频率改为 11.0592MHz
    在这里插入图片描述

    展开全文
  • python在调用pyserial通信的时候,接收串口调试助手或者设备发送过来的HEX值,在特定位置会出现错误编码,接收到的不是十六进制数据,而是一些乱符号,' ', '!', '"', '#', '$', '%', '&', '\'', '('...

            python在调用pyserial通信的时候,接收到串口调试助手或者设备发送过来的HEX值,在特定位置会出现错误编码,接收到的不是十六进制数据,而是一些乱符号,' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/'等等,这个是因为serial中没有对应的解码机制,python中带有的decode()解码对特定的一部分HEX值可以解决,对于其他是不能解决的,如果我们要正确接收HEX值应该如果解决呢?在这里HEX值只需要写两位。

            解决这个问题我们首先要是到ASCII与HEX的关系,这里有两个映射表,分别对应发送端的HEX值和接收端的HEX值,在这里涉及到的转换命名如下:发送端以ascii_data命名,接收端以hex_data命名。

    ascii_data = [['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0A', '0B', '0C', '0D', '0E', '0F'],
                  ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1A', '1B', '1C', '1D', '1E', '1F'],
                  ['20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2A', '2B', '2C', '2D', '2E', '2F'],
                  ['30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3A', '3B', '3C', '3D', '3E', '3F'],
                  ['40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4A', '4B', '4C', '4D', '4E', '4F'],
                  ['50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5A', '5B', '5C', '5D', '5E', '5F'],
                  ['60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6A', '6B', '6C', '6D', '6E', '6F'],
                  ['70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7A', '7B', '7C', '7D', '7E', '7F'],
                  ['80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8A', '8B', '8C', '8D', '8E', '8F'],
                  ['90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9A', '9B', '9C', '9D', '9E', '9F'],
                  ['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF'],
                  ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'BA', 'BB', 'BC', 'BD', 'BE', 'BF'],
                  ['C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'CA', 'CB', 'CC', 'CD', 'CE', 'CF'],
                  ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'DA', 'DB', 'DC', 'DD', 'DE', 'DF'],
                  ['E0', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'EA', 'EB', 'EC', 'ED', 'EE', 'EF'],
                  ['F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF']]
    
    hex_data = [['\\x00', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\x07', '\\x08', '\\t', '\\n', '\\x0b', '\\x0c','\\r', '\\x0e', '\\x0f'],
        ['\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', '\\x18', '\\x19', '\\x1a', '\\x1b', '\\x1c', '\\x1d', '\\x1e', '\\x1f'],
        [' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/'],
        ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?'],
        ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'],
        ['P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\\\', ']', '^', '_'],
        ['`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'],
        ['p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '\\x7f'],
        ['\\x80', '\\x81', '\\x82', '\\x83', '\\x84', '\\x85', '\\x86', '\\x87', '\\x88', '\\x89', '\\x8a', '\\x8b', '\\x8c', '\\x8d', '\\x8e', '\\x8f'],
        ['\\x90', '\\x91', '\\x92', '\\x93', '\\x94', '\\x95', '\\x96', '\\x97', '\\x98', '\\x99', '\\x9a', '\\x9b', '\\x9c', '\\x9d', '\\x9e', '\\x9f'],
        ['\\xa0', '\\xa1', '\\xa2', '\\xa3', '\\xa4', '\\xa5', '\\xa6', '\\xa7', '\\xa8', '\\xa9', '\\xaa', '\\xab', '\\xac', '\\xad', '\\xae', '\\xaf'],
        ['\\xb0', '\\xb1', '\\xb2', '\\xb3', '\\xb4', '\\xb5', '\\xb6', '\\xb7', '\\xb8', '\\xb9', '\\xba', '\\xbb', '\\xbc', '\\xbd', '\\xbe', '\\xbf'],
        ['\\xc0', '\\xc1', '\\xc2', '\\xc3', '\\xc4', '\\xc5', '\\xc6', '\\xc7', '\\xc8', '\\xc9', '\\xca', '\\xcb', '\\xcc', '\\xcd', '\\xce', '\\xcf'],
        ['\\xd0', '\\xd1', '\\xd2', '\\xd3', '\\xd4', '\\xd5', '\\xd6', '\\xd7', '\\xd8', '\\xd9', '\\xda', '\\xdb', '\\xdc', '\\xdd', '\\xde', '\\xdf'],
        ['\\xe0', '\\xe1', '\\xe2', '\\xe3', '\\xe4', '\\xe5', '\\xe6', '\\xe7', '\\xe8', '\\xe9', '\\xea', '\\xeb', '\\xec', '\\xed', '\\xee', '\\xef'],
        ['\\xf0', '\\xf1', '\\xf2', '\\xf3', '\\xf4', '\\xf5', '\\xf6', '\\xf7', '\\xf8', '\\xf9', '\\xfa', '\\xfb', '\\xfc', '\\xfd', '\\xfe', '\\xff']]
    

            有了这两张表,如果我们是接收串口助手或者设备发送过来的数据出现16进制乱码的时候,我们可以通过ascii_to_hex_dict和hex_to_ascii_dict两张字典进行解码。字典打吗如下:

        def ascii_to_hex_dict(ascii_data=ascii_data,hex_data=hex_data):#对应的字典编码
            ascii_to_hex_dict={}
            for i in range(len(ascii_data)):
                for j in range(len(ascii_data[0])):
                    name=ascii_data[i][j]
                    name_value=hex_data[i][j]
                    ascii_to_hex_dict[name]=name_value
            return ascii_to_hex_dict
    
        def hex_to_ascii_dict(ascii_data=ascii_data,hex_data=hex_data):#对应的字典编码
            hex_to_ascii_dict={}
            for i in range(len(ascii_data)):
                for j in range(len(ascii_data[0])):
                    name=hex_data[i][j]
                    name_value=ascii_data[i][j]
                    hex_to_ascii_dict[name]=name_value
            return hex_to_ascii_dict

            调用这两个字典后,会有一个返回值,我们只需要向返回值中输入需要解码的单个字符就行。tmp=hex_to_ascii_dict()可以解决串口调试助手发送过来的HEX值出现乱码的问题,在serial采用read接收单个字符,将接收的字符进行data=str(data)[:-1][2:]处理后,打印print(tmp[data])就可以显示正确的HEX值了;另外一个的使用相同。如果数据多,要接收一串数据,自己通过数组将接收到的单个数据append到数组中,并做相应判断来判断当前数据是否是自己想要的数据。

            此外,在python中有这么一些数据转换关系函数:ord,hex,int,chr等,根据需要可以自己百度查询一下,或者官网查询使用。下面是16进制,10进制,ASCII,HEX的转换。

        def hex_to_dec(string_num):#16进制变成10进制
            # print(string_num.upper())#如果输入的16进制中有小写,则通过upper将小写字符换成大写字符
            # int('A',16)#将16进制的转化成10进制
            result=str(int(string_num.upper(), 16))
            return result
    
        def dec_to_hex(string_num):#10进制变成16进制,('10')
            base = [str(x) for x in range(10)] + [chr(x) for x in range(ord('A'), ord('A') + 6)]#对应的16进制编码(0-9,A-F)
            num = int(string_num)#对输入的数据进行int转化
            mid = []
            while True:#通过不断的除以16取余数实现10进制转16进制
                if num == 0: break#如果商为0则停止循环
                num, rem = divmod(num, 16)#对输入的10进制数进行:取整,取余
                mid.append(base[rem])#将余数转化成对应的16进制数,并添加到数组中
            return ''.join([str(x) for x in mid[::-1]])#字符串拼接并取反,最后返回16进制数
    
        def to_hexstring(data='TEST'):
            result=''
            for i in data:
                tmp=hex(ord(i))[2:].upper()
                if len(tmp)==1:
                    result += str(0)+str(tmp) + ' '
                else:
                    result+=str(tmp)+' '
            return result
    
        def to_asciistring(data='54 5174'):
            data=data.split(' ')
            result=''
            datalength=len(data)
            for i in range(datalength):
                print(data[i])
                tmp = chr(int(data[i], 16))
                result += tmp
            return result
    
    
    

     

     

    展开全文
  • 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收数据串口助手发送的数据不一致,出现了乱码。我还想把我接收到的数据存储在txt文件中,...
  • 使用串口助手乱码的可能问题之一

    千次阅读 2013-10-27 15:43:01
    串口助手一直乱码,几乎每次接收数据都不相同 原晶振为12.000 改为11.0592之后,能够正常显示 确定是因为晶振频率不正确,导致无法选择相应的波特率

    串口助手一直乱码,几乎每次接收的数据都不相同
    原晶振为12.000
    改为11.0592之后,能够正常显示
    确定是因为晶振频率不正确,导致无法选择相应的波特率


    展开全文
  • 现象:(以下描述中,用vs 写的程序,简称为程序)用串口助手给程序发数据,如果数据为全英文,则结果正确,而如果数据中含有英文,则结果有时正确,有时错误。代码如下 private void serialPort1_DataReceived...
  • 本篇文章: 主要是关于C#制作简单的串口助手,实现串口之间收发数据。本篇文章制作的串口助手存在一个中文乱码问题,后期文章会解决这个问题。...功能二:C#实现简易串口助手【发送、接收数据】 功能三:C#扫描串口助手
  • 串口输出中文乱码

    千次阅读 2020-07-29 17:14:03
    最近在使用OpenMV,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4的开发板,于是就想到将其作为一个转接,通过其接收OpenMV发送的数据,并将其转发到电脑上,结果串口助手一直输出乱码。 寻找问题...
  • 问题:测试51单片机串口通信时,设置主程序为单片机将接收到的数据发送出去,但在串口助手接收到的单片机发来的数据总是乱码。 解决:经检查,是晶振频率设置错误,将原先的12MHz改为11.0592MHz后通信正常。在设置的...
  • STM32串口通信乱码解决方法

    千次阅读 2019-07-04 11:06:25
    STM32使用USART做串口通信实验的时候,串口调试助手能够接收数据但出现乱码现象,显示开发板发来的数据总是问号或者不规则字体,主要原因可能是串口波特率设置不对或者系统时钟设置出问题。 波特率设置 波特率设置...
  • 工具: 单片机:STM32L053R8T6(NUCLEO板) STM32cube 简介:STM32与上位机之间用通信协议...main函数:其中main函数是测试程序,把串口助手发来的数据再上传回去,目的是看发送和读取是否一致。 详细过程见工程代码。
  • STM32踩坑:STM32串口发送乱码问题

    千次阅读 2020-10-16 09:36:05
    STM32串口发送乱码问题 小编是一个嵌入式初学者,才学没多久,将近两个月的样子,在学习过程中遇到了一些问题,在这里给大家分享一下解决方案。...2) 串口调试助手接收数据的波特率与串口初始化时的波特率不一致(这种
  • ComMagic串口调试助手

    2013-07-09 17:26:14
    1.接收串口进来的数据并在窗口显示. 2.所接收到的数据数据显示方式可以选择为字符方式或者HEX方式 3.中文显示无乱码,且不影响速度 4.串口波特率可以选择为110bps-115200bps 5.可以选择“5、6、7、8”四种数据长度....
  • BCOM串口调试助手1.0

    2015-03-13 09:09:17
    和其它串口主要不同在于添加了更新串口端口号按钮,不需重新打开软件就可重新获取串口串口输出数据编码可选,这样可以完美支持中文,不会出现乱码,并且算法保证因故障乱码后可自动恢复。另外命令列表行数可变。 ...
  • STM32串口通信乱码详细处理方法

    万次阅读 多人点赞 2018-01-13 10:26:24
    STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收数据但出现乱码现象,开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试STM32板子,...
  • 串口调试助手 sscom3.2

    2011-05-26 15:41:02
    1.接收串口进来的数据并在窗口显示. 2.所接收到的数据数据显示方式可以选择为字符方式或者HEX方式 4.中文显示无乱码,且不影响速度 5.串口波特率可以选择为110bps-256000bps.(波特率>115200时需要硬件支持) 6.可以...
  • 硬件应该没有问题,用调试工具可以正确接收数据。 本人使用的是控件编写的测试程序,,,实在不行用API编写不知道会不会有同样情况。。求大神指导。。。 variant_inp = m_ctrlComm.GetInput(); safearray_...
  • WIN10上 非常好用的 串口调试助手

    千次阅读 2020-04-19 14:28:19
    1.接收串口进来的数据并在窗口显示。 2.接收到的数据显示方式可以选择为"字符串"或"HEX"。 3.中文显示无乱码。可以在设置中更改字符串编码类型。支持多种字符编码 “ASCII”,“GB2312”,“UNICODE”,“UTF-8”,...
  • ISP+串口调试助手(支持STCISP)

    热门讨论 2012-02-25 17:06:15
    1.接收串口进来的数据并在窗口显示. 2.所接收到的数据数据显示方式可以选择为字符方式或者HEX方式 3.中文显示无乱码,且不影响速度 4.串口波特率可以选择为110bps-115200bps 5.可以选择“5、6、7、8”四种数据长度....
  • (1)在串口、USB、网络接收数据的过程中,能够正确显示当前接收数据的速度 (2)在C51代码向导当中增加了输出为Keil工程的功能,方便编译 ===================================================== 2011-02-25 ...
  • 基于qt串口实现十六进制收发

    千次阅读 2017-07-12 16:58:24
    前面写过一篇用qt做串口助手的博文(基于Qt5.6做一个最简单的具有收发功能的串口助手 ),做出来的串口助手只能进行字符的收发,如果接收的是十六进制的数据的话,就会显示乱码,现在在它的基础上做一些修改,从而...
  • 在编写串口收发的嵌入式程序时碰到了一些奇怪的问题,主要是发送的数据乱码接收的数据为空,但是数据长度并不为零。经过一些来来回回的修改,反反复复的参考别人的代码,最终认为主要是因为wince内部使用的是...
  • 激光头和接收管都是TB买的,调试助手上面的一列数字是我用跳线连接两个单片机的串口时正常的数据,下面的乱码是改成激光头后的数据。 有木有大神做过类似的项目,请教一下,非常感谢。 ![图片说明]...
  • 蓝牙HC-05与51单片机通信乱码问题

    千次阅读 2019-05-31 22:23:09
    一、问题 通过蓝牙助手(或串口调试助手)...与89C51相连接,HC-05也能接收数据,但接收到的是乱码。 二、解决办法 波特率一致(我设置的是4800); 波特率加倍(不知道为啥要加倍,或者可能是我设置了什么)。 ...
  • 单片机多功能助手

    2012-08-14 23:20:33
    (1)在串口、USB、网络接收数据的过程中,能够正确显示当前接收数据的速度 (2)在C51代码向导当中增加了输出为Keil工程的功能,方便编译 ===================================================== 2011-02-25 ...
  • ={1,2,3,4,5,6,7,8},然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送,并利用串口调试助手查看,发现助手可以正确接收普通串口发送函数所发出的数据,而对于DMA发送的数据接收到的是一堆乱码。...
  • 友善串口调试助手支持常用的50-256000bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意...
  • sscom32.rar

    2019-05-23 14:52:02
    好用的串口调试助手,比ISP更加方便,可支持发送中文,接收数据不会乱码
  • 超级终端指令

    2019-07-08 21:09:56
    串口调试助手”和“超级终端”的区别 使用串口调试程序时,调试工具可以选择“串口调试助手”或者“超级终端”。两者的区别如下: 1.“串口调试助手”可以进行...所以如果只是用串口调试工具进行接收数据的话,...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

串口助手接收数据乱码