نوشته اصلی توسط
hossein.m98 مهمان عزیز شما حق دیدن لینک ها را ندارید
عضویت
ببینید گام اول برای جواب گرفتن از انجمنی مثل اینجا اینه که دقیقا مشکلتون رو تشریح کنید که پاسخ دهنده بفهمه مشکل کجاس. شما نه گفتید میکروکنترلرتون چیه، نه گفتید از چه قطعات جانبی یا استک شبکه استفاده کردید و نه گفتید با کدوم ابزار بیلد کار میکنید. نتیجتا نه میشه گفت مشکل کجا میتونه باشه، نه میشه راهنمایی کرد. فقط میتونم بگم یه جای کارتون حتما ایراد داره!!!
اگر اولین بارتون هست که با IP دارید کار میکنید، بهتره قبلش در مورد معماری اینترنت، لایه های اون و این که کدوم پروتکل ها در کدوم لایه ها قرار دارن و کارکردشون چیه (نه لزوما به صورت دقیق)، IP Address چیه و پورت چیه مطالعه کنید، بعد دست به کد بشید. احتمالا سعی دارید یک ارتباط دو طرفه بین کامپیوتر و میکروکنترلر برقرار کنید؛ برای این کار میتونید از نرم*افزار
مهمان عزیز شما حق دیدن لینک ها را ندارید
عضویت
استفاده کنید برای تست هاتون و ارسال و دریفات پکت های TCP و UDP. البته این نرم*افزار مشکلاتی توی بافر کردن داده های بزرگ داره ولی کار راه اندازه. برای مانیتور کردن شبکه هم از نرم*افزار Wireshark میتونید استفاده کنید که ببینید داده هایی که میکروکنترلر میفرسته اصلا به کامپیوتر شما میرسه و به پورت مورد نظر میره یا نه؛ البته کار کردن با Wireshark خودش تجربه احتیاج داره ولی اونقدرا هم نباید گنگ باشه.
سلام وقتتون بخیر .....حق با شماست و این به خاطر کم تجربگی من در استفاده از این طور انجمن هاست.
من از میکروکنترلر stm32f767 و آیسی lan8720a و ارتباط udp استفاده میکنم .
تنظیمات کانفیگ نرم افزار cube mx را به درستی انجام داده ام و توانسته ام یک led روی برد را از طریق ارتباط ethernet و با استفاده از نرم افزار هرکولس ,روشن و خاموش کنم.
من تا 1319 بایت رو به طور صحیح ارسال کردم
مشکل من در ارسال آرایه بزرگتر هست مثلا 1600 بایتی
در ادامه دو قسمت از کد که مربوط به send data و while(1) هست آورده ام. اسم آرایه array هست و تمام درایه های آن با کاراکتر 'A' پر شده است.
void MY_UdpSendData(void)
{
struct pbuf *p;
while(array[i]=='A')
{
i++;
BufferSize++;
}
p = pbuf_alloc(PBUF_TRANSPORT, BufferSize, PBUF_RAM);
pbuf_take(p, array, sizeof(array[0])*BufferSize);
udp_send(udp_send_pcb, p);
pbuf_free(p);
}
/// در ادامه
while (1)
{
MX_LWIP_Process();
cntr++;
if(cntr > 200000)
{
cntr=0;
MY_UdpSendData();
}
}