找回密码
 立即注册
查看: 678|回复: 7

关于 32G12K128驱动W5500模块的问题

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:68
  • 最近打卡:2025-03-18 13:43:30
已绑定手机

5

主题

12

回帖

302

积分

中级会员

积分
302
发表于 2024-11-13 16:48:11 | 显示全部楼层 |阅读模式
在别的版块发过这个帖子:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11799


如题,本人有一块STC32G12K128-LQFP64的最小系统板
通过对网上基于C51驱动W5500案例程序进行简单修改后编译无错误

在不同的板子上可实现功能如STC
89C52RC、STM32F103C8T6最小系统板

STC32G12K128最小系统板上却无法实现功能
下面是main.c程序
  1. /***************************************************************************************
  2. * 硬件连接:  
  3. *                        P3^2 -> W5500_RST   
  4. *      P3^3 -> W5500_INT(本例程没有用到中断,此引脚可以不接)     
  5. *      P3^6 -> W5500_SCS      
  6. *      P3^7 -> W5500_SCK   
  7. *      P3^4 -> W5500_MISO   
  8. *      P3^5 -> W5500_MOSI   
  9. ***************************************************************************************/
  10. /*例程网络参数*/
  11. //网关:192.168.1.1
  12. //掩码:        255.255.255.0
  13. //物理地址:0C 29 AB 7C 00 01
  14. //本机IP地址:192.168.1.199
  15. //端口0的端口号:5000
  16. //端口0的目的IP地址:192.168.1.190
  17. //端口0的目的端口号:6000
  18. #include <STC32G.h>
  19. #include "W5500.h"                              
  20. #include <string.h>
  21. unsigned int W5500_Send_Delay_Counter =0;
  22. void Delay(unsigned int d);                        //延时函数(ms)
  23. /*******************************************************************************
  24. * 函数名  : W5500_Initialization
  25. * 描述    : W5500初始货配置
  26. * 输入    : 无
  27. * 输出    : 无
  28. * 返回值  : 无
  29. * 说明    : 无
  30. *******************************************************************************/
  31. void W5500_Initialization(void)
  32. {
  33.         W5500_Init();                //初始化W5500寄存器函数
  34.         Detect_Gateway();        //检查网关服务器
  35.         Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0
  36. }
  37. /*******************************************************************************
  38. * 函数名  : Load_Net_Parameters
  39. * 描述    : 装载网络参数
  40. * 输入    : 无
  41. * 输出    : 无
  42. * 返回值  : 无
  43. * 说明    : 网关、掩码、物理地址、本机IP地址、端口号、目的IP地址、目的端口号、端口工作模式
  44. *******************************************************************************/
  45. void Load_Net_Parameters(void)
  46. {
  47.         Gateway_IP[0] = 192;//加载网关参数
  48.         Gateway_IP[1] = 168;
  49.         Gateway_IP[2] = 1;
  50.         Gateway_IP[3] = 1;
  51.         Sub_Mask[0]=255;//加载子网掩码
  52.         Sub_Mask[1]=255;
  53.         Sub_Mask[2]=255;
  54.         Sub_Mask[3]=0;
  55.         Phy_Addr[0]=0x0c;//加载物理地址
  56.         Phy_Addr[1]=0x29;
  57.         Phy_Addr[2]=0xab;
  58.         Phy_Addr[3]=0x7c;
  59.         Phy_Addr[4]=0x00;
  60.         Phy_Addr[5]=0x01;
  61.         IP_Addr[0]=192;//加载本机IP地址
  62.         IP_Addr[1]=168;
  63.         IP_Addr[2]=1;
  64.         IP_Addr[3]=199;
  65.         S0_Port[0] = 0x13;//加载端口0的端口号5000
  66.         S0_Port[1] = 0x88;
  67. //        S0_DIP[0]=192;//加载端口0的目的IP地址
  68. //        S0_DIP[1]=168;
  69. //        S0_DIP[2]=1;
  70. //        S0_DIP[3]=190;
  71. //      
  72. //        S0_DPort[0] = 0x17;//加载端口0的目的端口号6000
  73. //        S0_DPort[1] = 0x70;
  74.         S0_Mode=TCP_SERVER;//加载端口0的工作模式,TCP服务端模式
  75. }
  76. /*******************************************************************************
  77. * 函数名  : W5500_Socket_Set
  78. * 描述    : W5500端口初始化配置
  79. * 输入    : 无
  80. * 输出    : 无
  81. * 返回值  : 无
  82. * 说明    : 分别设置4个端口,根据端口工作模式,将端口置于TCP服务器、TCP客户端或UDP模式.
  83. *                        从端口状态字节Socket_State可以判断端口的工作情况
  84. *******************************************************************************/
  85. void W5500_Socket_Set(void)
  86. {
  87.         if(S0_State==0)//端口0初始化配置
  88.         {
  89.                 if(S0_Mode==TCP_SERVER)//TCP服务器模式
  90.                 {
  91.                         if(Socket_Listen(0)==TRUE)
  92.                                 S0_State=S_INIT;
  93.                         else
  94.                                 S0_State=0;
  95.                 }
  96.                 else if(S0_Mode==TCP_CLIENT)//TCP客户端模式
  97.                 {
  98.                         if(Socket_Connect(0)==TRUE)
  99.                                 S0_State=S_INIT;
  100.                         else
  101.                                 S0_State=0;
  102.                 }
  103.                 else//UDP模式
  104.                 {
  105.                         if(Socket_UDP(0)==TRUE)
  106.                                 S0_State=S_INIT|S_CONN;
  107.                         else
  108.                                 S0_State=0;
  109.                 }
  110.         }
  111. }
  112. /*******************************************************************************
  113. * 函数名  : Process_Socket_Data
  114. * 描述    : W5500接收并发送接收到的数据
  115. * 输入    : s:端口号
  116. * 输出    : 无
  117. * 返回值  : 无
  118. * 说明    : 本过程先调用S_rx_process()从W5500的端口接收数据缓冲区读取数据,
  119. *                        然后将读取的数据从Rx_Buffer拷贝到Temp_Buffer缓冲区进行处理。
  120. *                        处理完毕,将数据从Temp_Buffer拷贝到Tx_Buffer缓冲区。调用S_tx_process()
  121. *                        发送数据。
  122. *******************************************************************************/
  123. void Process_Socket_Data(SOCKET s)
  124. {
  125.         unsigned short size;
  126.         size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
  127.         memcpy(Tx_Buffer, Rx_Buffer, size);                       
  128.         Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
  129. }
  130. /*******************************************************************************
  131. * 函数名  : main
  132. * 描述    : 主函数,用户程序从main函数开始运行
  133. * 输入    : 无
  134. * 输出    : 无
  135. * 返回值  : int:返回值为一个16位整形数
  136. * 说明    : 无
  137. *******************************************************************************/
  138. int main(void)
  139. {
  140.         WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  141.   EAXFR = 1; //扩展寄存器(XFR)访问使能
  142.   CKCON = 0; //提高访问XRAM速度
  143.       
  144.   P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  145.         P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  146.         P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  147.         P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  148.         P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  149.         P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  150.         P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  151.         P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  152.         Load_Net_Parameters();                //装载网络参数      
  153.         W5500_Hardware_Reset();                //硬件复位W5500
  154.         W5500_Initialization();                //W5500初始货配置
  155.       
  156.         while (1)
  157.         {
  158.                 W5500_Socket_Set();//W5500端口初始化配置
  159.                
  160.                 W5500_Interrupt_Process();//W5500中断处理程序框架
  161.                 if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
  162.                 {
  163.                         S0_Data&=~S_RECEIVE;
  164.                         Process_Socket_Data(0);//W5500接收并发送接收到的数据
  165.                 }
  166.                 else if(W5500_Send_Delay_Counter >= 3000)//定时发送字符串
  167.                 {
  168.                         if(S0_State == (S_INIT|S_CONN))
  169.                         {
  170.                                 S0_Data&=~S_TRANSMITOK;
  171.                                 memcpy(Tx_Buffer, "\r\nHello World!\r\n", 23);      
  172.                                 Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);//指定Socket(0~7)发送数据处理,端口0发送23字节数据
  173.                         }
  174.                         W5500_Send_Delay_Counter=0;
  175.                 }
  176.                 W5500_Send_Delay_Counter++;
  177.         }
  178. }
  179. /*******************************************************************************
  180. * 函数名  : Delay
  181. * 描述    : 延时函数(ms)
  182. * 输入    : d:延时系数,单位为毫秒
  183. * 输出    : 无
  184. * 返回    : 无
  185. * 说明    : 延时是利用Timer2定时器产生的1毫秒的计数来实现的
  186. *******************************************************************************/
  187. void Delay(unsigned int  x)
  188. {
  189.     unsigned int i,j;
  190.     for(j=0;j<5;j++)
  191.                 for(i=0;i<x;i++);
  192. }
