سلام.
محمدرضا هستم و در این آموزش قصد دارم با یک روش جالب شما رو از خرید یه قطعه بی نیاز کنم!
احتمالاً شما هم مثل من یه آردینو توی وسایلتون دارید و ممکنه در حال یادگیری ARM باشید و وقتی به مرحله تمرین برای بخش UART که آموزش آن هم داخل سایت هست برسید ممکنه بگید یک قطعه کم دارید و اون قطعه ساده چیزی نیست جز TTL to USB. خب آیا قراره برید داخل بازار؟ یا قراره به خاطر همین یه مورد خرید اینترنتی کنید؟ باید بگم اگر یک Arduino uno دارید خیلی راحت میتونید از آن استفاده کنید. در واقع از آردینو به عنوان مبدل TTL to USB استفاده میشود. نحوه کار خیلی سادست و شاید اگر تا به حال بهش دقت نکرده باشید براتون جالب هم باشد.
همونطور که میدونید Arduino IDE داخلش یک گزینه سریال مانیتور داره و اگر روی برد رو هم نگاه کنید TX و RX رو میتونید ببینید، پس کار تموم هست و چیزی که ما برای ساخت آردوینو TTL to USB دنبالش هستیم در دسترسمون هست. مثل عکس زیر کافیه تراشه روی برد Arduino رو خارج کنید (خط چین قرمز) یا با اتصال پایه RESET به زمین (سیم سبز) اون تراشه رو در حالت RESET نگه دارید.
مرحله بعد اتصال پایههای RX و TX به یک تراشه مثل یک STM32f103c8t6 هست. در این حالت دقت شود که پایه TX هردو تراشه STM32 و Arduino به هم متصل شوند و پایههای RX هم به یکدیگر وصل شود.
شاید از خودتون بپرسید که چرا RX به TX وصل نشده و پایههای هم نام به یکدیگر وصل شدهاند. در اینجا باید بگم کار اصلی در اینجا توسط تراشه SMD که با فلش نارنجی در شکل بالا مشخص شده است انجام میگیرد و اگر بتوانید track ها را دنبال کنید میبینید که در اینجا TX به RX تراشه وصل شده است و RX به TX وصل شده است. در واقع تراشهی DIP روی برد کاری انجام نمیدهد برای همین است که آن را خارج میکنیم یا در حالت ریست نگه میداریم.
بعد از اتصال پایههای RX و TX اتصال زمینهای 2 بُرد و تغذیه 3/3 ولت را به هم برقرار میکنیم. در اینجا طبق آموزش داخل سایت مربوط به UART برنامهی کوچکی را جهت تست، برنامه ریزی میکنیم.
تنظیمات را سِت میکنیم. مطابق شکل بالا پایه PA9 = TX و PA10 = RX است و همین پایهها را به Arduino وصل میکنیم.
کد زیر را نیز در STM32F103C8T6 وارد میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | const char Name[4]={'A','d','i','b'}; uint8_t i=0 ; while (1) { LL_USART_TransmitData8(USART1, Name[i++]); while(!LL_USART_IsActiveFlag_TXE(USART1)); if(i == 4) { i = 0; } |
بعد از پروگرام کردن برنامه روی میکروکنترلر، میتوان به کمک Arduino IDE صفحهی سریال مانیتور را باز کنیم تا بتونیم از آردوینو TTL to USB که ساختیم استفاده کنیم. دقت شود که نوع بُرد و پورت را نیز به درستی و بعد از اتصال انتخاب کنید.
علاوه بر این میتوانید از نرم افزارهای مختلف مانند realterm نیز استفاده کنید. نتیجه کد بالا و سخت افزار معرفی شده به صورت زیر خواهد بود.
در فیلم زیر نمای واقعی مدار آردوینو TTL to USB استفاده در این بخش را ملاحظه میکنید. چشمک زدن چراغ TX نیز نشان دهنده تبادل اطلاعات است.
به عنوان یک چالش کوچک، برنامه را طوری تغییر دهید که هر عبارتی که در سریال مانیتور ارسال شد، همان را چاپ کند. به کمک این بخش کاربردی شما یاد میگیرید که به کمک Arduino TTL to USB خروجیهای مختلف را در سریال مانیتور مشاهده کنید و به زبانی دیگر (به جز چشمک زدن LED) به دنیا سلام کنید. فراموش نکنید که هردو سیم RX و TX را نیز متصل کنید.
اگر سوالی بود بپرسید 🙂
میشه با این روش ESP32COM رو برنامه نویسی کرد
سلام الان برای مثلا پروگرام atmega8 میشه بدون مبدل اینکارو انجام داد یا باید اون stmباید باشه اگه امکان داره بی زحمت روش پروگرام atmega8با همین روش بزارید
سلام دوست عزیز
از این روش برای پروگرام کردن atmega8 استفاده کرد
چرا که در میکروکنترلر های خانواده st بوت لودری وجود داره که توسط خود st توسعه داده شده برای پروگرام کردن از طریق uart ولی این قابلیت در میکروکنترلر atmega8 وجود نداره
سلام
من بارها این کارو انجام دادم بدون بیرون آوردن میکرو کافیست یک پروژه تمیز داخل میکرو بارگیری شود.
که برای اینکار کافیست دکمه NEW را زده و بدون اینکه چیزی به آن اضافه کنیم آردوینو را پروگرام کنیم.
سلام.
ممنون از اینکه تجربتون رو با ما به اشتراک گذاشتید.?
سلام شما موفق شدین خروجی رو تمیز دریافت کنین؟ من چند ماه پیش دقیقا همین کار رو برای چک کردن صحت خروجی UART برد STM32F3 ام انجام دادم، یعنی به Uno وصلش کردم و توی ترمینال آردوینو پرینت کردم، ولی انقدر نویزی شده بود که از هر ده تا کاراکتری که میفرستادم یکیش غلط دریافت میشد!
یا شاید به نویز ربطی نداشت و من جاییشو خراب کردم؟
سلام
من فکر نمیکنم به نویز ربطی داشته باشد. در گام اول دقت کنید که روی برد کریستال چند مگاهرتزی قرار داده شده اگر برای مثال 8 مگ هست، داخل تنظیمات CubeMX هم همان مقدار رو تنظیم کنید. در گام بعدی همونطور که در کامنت ها هم ذکر شده، مقدار Baud rate گیرنده با فرستنده باید یکی باشد. در انتها هم از صحت کدی که استفاده کردین مطمئن بشید و اگر مشکل پابرجا بود فایل پروژه رو ارسال کنید تا تست کنم.
جالب بود، اتفاقا من نمیدونستم این قطعه رو باید بخرم اما اردینو داشتم و تست کردم باهاش و شد. فقط baud rate توی نرم افزار ide یا اون یکی realterm باید با چیزی که تنظیم میکنید برای میکرو یکی باشه که خب بدیهی هست.
سلام
ممنون از توجه شما و خوشحالم که مطلب مفید واقع شده.
بله درست هست، اگر سرعت دریافت و ارسال یکی نباشد طبیعتاً اطلاعات به درستی دریافت نمیشه.
بلا
کار جالبی بود . منم یه تست زدم کار کرد .