关于 32G12K128驱动W5500模块的问题
在别的版块发过这个帖子:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11799如题,本人有一块STC32G12K128-LQFP64的最小系统板
通过对网上基于C51驱动W5500案例程序进行简单修改后编译无错误
在不同的板子上可实现功能如STC89C52RC、STM32F103C8T6最小系统板
在STC32G12K128最小系统板上却无法实现功能
下面是main.c程序
/***************************************************************************************
* 硬件连接:
* P3^2 -> W5500_RST
* P3^3 -> W5500_INT(本例程没有用到中断,此引脚可以不接)
* P3^6 -> W5500_SCS
* P3^7 -> W5500_SCK
* P3^4 -> W5500_MISO
* P3^5 -> W5500_MOSI
***************************************************************************************/
/*例程网络参数*/
//网关:192.168.1.1
//掩码: 255.255.255.0
//物理地址:0C 29 AB 7C 00 01
//本机IP地址:192.168.1.199
//端口0的端口号:5000
//端口0的目的IP地址:192.168.1.190
//端口0的目的端口号:6000
#include <STC32G.h>
#include "W5500.h"
#include <string.h>
unsigned int W5500_Send_Delay_Counter =0;
void Delay(unsigned int d); //延时函数(ms)
/*******************************************************************************
* 函数名: W5500_Initialization
* 描述 : W5500初始货配置
* 输入 : 无
* 输出 : 无
* 返回值: 无
* 说明 : 无
*******************************************************************************/
void W5500_Initialization(void)
{
W5500_Init(); //初始化W5500寄存器函数
Detect_Gateway(); //检查网关服务器
Socket_Init(0); //指定Socket(0~7)初始化,初始化端口0
}
/*******************************************************************************
* 函数名: Load_Net_Parameters
* 描述 : 装载网络参数
* 输入 : 无
* 输出 : 无
* 返回值: 无
* 说明 : 网关、掩码、物理地址、本机IP地址、端口号、目的IP地址、目的端口号、端口工作模式
*******************************************************************************/
void Load_Net_Parameters(void)
{
Gateway_IP = 192;//加载网关参数
Gateway_IP = 168;
Gateway_IP = 1;
Gateway_IP = 1;
Sub_Mask=255;//加载子网掩码
Sub_Mask=255;
Sub_Mask=255;
Sub_Mask=0;
Phy_Addr=0x0c;//加载物理地址
Phy_Addr=0x29;
Phy_Addr=0xab;
Phy_Addr=0x7c;
Phy_Addr=0x00;
Phy_Addr=0x01;
IP_Addr=192;//加载本机IP地址
IP_Addr=168;
IP_Addr=1;
IP_Addr=199;
S0_Port = 0x13;//加载端口0的端口号5000
S0_Port = 0x88;
// S0_DIP=192;//加载端口0的目的IP地址
// S0_DIP=168;
// S0_DIP=1;
// S0_DIP=190;
//
// S0_DPort = 0x17;//加载端口0的目的端口号6000
// S0_DPort = 0x70;
S0_Mode=TCP_SERVER;//加载端口0的工作模式,TCP服务端模式
}
/*******************************************************************************
* 函数名: W5500_Socket_Set
* 描述 : W5500端口初始化配置
* 输入 : 无
* 输出 : 无
* 返回值: 无
* 说明 : 分别设置4个端口,根据端口工作模式,将端口置于TCP服务器、TCP客户端或UDP模式.
* 从端口状态字节Socket_State可以判断端口的工作情况
*******************************************************************************/
void W5500_Socket_Set(void)
{
if(S0_State==0)//端口0初始化配置
{
if(S0_Mode==TCP_SERVER)//TCP服务器模式
{
if(Socket_Listen(0)==TRUE)
S0_State=S_INIT;
else
S0_State=0;
}
else if(S0_Mode==TCP_CLIENT)//TCP客户端模式
{
if(Socket_Connect(0)==TRUE)
S0_State=S_INIT;
else
S0_State=0;
}
else//UDP模式
{
if(Socket_UDP(0)==TRUE)
S0_State=S_INIT|S_CONN;
else
S0_State=0;
}
}
}
/*******************************************************************************
* 函数名: Process_Socket_Data
* 描述 : W5500接收并发送接收到的数据
* 输入 : s:端口号
* 输出 : 无
* 返回值: 无
* 说明 : 本过程先调用S_rx_process()从W5500的端口接收数据缓冲区读取数据,
* 然后将读取的数据从Rx_Buffer拷贝到Temp_Buffer缓冲区进行处理。
* 处理完毕,将数据从Temp_Buffer拷贝到Tx_Buffer缓冲区。调用S_tx_process()
* 发送数据。
*******************************************************************************/
void Process_Socket_Data(SOCKET s)
{
unsigned short size;
size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
memcpy(Tx_Buffer, Rx_Buffer, size);
Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
}
/*******************************************************************************
* 函数名: main
* 描述 : 主函数,用户程序从main函数开始运行
* 输入 : 无
* 输出 : 无
* 返回值: int:返回值为一个16位整形数
* 说明 : 无
*******************************************************************************/
int main(void)
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
Load_Net_Parameters(); //装载网络参数
W5500_Hardware_Reset(); //硬件复位W5500
W5500_Initialization(); //W5500初始货配置
while (1)
{
W5500_Socket_Set();//W5500端口初始化配置
W5500_Interrupt_Process();//W5500中断处理程序框架
if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
{
S0_Data&=~S_RECEIVE;
Process_Socket_Data(0);//W5500接收并发送接收到的数据
}
else if(W5500_Send_Delay_Counter >= 3000)//定时发送字符串
{
if(S0_State == (S_INIT|S_CONN))
{
S0_Data&=~S_TRANSMITOK;
memcpy(Tx_Buffer, "\r\nHello World!\r\n", 23);
Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);//指定Socket(0~7)发送数据处理,端口0发送23字节数据
}
W5500_Send_Delay_Counter=0;
}
W5500_Send_Delay_Counter++;
}
}
/*******************************************************************************
* 函数名: Delay
* 描述 : 延时函数(ms)
* 输入 : d:延时系数,单位为毫秒
* 输出 : 无
* 返回 : 无
* 说明 : 延时是利用Timer2定时器产生的1毫秒的计数来实现的
*******************************************************************************/
void Delay(unsigned intx)
{
unsigned int i,j;
for(j=0;j<5;j++)
for(i=0;i<x;i++);
}
案例使用的是TCP Server端
具体的问题是引脚间连线后,插上网线用cmd Ping代码中192.168.1.199地址,无法通信
而在STC89C52RC和STM32F103C8T6上不用修改程序即可运行
想问下C51和STM32例程如果进行移植应该怎么移植到STC32G12K128上
没用过W5500,移植到 32G12K128需要用keil C251编译器 DebugLab 发表于 2024-11-13 17:39
没用过W5590,移植到AI32G12K128需要用keil C251编译器
{:4_167:}
我是这样移植C51程序的,头文件改成STC32G.h后keilv5配置C251选择STC32G芯片,代码大小什么的也改了,编译0报错
之前移植C51例程驱动TFT的也是这个步骤,但在STC32G上完美运行,移植C51驱动W5500模块到STC32G上无法实现正常功能
STC32G上的SPI输出管脚要设置为推挽输出模式 EasyLad 发表于 2024-11-13 18:52
STC32G上的SPI输出管脚要设置为推挽输出模式
{:4_167:}这样吗?我都给设置成推挽模式了,还是ping不通
{:4_165:} yu2726890744 发表于 2024-11-14 09:48
这样吗?我都给设置成推挽模式了,还是ping不通
你这把主机SPI的MISO管脚也设置为输出管脚了,直接给整短路了 zxcv1973 发表于 2024-11-14 11:44
你这把主机SPI的MISO管脚也设置为输出管脚了,直接给整短路了
佬,那请问这样设置对吗?我才刚学这个东西但着急搞毕设{:4_167:}
页:
[1]