中级会员
 
- 积分
- 209
- 金钱
- 209
- 注册时间
- 2016-9-9
- 在线时间
- 84 小时
|
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);
}
}
}
}
}
}
|
|