2 fr1995 fr1995 于 2016.04.29 21:25 提问

stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码

用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码。
设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢?
图片说明

代码如下:
void C无人机地面控制终端Dlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT VARIANT_Input;
COleSafeArray SafeArray_Input;
LONG len, k;

BYTE RXData[1024];
CString strtemp ;
if (m_mscom.get_CommEvent() == 2)
{
VARIANT_Input = m_mscom.get_Input(); //读缓冲区
SafeArray_Input = VARIANT_Input; //VARIANT型变量转换为COleSafeArray型变量
len = SafeArray_Input.GetOneDimSize();
for (k = 0; k< len; k++)
SafeArray_Input.GetElement(&k, RXData + k); //转换为BYTE型数组
for (k = 0; k < len; k++)
{
char bt = (char)(RXData + k);
strtemp.Format(_T("%c", bt));
m_EditReceive += strtemp; // 接收到编辑框里面
}
m_EditReceive += "\r\n";
UpdateData(false);

    m_Edit.SetSel(-1, -1);
    this->SetDlgItemTextW(IDC_EDIT1, m_EditReceive);//将m_EditReceive内容显示到ID为IDC_EDIT1的编辑框的最后位置
    m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一
}

}

查了好久了也不知道为什么,求问,不甚感激!

1个回答

Lov_NinGx
Lov_NinGx   2016.04.29 21:41

这个问题比较简单,但是操作起来有点难,问题出在Format,编码的问题。这个可以参考,http://bbs.csdn.net/topics/390337326

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VC上位机MFC利用串口控件发送接收数据
经过这两天的调试,基本上搞定了dsp和机器人上位机界面,先记录下我的上位机。        实验室是做机器人控制的,经常会用到上位机,我只搞过简单的上位机的编写,是基于mfc的对话框的,很多原理性的东西现在也是懵懵懂懂的,但好歹是功能也实现了。回顾自己的上位机主要涉及过的东西为一些基本控件的使用(编辑框,按钮等等),1.串口发送和接收数据,2.手柄扫描(因为实验室用手柄来遥控机器人,扫描到手
关于十六进制发送和显示(VS上位机和下位机)
彻底理清楚十六进制发送和十六进制显示的问题(VS上位机和下位机)
Stm32串口发送字节数据
#include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "system_stm32f10x.h" void RCC_Configuration(void); void GPIO_Configuration(void);
Qt上位机如何发送数据?
1.直接以ASCII码的方式进行发送。所以只需要简单的一句代码,将文本框内容转换为ASCII码进行发送。my_serialport->write(ui->lineEdit->text().toLatin1());这样就以ASCII码的形式发送给下位机2.以十六进制进行发送。union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(stru
串口通信程序中十六进制格式发送和接收实现
刚刚用MFC编写了一个串口通信程序,
MFC串口发送数据大于128数据出错的解决办法(发送0xFE接收得到0x3F等问题)
其实就是把存储的数组类型换一下就好了 关于CString char 类型取值为-128到127(-2^7~2*^-71) 从str2.Format(_T("%c"),buf[i]);以%c的格式终究把buf[i]以char的形式存储进CString里面 关于CByteArray CByteArray是MFC中BYTE一种集合类,用于申明CByteArray类的数据,并且用相关函数对
上位机接收数据,并进行处理的一段程序
ONG CReadData::OnCommunication(WPARAM ch, LPARAM port) if (port 3) return -1; CString str; CString str1="FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF "; str.Format("%02X",ch)
STM32串口第一个字节丢失解决办法
void USART_SendByte(USART_TypeDef* USARTx, uint8_t Data) { while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET); USART_SendData(USARTx,Data); } while(USART_GetFlagStatus(USARTx, USART_F
Labwindows CVI写上位机与STM32下位机通信(一)
最近在用Labwindows CVI写一个多串口的上位机程序,主要实现如下功能:(1) 上位机与下位机STM32通信,上位机通过串口发送控制命令(LED矩阵图形选择、电磁阀控制信号)给下位机,下位机回发控制信息。(2)上位机通过modbus通信协议485通信接口,读取MEMS流量计瞬时流量和总流量数据,并显示到面板上。     一. STM32下位机     考虑到LED矩阵面板上有40*10
上位机接收到串口发来的数据,实时的以曲线显示的软件开发
1.参考文档:VC++-串口上位机编程实例 2文档地址:http://wenku.baidu.com/link?url=mokADmedzI2CD7b4hu8L3kTgTYKlxG52TcNdcfmbxceMXWipW95QEaQl959DJGmYBY7icMgw0dJSkIioeiut9xgtEwNrnamEOiOSNfkCq-C 制作的软件框架如下: 制作的主要难点在于对te