复制代码

案例使用的是TCP Server端
具体的问题是引脚间连线后,插上网线用cmd Ping代码中192.168.1.199地址,无法通信
而在STC89C52RC和STM32F103C8T6上不用修改程序即可运行

想问下C51和STM32例程如果进行移植应该怎么移植到STC32G12K128上




C51_W5500.zip

85.53 KB, 下载次数: 44

STC32G_W5500.zip

79.44 KB, 下载次数: 57

STM32_W5500.zip

6.49 MB, 下载次数: 51

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-11-13 17:39:18 | 显示全部楼层
没用过W5500,移植到 32G12K128需要用keil C251编译器
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:68
  • 最近打卡:2025-03-18 13:43:30
已绑定手机

5

主题

12

回帖

302

积分

中级会员

积分
302
发表于 2024-11-13 18:09:55 | 显示全部楼层
Debu*** 发表于 2024-11-13 17:39
没用过W5590,移植到AI32G12K128需要用keil C251编译器



我是这样移植C51程序的,头文件改成STC32G.h后keilv5配置C251选择STC32G芯片,代码大小什么的也改了,编译0报错
之前移植C51例程驱动TFT的也是这个步骤,但在STC32G上完美运行,移植C51驱动W5500模块到STC32G上无法实现正常功能
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-29 12:00:04

