OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2476|回复: 2

UDP协议改成TCP/IP

[复制链接]

44

主题

298

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2016-9-9
在线时间
84 小时
发表于 2017-2-22 17:47:40 | 显示全部楼层 |阅读模式
1金钱
我用的芯片是 W5500,写成了UDP通信控制电机,想问一下如何改成TCP/IP
unsigned char packCtrl(unsigned char* data)
{
        if(data[0]<'1' || data[0]>'9')return 0;

        int index = *data-'0';
        // data++;
        // if(*data != ' ')
        // {
        //         if(*data < '0' || *data > '9')return 0;
        //         index *= 10;
        //         index  += *data - '0';
        //         data++;
        //         if(*data != ' ')return 0;
        // }
       
        data++;
       
        const char* strstart = " Start";
        if(MemCmp((uint8_t*)strstart,data,strlen(strstart))<0)return 0;
       
       
        switch(index)
        {
                case 1:        MotorRun(1,5000);        break;        // P1
                case 2:        break;                // P2
                case 100: break;        // P100
        }
       
        return 1;
}
// 中断处理函数
void MotorHandler(uint8_t index)
{
        assert_param(1<=index && index<=(sizeof(motorInfo)/sizeof(MotorActInfo)));
        index--;

        MotorActInfo* info = &motorInfo[index];
        MotorParam* param = info->Config;

        // 方向已经由启动步进输出的地方处理过了  这里只需要逼近目标位置就可以了
        if(info->Current < info->Destination)info->Current++;
        if(info->Current > info->Destination)info->Current--;

        // 到达目标位置 直接返回
        // 使用的是单脉冲方式,所以这里不需要处理失能定时器的动作
        if(info->Current== info->Destination)return;
        // 进入下一个脉冲
        TIM_Cmd(param->time,ENABLE);
}

int main(void)
{
        System_Initialization();        //STM32系统初始化函数(初始化STM32时钟及外设)
        // 初始化输出口
        InitOutPort();
        // 初始化输入口
        InitInPort();
        // 初始化电机
        InitMotors();
        // 填充串口默认值
        SerialPortDefInfo();
        // 打开串口
        SerialPortOpenS();
       
        Load_Net_Parameters();                //装载网络参数       
        W5500_Hardware_Reset();                //硬件复位W5500
        W5500_Initialization();                //W5500初始货配置
       
       
        while (1)
        {
                W5500_Socket_Set();//W5500端口初始化配置

                if(W5500_Interrupt)//处理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 >= 20000)//定时发送字符串
                {
/*                        if(S0_State == (S_INIT|S_CONN))
                        {
                                S0_Data&=~S_TRANSMITOK;      
                                const char * WelCome =  "\r\nMotion card is working now!\r\n";
                                memcpy(Tx_Buffer, WelCome, strlen(WelCome));
                                //指定Socket(0~7)发送数据处理,端口0发送23字节数据
                                Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);
                        }  */
                        W5500_Send_Delay_Counter=0;
                }
               
               
                if( MotorRumMask != 0x00)
                {
                        for(int i = 0; i < 4; i++)
                        {
                                if(MotorRumMask & ( 0x01<<i) != 0)
                                {
                                        if(motorInfo[i].Current == motorInfo[i].Destination)
                                        {
                                                char data[128];
                                                sprintf(data,"M%d OK\r\n",i+1);
                                                Write_SOCK_Data_Buffer(S0_Data, (void*)data, strlen(data));
                                                //NetSend(data,strlen(data));
                                                MotorRumMask &= ~(0x01<<i);
                                        }
                                }
                        }
                }
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-2-22 17:50:45 | 显示全部楼层
TCP/IP一般用来表示网络协议栈,UDP就是TCP/IP中众多协议栈的一种。你应该是想说改成TCP协议的吧?这个就看W5500的资料了,没弄过W5500
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-2-22 22:09:51 | 显示全部楼层
有点复杂..
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-9-22 16:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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