显示-stm32与上位机通过网口通信,网口读不出数据?

问题描述

stm32与上位机通过网口通信,网口读不出数据?

使用w5500evb与上位机通信,w5500evb是一个网络芯片,它的MCU是stm32f103系列的,要实现将传感器采集到的数据值通过网口显示在上位机的网络调试助手上,现在我可以通过串口将数据显示在串口调试助手上(说明传感器工作正常),但是通过网口传数据时,在上位机的网络调试助手不显示,请教大神,这是什么原因呢?(网络通信是正常的,我用上位机的网络调试助手给下位机发送数据123,下位机收到之后会自动将123发送给上位机,而且在网络调试助手上也显示了这个数据,说明网络通信是正常的)

解决方案

你的测试,也只能说从服务器下发数据到终端是正常的,但反方向是否正确,这要看你的:
(1) 发送的代码
(2) 网络可能还是有问题,尝试 PING 一下公网的 IP,看看 PING 能否正常执行

解决方案二:

现附上主函数源代码,请各位大神拯救一下吧
#include "mcu_init.h"
#include "config.h"
#include "device.h"
#include "spi2.h"
#include "socket.h"
#include "w5500.h"
#include "at24c16.h"
#include "util.h"
#include "myiic.h"

#include

extern uint8 txsize[];
extern uint8 rxsize[];

uint8 buffer1[1024];/*定义一个1KB的缓存*/
uint8 buffer2[1024];/*定义一个1KB的缓存*/

 //温度结果  16bit
uint16 TempValue;
//湿度结果 16bit
uint16 HumValue;
//温度转换结果
float TempResult;
//湿度转换结果
float HumResult;
//校验值
uint8 CheckValue;// = 0x00;
//错误
uint8 error;// = 0x00;

//float pTempValue;
//float pHumValue;

uint8 read_temperature_and_humidity()
{
Delay_ms(10000);
ConReset();
//获得温度和湿度数据,16位格式
error += Measure(&TempValue,&CheckValue,TEMP);
error += Measure(&HumValue,&CheckValue,HUMI);
//温度湿度计算,浮点数形式
Cal(TempValue ,HumValue,&TempResult,&HumResult);
// pTempValue=TempResult;
// pHumValue=HumResult;
//通过串口输出,温度和湿度数据
printf("温度 %2.1fC 湿度 %2.1f%%n",TempResult,HumResult);
return 0;

}

void main()
{
uint16 port=30000;/*定义一个端口并初始化*/
// uint16 len=0;

uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11};/*定义Mac变量*/
uint8 lip[4]={192,168,10,111};/*定义lp变量*/
uint8 sub[4]={255,255,255,0};/*定义subnet变量*/
uint8 gw[4]={192,168,10,1};/*定义gateway变量*/
uint8 ip[4];

RCC_Configuration(); /* 配置单片机系统时钟*/
RCC_Config();
GPIO_Configuration();/* 配置GPIO*/
NVIC_Configuration();/* 配置嵌套中断向量*/

Systick_Init(72);/* 初始化Systick工作时钟*/
USART1_Init(); /*初始化串口通信:115200@8-n-1*/
at24c16_init();/*初始化eeprom*/
printf("W5500 EVB initialization over.rn");

Reset_W5500();/*硬重启W5500*/
WIZ_SPI_Init();/*初始化SPI接口*/

SHT10_Config();
printf("W5500 initialized!rn");

setSHAR(mac);/*配置Mac地址*/
setSUBR(sub);/*配置子网掩码*/
setGAR(gw);/*配置默认网关*/
setSIPR(lip);/*配置Ip地址*/

//Init. TX & RX Memory size of w5500

sysinit(txsize, rxsize); /*初始化8个socket*/

setRTR(2000);/*设置溢出时间值*/
setRCR(3);/*设置最大重新发送次数*/

getSIPR (ip);
printf("IP : %d.%d.%d.%drn", ip[0],ip[1],ip[2],ip[3]);
getSUBR(ip);
printf("SN : %d.%d.%d.%drn", ip[0],ip[1],ip[2],ip[3]);
getGAR(ip);
printf("GW : %d.%d.%d.%drn", ip[0],ip[1],ip[2],ip[3]);
printf("Network is ready.rn");
//read_temperature_and_humidity();

while(1)
{
switch(getSn_SR(0))/*获取socket0的状态*/
{
case SOCK_INIT:/*socket初始化完成*/
listen(0);/*在TCP模式下监听*/

       break;
     case SOCK_ESTABLISHED:/*socket连接建立*/
      if(getSn_IR(0) & Sn_IR_CON)
      {
          setSn_IR(0, Sn_IR_CON);/*Sn_IR的第0位置1*/
       }
      // len=getSn_RX_RSR(0);/*len为已接收数据的大小*/
       if(read_temperature_and_humidity()==0)
       {

         // recv(0,buffer1,len);/*W5500接收来自Sever的数据*/
          //read_temperature_and_humidity();
          buffer2[0]=TempResult;
          buffer2[1]=HumResult;
          send(0,buffer2,sizeof(buffer2));/*W5500向Server发送数据*/
          printf("温度 %2.1fC 湿度 %2.1f%%n",TempResult,HumResult);

       }
      Delay_ms(5000);
       break;
     case SOCK_CLOSE_WAIT:/*socket等待关闭状态*/
       break;
     case SOCK_CLOSED:/*socket关闭*/
       socket(0,Sn_MR_TCP,port,Sn_MR_ND);/*打开socket0的一个端口*/
       break;
 }

}
}