2

主题

80

回帖

736

积分

高级会员

积分
736
发表于 2024-11-13 18:52:15 | 显示全部楼层
STC32G上的SPI输出管脚要设置为推挽输出模式
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:68
  • 最近打卡:2025-03-18 13:43:30
已绑定手机

5

主题

12

回帖

302

积分

中级会员

积分
302
发表于 2024-11-14 09:48:25 | 显示全部楼层
Easy*** 发表于 2024-11-13 18:52
STC32G上的SPI输出管脚要设置为推挽输出模式

这样吗?我都给设置成推挽模式了,还是ping不通
微信图片_20241114094719.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2024-12-27 08:18:49

0

主题

132

回帖

136

积分

注册会员

积分
136
发表于 2024-11-14 10:45:07 | 显示全部楼层
回复

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-11-14 11:44:44 | 显示全部楼层
yu2726*** 发表于 2024-11-14 09:48
这样吗?我都给设置成推挽模式了,还是ping不通

你这把主机SPI的MISO管脚也设置为输出管脚了,直接给整短路了
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:68
  • 最近打卡:2025-03-18 13:43:30
已绑定手机

5

主题

12

回帖

302

积分

中级会员

积分
302
发表于 2024-11-14 14:13:31 | 显示全部楼层
zxcv*** 发表于 2024-11-14 11:44
你这把主机SPI的MISO管脚也设置为输出管脚了,直接给整短路了

佬,那请问这样设置对吗?我才刚学这个东西但着急搞毕设
微信图片_20241114141200.png
微信图片_20241114141231.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:09 , Processed in 0.198196 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表