时间: 2024-10-31 23:52:58

显示-stm32与上位机通过网口通信,网口读不出数据?的相关文章

c#上位机与单片机通信,上位机接收不到单片机返回的数据

问题描述 c#上位机与单片机通信,上位机接收不到单片机返回的数据 我遇到的问题是: 1上位机给单片机发送数据,单片机能接收到,但是单片机返回的数据上位机收不到 2我不用单片机,直接把数据线上的TX.RX短接,再用上位机发送数据,这时 上位机显示区就能显示上位机发送的数据: 3我用串口调试助手调试单片机程序,调试助手能正常接收单片机返回的数据: 以上3个问题,很是矛盾,不知道哪里出问题了,请高手帮助一下! 解决方案 asc码接收,十六进制接收不行,上位机编码 解决方案二: 曾经写过的一个,接收函数

fx- FX2N系列PLC通过编程口如何与上位机实现串口通信

问题描述 FX2N系列PLC通过编程口如何与上位机实现串口通信 新人,最近在写一个MFC的控制台,实现与PLC串口通信,以前写的是实现与avr单片机的通信.我按照三菱特有的通信格式编写,不知为啥一直无法实现,哪位前辈有这方面的经验吗?诚心求指点. 比如: 1.上位机发请求讯号(05H)给PLC,上位机只要负责把它发到串口缓冲区就可以吗? 2.在上位机收到PLC返回的确认信号(ACK)后,发后面的多字符帧命令码(02 45 31 30 34 30 30 34 30 32 37 42 30 30 0

界面-PC与单片机串行通信的上位机设计(温度监控系统)

问题描述 PC与单片机串行通信的上位机设计(温度监控系统) 温度数据要存入sql数据库中,人机界面实现温度的实时显示和查询功能,有没有大神可以提供一份类似的代码供我学习学习,本人电气小白,正在做毕设 解决方案 要实现什么样的,用什么写的上位机i 解决方案二: PC机与单片机串行通信的硬件设计PC机与下位单片机异步串行通信PC机与下位单片机异步串行通信[摘]

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

问题描述 stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码 用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码. 设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢? 代码如下: void C无人机地面控制终端Dlg::OnCommMscomm1() { // TODO: 在此处添加消息处理程序代码 VA

RS485 通信 modbus RTU通信问题,上位机无法读取数据。

问题描述 本人用vb.net写了一个上位机软件,就是读不到数据,但是用串口调试程序读得到.于是我重新用VB.netc#vb6都写了一个测试通信的小程序,用同一个串口,相同的串口参数(38400,8,N,2,串口设置为接收到一个字节就引发事件,二进制格式发送数据)和下位机,测试发现vb.et和c#的都不行,vb6的可以正常通信.而且我用两个串口直接对接,一头连接vb.net测试程序,一头连接串口调试软件,两头收发都正常,c#和vb6这样连接也可以正常通信.就是一头连接测试程序,一头连接下位机,c#

数据帧-c#串口通信中上位机测试数据组帧

问题描述 c#串口通信中上位机测试数据组帧 测试 发送数据的参数,设置温度频率时延输出功率,,这些数据组成一帧并且发送,然后接收,,, 解决方案 参考:http://www.360doc.com/content/13/0829/09/7531335_310657574.shtml 解决方案二: 可以在串口使用modbus协议通讯. 或者根据modbus的思想自己弄一套协议. modbus有应答和校验机制,能够保证串口通讯的可靠性. 解决方案三: 上位机-串口通信-C#

c#上位机实时显示51单片机温度

问题描述 小弟这几天在研究c#的上位机,能够实时显示51的ds18b20的温度,可是却没有头绪,有没有大神可以帮助小弟一下,不胜感激.

USRP通信的结构体和常量(上位机、下位机共用)

fw_common.h包含了USRP固件和上位机共用的代码,寄存器地址映射.结构体定义等 #include <stdint.h> /*! * Structs and constants for usrp2 communication. * This header is shared by the firmware and host code. * Therefore, this header may only contain valid C code. */ #ifdef __cplusplu

串口通信-vc++串口上位机串口设置

问题描述 vc++串口上位机串口设置 串口打开时,选择了一个无效的串口号后,怎么令串口按钮关闭.如图 图1是串口正常打开,图二是选择无效端口号后串口按钮的变化(串口关闭).请问是如何实现的?非常感谢! 解决方案 http://zhidao.baidu.com/link?url=YPewInrq7LneRthad_AJ1OgGmTZuMhRNayv0Pkq5v4mHdy3ZOKlax3q22fEhBTLC8kgrK-Zo8oIk5irlqdsaWK 解决方案二: VC++ .net 串口操作(简单