راهنمای کاربر یادداشت برنامه HOLTEK HT32 MCU UART
مقدمه
گیرنده/فرستنده ناهمزمان جهانی - UART یک رابط انتقال سریال پرکاربرد است که انتقال داده های دوطرفه ناهمزمان انعطاف پذیر را فراهم می کند. کد برنامه "Module_UART" ارائه شده در این یادداشت کاربردی از وقفه های TX/RX با بافرهای حلقه نرم افزاری برای پیاده سازی توابع ساده انتقال/دریافت UART از طریق APIها استفاده می کند که عملکردهای مرتبط آنها در زیر توضیح داده شده است. این کار کل فرآیند انتقال داده را ساده می کند و به کاربران امکان می دهد تا به سرعت برنامه های ارتباطی UART را درک و پیاده سازی کنند.
- توابع انتقال/دریافت: خواندن بایت، نوشتن بایت، خواندن بافر، نوشتن بافر و غیره.
- توابع وضعیت: طول بافر، وضعیت TX و غیره را بدست آورید.
این سند ابتدا پروتکل ارتباطی UART را معرفی میکند که به کاربران کمک میکند تا ارتباطات UART را از اصل به کاربرد بهتر درک کنند. پس از دانلود و آماده سازی منابع مورد نیاز برای کد برنامه، از جمله کتابخانه سیستم عامل، دانلود کد برنامه، file و پیکربندی دایرکتوری و همچنین مقدمه ای بر ابزار نرم افزار ترمینال مورد استفاده در یادداشت برنامه. در فصل توضیحات عملکردی، ساختار دایرکتوری کد برنامه، تنظیمات پارامتر و توضیحات API معرفی خواهد شد. استفاده از API با استفاده از کد برنامه "Module_UART" توضیح داده خواهد شد و مصرف منبع Flash/RAM مورد نیاز برای APIها نیز فهرست خواهد شد. فصل دستورالعمل استفاده کاربر را از طریق مراحل آماده سازی محیطی، گردآوری و آزمایش راهنمایی می کند تا تأیید کند که کد برنامه به درستی کار می کند. سپس دستورالعملهایی را ارائه میکند که نحوه ادغام APIها را در پروژههای کاربر توضیح میدهد و در نهایت مرجعی را برای تغییرات و مشکلات رایجی که ممکن است با آنها مواجه شود ارائه میکند.
اختصارات استفاده شده:
- UART: گیرنده/فرستنده ناهمزمان جهانی
- API: رابط برنامه نویسی کاربردی
- LSB: کم اهمیت ترین جزء
- MSB: مهم ترین بیت
- PC: کامپیوتر شخصی
- SK: کیت شروع، برد توسعه HT32
- IDE: محیط توسعه یکپارچه
پروتکل ارتباطی UART
UART یک نوع رابط ارتباطی سریال است که تبدیل داده موازی به سریال را در فرستنده خود پیاده سازی می کند و سپس به صورت سریال با یک گیرنده مشابه ارتباط برقرار می کند. سپس گیرنده تبدیل داده سریال به موازی را پس از دریافت داده انجام می دهد. شکل 1 نمودار شماتیک ارتباط سریال را نشان می دهد که نحوه انتقال داده ها به ترتیب بیت را نشان می دهد. بنابراین برای ارتباط دو طرفه بین فرستنده و گیرنده، تنها به دو سیم TX و RX برای انتقال داده ها به صورت سریال بین یکدیگر نیاز است. TX پایه ای است که UART داده های سریال را روی آن ارسال می کند و به پایه RX گیرنده متصل می شود. بنابراین، دستگاههای فرستنده و گیرنده باید پینهای TX و RX خود را برای انجام ارتباط دو طرفه UART متصل کنند، همانطور که در نشان داده شده است. شکل 2.
شکل 1. نمودار ارتباط سریال
شکل 2. نمودار مدار UART
در طول ارتباط سریال UART، انتقال داده ناهمزمان است. این بدان معنی است که هیچ ساعت یا سیگنال هماهنگ سازی دیگری بین فرستنده و گیرنده وجود ندارد. در اینجا از نرخ باود استفاده می شود که سرعت انتقال/دریافت سریال داده است و توسط هر دو طرف قبل از انتقال داده تنظیم می شود. علاوه بر این، بیت های خاصی مانند بیت های شروع و پایان به ابتدا و انتهای بسته داده اضافه می شوند تا یک بسته داده UART کامل تشکیل شود. شکل 3 ساختار بسته داده UART را نشان می دهد در حالی که شکل 4 یک بسته داده 8 بیتی UART را بدون بیت برابری نشان می دهد.
شکل 3. ساختار بسته داده UART
شکل 4. فرمت بسته داده 8 بیتی UART
هر بخش از بسته داده UART به ترتیب در زیر معرفی شده است.
- بیت شروع: این نشان دهنده شروع یک بسته داده است. پین UART TX معمولاً قبل از شروع انتقال در سطح منطقی بالایی باقی می ماند. اگر انتقال داده شروع شود، فرستنده UART پین TX را از بالا به پایین، یعنی از 1 به 0 می کشد و سپس آن را برای یک سیکل ساعت در آنجا نگه می دارد. گیرنده UART زمانی شروع به خواندن داده ها می کند که یک انتقال زیاد به پایین در پین RX شناسایی شود.
- داده ها: این داده های واقعی منتقل شده با طول داده 7، 8 یا 9 بیت است. داده ها معمولاً ابتدا با LSB منتقل می شوند.
- بیت برابری: تعداد منطق "1" در داده ها برای تعیین اینکه آیا هیچ داده ای در طول انتقال تغییر کرده است یا خیر استفاده می شود. برای برابری زوج، تعداد کل منطق "1" در داده ها باید یک عدد زوج باشد، برعکس، تعداد کل منطق "1" در داده ها باید یک عدد فرد برای برابری فرد باشد.
- بیت توقف: این نشان دهنده پایان یک بسته داده است، جایی که فرستنده UART پین TX را از پایین به بالا، یعنی از 0 به 1 می کشد و سپس آن را برای یک دوره زمانی 1 یا 2 بیتی در آنجا نگه می دارد.
همانطور که قبلا ذکر شد، از آنجایی که هیچ سیگنال ساعتی در مدار UART وجود ندارد، برای اجرای انتقال بدون خطا، باید همان سرعت انتقال/دریافت سریال داده، که به عنوان نرخ باود شناخته می شود، بین فرستنده و گیرنده تعریف شود. نرخ باود با تعداد بیت های منتقل شده در ثانیه بر حسب bps (بیت در ثانیه) تعریف می شود. برخی از نرخهای باود استاندارد و رایج عبارتند از 4800bps، 9600bps، 19200bps، 115200bps، و غیره. زمان لازم برای انتقال یک بیت داده در زیر نشان داده شده است.
جدول 1. نرخ باود در مقابل زمان انتقال 1 بیتی
نرخ باد | انتقال 1 بیتی زمان |
4800bps | 208.33µs |
9600bps | 104.16µs |
19200bps | 52.08µs |
115200bps | 8.68µs |
دانلود و آماده سازی منابع
در این فصل کد برنامه و ابزار نرم افزار مورد استفاده و همچنین نحوه پیکربندی دایرکتوری و file مسیر
کتابخانه Firmware
ابتدا مطمئن شوید که کتابخانه سیستم عامل Holtek HT32 قبل از استفاده از کد برنامه دانلود شده است. لینک دانلود در زیر نشان داده شده است. در اینجا دو گزینه وجود دارد، HT32_M0p_Vyyyymmdd.zip برای سری HT32F5xxxx و HT32_M3_Vyyyymmdd.zip برای سری HT32F1xxxx. مورد نظر را دانلود و از حالت فشرده خارج کنید file.
زیپ file حاوی چندین پوشه است که می توانند به عنوان Document، Firmware Library، Tools و موارد دیگر طبقه بندی شوند که مسیر قرارگیری آنها در شکل 5 نشان داده شده است. فایل فشرده کتابخانه سیستم عامل HT32 file با یک file نام HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip در زیر پوشه Firmware_Library قرار دارد.
شکل 5. محتویات HT32_M0p_Vyyyymmdd.zip
کد برنامه
کد برنامه را از لینک زیر دانلود کنید. کد برنامه در یک زیپ بسته بندی شده است file با یک file نام HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. دیدن شکل 6 برای file کنوانسیون های نام
شکل 6. کد برنامه File معرفی نام
لینک دانلود: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File و پیکربندی دایرکتوری
از آنجایی که کد برنامه شامل کتابخانه سیستم عامل HT32 نیست files، کد برنامه و کتابخانه سیستم عامل از حالت فشرده خارج شد files باید قبل از شروع کامپایل در مسیر صحیح قرار گیرد. کد پستی برنامه file معمولاً شامل یک یا چند پوشه مانند برنامه و کتابخانه است که در شکل 7 نشان داده شده است. file پیکربندی مسیر، همانطور که در شکل 8 نشان داده شده است. همچنین، کد برنامه و کتابخانه سیستم عامل HT32 را به طور همزمان در یک مسیر از حالت فشرده خارج کنید تا به نتایج پیکربندی یکسانی برسید.
شکل 7. محتوای HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
شکل 8. مسیر رفع فشار
نرم افزار ترمینال
کد برنامه می تواند پیام ها را از طریق پورت COM برای اجرای انتخاب عملکرد یا نمایش وضعیت منتقل کند. این امر مستلزم آن است که طرف میزبان نرم افزار ترمینال را از قبل نصب کرده باشد. کاربران می توانند نرم افزار اتصال مناسب را انتخاب کنند یا از نرم افزارهای دارای مجوز رایگان مانند Tera Term استفاده کنند. در کد برنامه، کانال UART با طول کلمه 8 بیت، بدون برابری، 1 بیت توقف و نرخ باود 115200bps پیکربندی شده است.
توضیحات عملکردی
این فصل یک توضیح کاربردی برای کد برنامه ارائه می دهد، از جمله اطلاعاتی در مورد ساختار دایرکتوری، معماری API، توضیحات تنظیمات و غیره
ساختار دایرکتوری
کد برنامه file حاوی یک پوشه برنامه لایه بعدی پوشه "Module_UART" است که شامل دو برنامه کاربردی "UART_Module_Ex" است.ample» و «UART_Bridge». وابسته fileدر زیر لیست شده و توضیح داده شده است.
جدول 2. ساختار دایرکتوری کد برنامه
پوشه / File نام | توضیحات |
\\application\Module_UART\UART_Module_Example*1 | |
_CreateProject.bat | اسکریپت های دسته ای برای ایجاد پروژه files |
_ProjectSource.ini | اولیه سازی file برای افزودن کد منبع به پروژه ها |
ht32_board_config.h | راه اندازی file مربوط به تخصیص I/O محیطی IC |
ht32fxxxxx_01_it.c | برنامه سرویس را قطع کنید file |
main.c | کد منبع اصلی برنامه |
\\application\Module_UART\UART_Bridge*2 | |
_CreateProject.bat | اسکریپت های دسته ای برای ایجاد پروژه files |
_ProjectSource.ini | اولیه سازی file برای افزودن کد منبع به پروژه ها |
ht32_board_config.h | راه اندازی file مربوط به تخصیص I/O محیطی IC |
ht32fxxxxx_01_it.c | برنامه سرویس را قطع کنید file |
main.c | کد منبع برنامه اصلی |
uart_bridge.h uart_bridge.c | سربرگ پل UART file و کد منبع file |
\\ utilities\middleware | |
uart_module.h*3 uart_module.c*3 | هدر API file و کد منبع file |
\\ آب و برق\ مشترک | |
ringbuffer.h ring_buffer.c | هدر بافر حلقه نرم افزار file و کد منبع file |
توجه:
- در «UART_Module_Example" کد برنامه، عملیات خواندن و نوشتن API به صورت Loopback انجام میشود، به بخش استفاده از API مراجعه کنید.ampبخش les” برای جزئیات بیشتر.
- در کد برنامه "UART_Bridge"، دو کانال UART، UART CH0 و UART CH1 فعال می شوند و پروتکل ارتباطی سفارشی از طریق ساختارهای COMMAND بین دو دستگاه UART پیاده سازی می شود. برای اطلاعات بیشتر، به «مثلا استفاده از APIampبخش les.
- کد برنامه باید از uart_module.c/h استفاده کند fileمواردی که نیاز به نسخه کتابخانه سیستم عامل دارند. نیاز ممکن است با توجه به به روز رسانی زمان به زمان تغییر کند. برای تأیید نسخه مورد نیاز نسخه کتابخانه سیستمافزار فعلی، با جستجوی کلمه کلیدی «بررسی وابستگی» در main.c به محتوای بررسی وابستگی مراجعه کنید. file. اگر نسخه کتابخانه سیستم عامل شرایط لازم را ندارد، جدیدترین نسخه را از لینک ارائه شده در بخش "کتابخانه سیستم عامل" دانلود کنید.
معماری API
هر API یک پارامتر مهم CH دارد که کانال UART است. این تعیین می کند که کدام کانال UART باید کنترل شود. در حال حاضر حداکثر چهار کانال UART پشتیبانی می شود و بنابراین چهار نماد ثابت به صورت زیر تعریف می شوند. اینها بهعنوان پارامتر CH استفاده میشوند که APIها را مبنایی برای کنترل قرار میدهد.
- UARTM_CH0: پارامتر ورودی – UART CH0 را کنترل یا پیکربندی کنید
- UARTM_CH1: پارامتر ورودی – UART CH1 را کنترل یا پیکربندی کنید
- UARTM_CH2: پارامتر ورودی – UART CH2 را کنترل یا پیکربندی کنید
- UARTM_CH3: پارامتر ورودی – UART CH3 را کنترل یا پیکربندی کنید
اگر فقط از یک کانال UART استفاده شود، فضای حافظه هدر نخواهد رفت. این به این دلیل است که تعداد کانال های UART پشتیبانی شده را می توان تنظیم کرد و کد کانال UART استفاده نشده توسط پیش پردازنده حذف می شود تا فضای حافظه موجود افزایش یابد. معماری API در نشان داده شده است شکل 9.
شکل 9. بلوک نمودار معماری API
هر API از چهار گروه تنظیمات یا کنترل های مرتبط با کانال UART تشکیل شده است به طوری که کاربران فقط باید پارامتر CH مورد نظر را وارد کنند. برای پیکربندی API مربوطه، فقط باید یک جدول پارامترهای پیکربندی اولیه UART با فرم ساختار، USART_InitTypeDef داشته باشید. API پیکربندی اولیه UART را با توجه به محتویات پارامتر در جدول پیاده سازی می کند. برای جدول ساختار پیکربندی اولیه UART به بخش «توضیح API» مراجعه کنید.
uart_module.c/.h files فقط شامل وقفه (CHx_IRQ) و جدول وضعیت (CHx Status) هر کانال UART است در حالی که تمام تنظیمات مورد نیاز برای ارتباط UART توسط ht32_board_config.h ارائه شده است. پارامترهای مربوط به سخت افزار در ht32_board_config.h file در جدول زیر نشان داده شده است. جزئیات بیشتر در بخش "تنظیمات توضیحات" ارائه شده است.
پارامترهای مربوط به سخت افزار در ht32_board_config.h شامل تنظیمات ورودی/خروجی و تنظیمات پورت فیزیکی UART به شرح زیر است.
جدول 3. نمادهای تعریف در ht32_board_config.h
نماد | توضیحات |
HTCFG_UARTM_CH0 | نام پورت فیزیکی UART؛ سابقample: UART0، UART1… |
HTCFG_UARTM0_TX_GPIO_PORT | نام پورت TX را برای CH0 تعریف می کند. سابقample: A، B، C… |
HTCFG_UARTM0_TX_GPIO_PIN | شماره پین TX را برای CH0 تعریف می کند. سابقampلو: 0 تا 15 |
HTCFG_UARTM0_RX_GPIO_PORT | نام پورت RX را برای CH0 تعریف می کند. سابقample: A، B، C… |
HTCFG_UARTM0_RX_GPIO_PIN | شماره پین TX را برای CH0 تعریف می کند. سابقampلو: 0 تا 15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | اندازه بافر TX را برای CH0 تعریف می کند. سابقampسال: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | اندازه بافر RX را برای CH0 تعریف می کند. سابقampسال: 128 |
برای تغییر پیکربندی کانال UART AFIO، به برگه داده دستگاه مربوطه مراجعه کنید. در حال حاضر فقط تعاریف I/O برای UART CH0 اعمال می شود زیرا فقط UART CH0 در ht32_board_config.h پیکربندی شده است. برای افزودن UART CH1~3، تعاریف ورودی/خروجی آنها باید با مراجعه به تعریف UART CH0 یا مراجعه به بخش «تغییر تنظیمات و سؤالات متداول» تکمیل شود.
سه ویژگی اصلی معماری API وجود دارد:
- حداکثر چهار کانال UART پشتیبانی می شود. پارامترهای ورودی آنها UARTM_CH0، UARTM_CH1، UARTM_CH2 و UARTM_CH3 هستند.
- تعداد کانال های UART را می توان تنظیم کرد و کانال های استفاده نشده فضای حافظه موجود را کاهش نمی دهند.
- تمام تنظیمات UART و تعاریف ورودی/خروجی به طور کامل از API ها جدا هستند. این امر راحتی مدیریت تنظیمات مقادیر را افزایش می دهد و احتمال تنظیمات نادرست یا گم شده را کاهش می دهد.
توضیحات تنظیمات
در این بخش تنظیمات پارامتر در ht32_board_config.h و uart_module.h معرفی می شود. files.
- ht32_board_config.h: این file برای تعاریف پین و تنظیمات مربوط به برد توسعه، که شامل کانال IP UART (UART0، UART1، USART0...) استفاده شده توسط کیت شروع (SK)، مکانهای پین TX/RX مربوطه و اندازه بافر TX/RX استفاده میشود. شکل 10 محتوای تنظیمات کیت شروع HT32F52352 را نشان می دهد. بسته به ادغام عملکردی توسعه، کاربران می توانند برای پیاده سازی تعاریف پین به بخش "تخصیص پین" در برگه داده دستگاه مورد استفاده مراجعه کنند. جزئیات بیشتر در مورد تغییر تنظیمات در بخش "اصلاح تنظیمات و سوالات متداول" توضیح داده خواهد شد.
شکل 10. تنظیمات ht32_board_config.h (HT32F52352)
- uart_module.h: این هدر API است file توسط کد برنامه استفاده می شود، که شامل تنظیمات پیش فرض مربوطه، تعاریف عملکرد و غیره می شود. همانطور که در شکل 11 نشان داده شده است، محتوای تنظیمات پیش فرض را می توان توسط تنظیمات خارجی مانند تنظیمات موجود در ht32_board_config.h بازنویسی کرد. file.
شکل 11. تنظیمات پیش فرض در uart_module.h
توضیحات API
- شرح نوع داده کد برنامه.
- USART_InitTypeDef
این ساختار پیکربندی اولیه UART است که از تنظیمات BaudRate، WordLength، StopBits، Parity و Mode تشکیل شده است، همانطور که در زیر نشان داده شده است.متغیر نام تایپ کنید توضیحات USART_BaudRate u32 نرخ باود ارتباطی UART USART_Word Length u16 طول کلمه ارتباطی UART: 7، 8 یا 9 بیت USART_StopBits u16 طول بیت توقف ارتباط UART: 1 یا 2 بیت USART_Parity u16 برابری ارتباط UART: زوج، فرد، علامت، فاصله یا بدون برابری USART_Mode u16 حالت ارتباط UART؛ API ها فقط از حالت عادی پشتیبانی می کنند
- USART_InitTypeDef
- قبل از استفاده از توابع API، پیکربندی اولیه UART را در برنامه اصلی تکمیل کنید. پیکربندی اولیه UART برای این کد برنامه در شکل 12 نشان داده شده است. در اینجا نرخ باود 115200bps، طول کلمه 8 بیت، طول بیت توقف 1 بیت است و هیچ برابری وجود ندارد.
شکل 12. پیکربندی اولیه UART
- شکل 13 توابع API اعلام شده در uart_module.h را نشان می دهد file. جداول زیر تابع، پارامترهای ورودی و استفاده از توابع API را توضیح می دهند.
شکل 13. اعلان های عملکرد API در uart_module.h
نام | void UARTM_Init(u32 CH، USART_InitTypeDef *pUART_Init، u32 uRxTimeOutValue) | |
تابع | راه اندازی ماژول UART | |
ورودی | CH | کانال UART |
pUART_Init | نشانگر ساختار پیکربندی اولیه UART | |
uRxTimeOutValue | مقدار تایم اوت UART RX FIFO. هنگامی که RX FIFO داده های جدیدی دریافت می کند، شمارنده مجدداً تنظیم و راه اندازی مجدد می شود. هنگامی که شمارنده به مقدار زمان از پیش تعیین شده رسید و وقفه وقفه مربوطه فعال شد، یک وقفه زمانی ایجاد می شود. | |
استفاده | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//پیکربندی اولیه UART را اجرا کنید//برای پیکربندی USART_InitStructure به شکل 12 مراجعه کنید |
نام | u32 UARTM_WriteByte (u32 CH، u8 uData) | |
تابع | عملیات نوشتن بایت ماژول UART (TX) | |
ورودی | CH | کانال UART |
uData | داده هایی که باید نوشته شود | |
خروجی | موفقیت | موفق |
خطا | شکست خورد | |
استفاده | UARTM_WriteByte(UARTM_CH0، 'A'); //UART 1 بایت می نویسد - 'A' |
نام | u32 UARTM_Write (u32 CH، u8 *pBuffer، u32 uLength) | |
تابع | عملیات نوشتن ماژول UART (TX) | |
ورودی | CH | کانال UART |
pBuffer | اشاره گر بافر | |
uLength | طول داده ای که باید نوشته شود | |
خروجی | موفقیت | موفق |
خطا | شکست خورد | |
استفاده | u8 Test[] = "این تست است!\r\n"; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART داده های pBuffer را می نویسد |
نام | u32 UARTM_ReadByte (u32 CH، u8 *pData) | |
تابع | عملیات بایت خواندن ماژول UART (RX) | |
ورودی | CH | کانال UART |
pData | آدرس برای قرار دادن داده های خوانده شده | |
خروجی | موفقیت | موفق |
خطا | ناموفق (بدون داده) | |
استفاده | u8 TempData; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//اگر UARTM_ReadByte() SUCCESS را برگرداند، UART این بایت داده را می نویسد |
نام | u32 UARTM_Read(u32 CH، u8 *pBuffer، u32 uLength) | |
تابع | عملیات خواندن ماژول UART (RX) | |
ورودی | CH | کانال UART |
pBuffer | اشاره گر بافر | |
uLength | طول داده ای که باید خوانده شود | |
خروجی | تعداد خواندن | طول داده ها خوانده شده است |
استفاده | u8 Test2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() 5 بایت داده را می خواند و داده ها را در Test2 ذخیره می کند و تعداد بایت های خوانده شده را اختصاص می دهد به Len// داده های منبع شده از Test2 را بنویسید |
نام | u32 UARTM_GetReadBufferLength(u32 CH) | |
تابع | به دست آوردن طول بافر خوانده شده (RX) | |
ورودی | CH | کانال UART |
خروجی | uLength | طول بافر را بخوانید |
استفاده | UARTM_Init(UARTM_CH0، &USART_InitStructure، 40)؛ //راه اندازی اولیه ماژول UART در حالی که (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//صبر کنید تا UARTM_ReadBuffer 5 بایت داده دریافت کند |
نام | u32 UARTM_GetWriteBufferLength(u32 CH) | |
تابع | به دست آوردن طول بافر نوشتن (TX) | |
ورودی | CH | کانال UART |
خروجی | uLength | طول بافر را بنویسید |
نام | u8 UARTM_IsTxFinished(u32 CH) | |
تابع | وضعیت TX را بدست آورید | |
ورودی | CH | کانال UART |
خروجی | درست است | وضعیت TX: تمام شد |
نادرست | وضعیت TX: تمام نشده است | |
استفاده | UARTM_WriteByte(UARTM_CH0، 'O'); #if 1 // "uart_module.c" SVN >= 525 مورد نیاز در حالی که (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #دیگر (1) #endif //این API می تواند برای بررسی وضعیت TX، همانطور که در بالا نشان داده شده است، استفاده شود. صبر کنید تا UARTM_WriteByte() API به پایان برسد، یعنی وضعیت TX TRUE باشد، و سپس اقدامات بعدی را ادامه دهید.//یک محدودیت اضافه می شود زیرا این تابع تا زمانی که شماره نسخه SVN در uart_module.c 525 نباشد اضافه نشده است. |
نام | باطل UARTM_DiscardReadBuffer(u32 CH) | |
تابع | داده های موجود در بافر خواندن را دور بریزید | |
ورودی | CH | کانال UART |
مثال استفاده از APIamples
این بخش نوشتن و خواندن API را نشان می دهدampکد برنامه "Module_UART" با استفاده از فرآیند اولیه سازی و "UART_Module_Ex"ample” فرآیند کد برنامه. قبل از استفاده از APIها، کاربران باید هدر API را اضافه کنند file به کد منبع اصلی برنامه file (#include "middleware/uart_module.h").
همانطور که در شکل 14 نشان داده شده است، هنگام ورود به فرآیند اولیه سازی، ابتدا ساختار پیکربندی اولیه UART را تعریف کنید. سپس اعضای ساختار پیکربندی اولیه UART شامل BaudRate، WordLength، StopBits، Parity و Mode را پیکربندی کنید. در نهایت تابع مقداردهی اولیه API را فراخوانی کنید که تکمیل آن نشان دهنده پایان فرآیند اولیه سازی است. پس از این، کاربران می توانند عملیات نوشتن و خواندن را بر اساس پیکربندی اولیه UART از پیش تعیین شده ادامه دهند.
شکل 14. نمودار جریان اولیه سازی
«UART_Module_Exampکد برنامه le” عملیات خواندن و نوشتن API را به صورت Loopback نشان می دهد. فلوچارت این مورد در شکل 15 نشان داده شده است. توابع API مورد استفاده شامل UARTM_WriteByte()، UARTM_Write()، UARTM_ReadByte()، UARTM_Read() و UARTM_GetReadBufferLength(). توضیحات آنها در بخش "API Description" ارائه شده است.
شکل 15. فلوچارت نوشتن و خواندن مثالamples
کد برنامه دیگری "UART_Bridge" در زیر پوشه "Module_UART" وجود دارد که مربوط به آن است file توضیحات در بخش "ساختار راهنمای" معرفی شده است. کد برنامه "UART_Bridge" دو کانال UART UART CH0 و UART CH1 را فعال می کند و سپس پروتکل ارتباطی بین دو دستگاه UART را از طریق ساختارهای COMMAND، gCMD1 و gCMD2 سفارشی می کند. همانطور که در زیر نشان داده شده است در uart_bridge.c تعریف شده است. UARTBridge_CMD1TypeDef gCMD1:
متغیر نام | تایپ کنید | توضیحات |
uHeader | u8 | سربرگ |
uCmd | u8 | فرمان |
uData[3] | u8 | داده ها |
UARTBridge_CMD2TypeDef gCMD2:
متغیر نام | تایپ کنید | توضیحات |
uHeader | u8 | سربرگ |
uCmdA | u8 | فرمان A |
uCmdB | u8 | فرمان B |
uData[3] | u8 | داده ها |
در کد برنامه "UART_Bridge"، از gCMD1 برای دریافت داده ها به عنوان یک بسته دستوری و سپس تجزیه و تحلیل آن استفاده کنید. سپس طبق پروتکل ارتباطی سفارشی شده، gCMD2 را به عنوان یک بسته پاسخ تنظیم کرده و آن را ارسال کنید. زیر یک نمونه قبلی استampیک بسته فرمان gCMD1) و یک بسته پاسخ (gCMD2). بسته فرمان (UARTBridge_CMD1TypeDef gCMD1):
بایت 0 | بایت 1 | بایت 2 ~ بایت 4 |
uHeader | uCmd | uData [3] |
"الف" | "1" | "x، y، z" |
بسته پاسخ (UARTBridge_CMD2TypeDef gCMD2):
بایت 0 | بایت 1 | بایت 2 | بایت 3 ~ بایت 5 |
uHeader | uCmdA | uCmdB | uData [3] |
"ب" | "الف" | "1" | "x، y، z" |
شغل منابع
در نظر گرفتن HT32F52352 به عنوان نمونه قبلیample، منابع اشغال شده توسط ماژول UART در زیر نشان داده شده است.
HT32F52352 | |
اندازه رام | 946 بایت |
اندازه RAM | 40*1 + 256*2 بایت ها |
توجه:
- متغیرهای سراسری شامل پرچمها و وضعیت برای یک کانال، 40 بایت رم را اشغال میکنند.
- این برای شرایطی است که از یک کانال استفاده می شود و اندازه بافر TX/RX 128/128 بایت است. اندازه بافر را می توان با توجه به نیازهای برنامه تنظیم کرد.
جدول 4. کد برنامه شغل منبع
- محیط تالیف: MDK-Arm V5.36، ARMCC V5.06 به روز رسانی 7 (بیلد 960)
- گزینه بهینه سازی: سطح 2 (-O2)
دستورالعمل استفاده
در این فصل، آمادهسازی محیطی برای کد برنامه Module_UART، و همچنین مراحل تدوین و آزمایش معرفی میشود.
آماده سازی محیط زیست
سخت افزار و نرم افزار مورد نیاز برای کد برنامه "Module_UART" در زیر فهرست شده است.
جدول 5. آماده سازی محیطی سخت افزار/نرم افزار
سخت افزار/نرم افزار | بشمار | توجه داشته باشید |
کیت شروع | 1 | این یادداشت کاربردی از کیت شروع HT32F52352 به عنوان نسخه قبلی استفاده می کندample |
کابل USB | 1 | Micro USB، متصل به کامپیوتر |
کد برنامه | — | مسیر دانلود، file و پیکربندی دایرکتوری در بخش "دانلود و آماده سازی منبع" معرفی شده است. مسیر: "\\application\Module_UART\UART_Module_Example ” |
ترم ترا | — | به بخش "نرم افزار ترمینال" مراجعه کنید |
Keil IDE | — | Keil uVision V5.xx |
ابتدا، از کیت شروع HT32F52352 همراه با عملکرد پورت COM مجازی (VCP) e-Link32 Lite برای معرفی برنامه UART استفاده کنید. این امر مستلزم اجرای آماده سازی محیطی زیر است:
- دو رابط USB روی برد وجود دارد. همانطور که در شکل 32-(a) نشان داده شده است، از کابل USB برای اتصال رایانه شخصی و رابط eLink16 Lite روی برد استفاده کنید.
- از آنجایی که کد برنامه باید از عملکرد پورت COM مجازی (VCP) e-Link32 Lite استفاده کند، مطمئن شوید که PAx*2 و DAP_Tx UART Jumper-J2*1 با استفاده از یک جامپر کوتاه شده است. مکان J2 با شکل 16-(b) نشان داده شده است.
توجه داشته باشید
- J2 در Starter Kit دو گزینه دارد، PAx و DAP_Tx shorted یا PAx و RS232_Tx shorted. برای جزئیات تنظیمات تنظیمات به دفترچه راهنمای کاربر Starter Kit مراجعه کنید.
- محل پین MCU UART RX در کیت های شروع مختلف متفاوت است. این سابقample از PAx برای نشان دادن پین RX استفاده می کند.
شکل 16. دیاگرام بلوک کیت شروع HT32
اکنون از برد هدف کاربر همراه با عملکرد پورت COM مجازی (VCP) e-Link32 Pro برای معرفی برنامه UART استفاده کنید. این امر مستلزم اجرای آماده سازی محیطی زیر است:
- یک طرف e-Link32 Pro با استفاده از کابل Mini USB به رایانه شخصی متصل می شود و طرف دیگر از طریق کابل خاکستری 10 بیتی به برد کاربر هدف متصل می شود. اتصال بین رابط های SWD کابل و برد هدف با استفاده از خطوط Dupont اجرا می شود، همانطور که در شکل 17-(a) نشان داده شده است.
- پین های ارتباطی سریال e-Link32 Pro عبارتند از Pin#7 VCOM_RXD و Pin#8- VCOM_TXD. همانطور که در شکل 17-(b) نشان داده شده است، اینها باید به پین های TX و RX برد هدف کاربر متصل شوند.
شکل 17. e-Link32 Pro + نمودار بلوک برد هدف کاربر
تالیف و تست
این بخش "application\Module_UART\UART_Module_Ex" را می گیردample” به عنوان یک سابقampبرای معرفی فرآیندهای تدوین و آزمایش. قبل از این، اطمینان حاصل کنید که تمام آماده سازی های توضیح داده شده در قسمت قبل اجرا شده است و نرم افزار ترمینال ترا ترم دانلود شده است.
مراحل عملیات دقیق در زیر خلاصه شده است.
مرحله 1. تست روشن
محیط سخت افزاری را همانطور که در قسمت قبل توضیح داده شد تنظیم کنید. پس از روشن شدن، LED پاور D9 در سمت چپ پایین کیت استارتر روشن می شود. LED USB D1 در e-Link32 Lite در سمت راست بالا پس از تکمیل شمارش USB روشن می شود. اگر D1 بعد از مدت زمان طولانی روشن نشد، تأیید کنید که آیا کابل USB قادر به برقراری ارتباط است یا خیر. اگر نه، آن را بردارید و دوباره وارد کنید.
مرحله 2. یک پروژه ایجاد کنید
برنامه\Module_UART\UART_Module_Ex را باز کنیدampپوشه le، روی _CreateProject.bat کلیک کنید file برای تولید یک پروژه، همانطور که در شکل 18 نشان داده شده است. از آنجایی که این یادداشت کاربردی از کیت شروع HT32F52352 استفاده می کند، پروژه Keil IDE "Project_52352.uvprojx" واقع در زیر پوشه MDK_ARMv5 را باز کنید.
شکل 18. برای تولید پروژه، _CreateProject.bat را اجرا کنید
مرحله 3. کامپایل و برنامه ریزی
پس از باز شدن پروژه، ابتدا روی "Build" کلیک کنید (یا از میانبر "F7" استفاده کنید)، سپس روی "دانلود" کلیک کنید (یا از میانبر "F8" استفاده کنید). پس از این کار، نتایج ساخت و دانلود در پنجره Build Output نمایش داده می شود. شکل 19 را ببینید.
شکل 19. نتایج ساخت و دانلود
مرحله 4. نرم افزار Tera Term را باز کرده و پورت سریال را پیکربندی کنید
نرم افزار Tera Term و پورت COM را باز کنید. دقت کنید که آیا شماره پورت COM تولید شده توسط Starter Kit صحیح است یا خیر. سپس بر روی "Setup >> Serial Port" کلیک کنید تا وارد رابط پیکربندی شوید. پیکربندی رابط UART کد برنامه "Module_UART" در بخش "نرم افزار ترمینال" توضیح داده شده است. نتیجه راه اندازی در شکل 20 نشان داده شده است.
شکل 20. نتیجه راه اندازی پورت سریال Tera Term
مرحله 5. سیستم را ریست کرده و تست کنید
کلید SK reset – B1 Reset را فشار دهید. پس از این، یک "ABCThis تست است!" پیام خواهد بود
از طریق API منتقل می شود و در پنجره Tera Term نمایش داده می شود، همانطور که در شکل 21 نشان داده شده است. در مورد تابع دریافت، هنگام وارد کردن داده ها در پنجره Tera Term، API مربوطه برای تعیین طول بافر دریافت استفاده می شود. هنگامی که داده های دریافتی توسط رایانه شخصی به 5 بایت رسید، 5 بایت داده دریافتی به صورت متوالی ارسال می شود. همانطور که در شکل 22 نشان داده شده است، داده های وارد شده به ترتیب "1، 2، 3، 4، 5" است که از طریق API دریافت و تعیین می شود. پس از این، داده های "1، 2، 3، 4، 5" پس از پنج ورودی چاپ می شود.
شکل 21. تست عملکردی کد برنامه "Module_UART" - انتقال
شکل 22. تست عملکردی کد برنامه "Module_UART" - دریافت
دستورالعمل پیوند
این بخش نحوه ادغام APIها در پروژه های کاربر را معرفی می کند.
مرحله 1. uart_module.c را اضافه کنید file وارد پروژه شود. روی پوشه User کلیک راست کنید. «افزودن موجود را انتخاب کنید Files به گروه "کاربر"...»، سپس uart_module.c را انتخاب کنید file همانطور که در شکل 23 نشان داده شده است، بر روی "افزودن" کلیک کنید. به بخش "ساختار فهرست" مراجعه کنید file شرح مسیر
شکل 23. uart_module.c را اضافه کنید File به پروژه
مرحله 2. ring_buffer.c را اضافه کنید file وارد پروژه شود. روی پوشه User کلیک راست کنید. «افزودن موجود را انتخاب کنید Files به گروه «کاربر»…»، سپس ring_buffer.c را انتخاب کنید file و همانطور که در شکل 24 نشان داده شده است، روی "افزودن" کلیک کنید.\ به بخش "ساختار فهرست" برای file شرح مسیر
شکل 24. ring_buffer.c را اضافه کنید File به پروژه
مرحله 3. هدر API را درج کنید file به ابتدای main.c، همانطور که در شکل 25 نشان داده شده است. (Ext: #include "middleware/uart_module.h")
شکل 25. شامل سربرگ API File به main.c
مرحله 4. تنظیمات مورد نیاز برای ارتباط UART را با استفاده از ht32_board_config.h اجرا کنید file. این به تفصیل در بخش های «شرح تنظیمات» و «اصلاح تنظیمات و سؤالات متداول» معرفی شده است.
تنظیم اصلاح و سؤالات متداول
این بخش نحوه تغییر تنظیمات UART را معرفی می کند و برخی از سوالات رایجی که در حین استفاده با آنها مواجه می شود را توضیح می دهد.
تخصیص پین UART را تغییر دهید
- با مراجعه به صفحه داده «تخصیص پین» HT32F52352، جدول نگاشت عملکرد جایگزین را جستجو کنید که عملکردهای AFIO نوع دستگاه را فهرست میکند. همانطور که در شکل 6 نشان داده شده است، برای پین های مربوط به UART، به ستون "AF26 USART/UART" مراجعه کنید.
شکل 26. جدول نگاشت تابع جایگزین HT32F52352
- این مرحله کاربران را راهنمایی می کند تا پین های UART مربوطه را با استفاده از جدول بالا پیدا کنند. HT32F52352 سابقample از USART1 به عنوان کانال پیش فرض استفاده می کند. در اینجا پین های TX و RX USR1_TX و USR1_RX هستند و به ترتیب روی PA4 و PA5 قرار دارند. شکل 27 مطابقت پین و همچنین تعاریف پین را در "ht32_board_config.h" نشان می دهد. فیلدهای خالی «بسته» در جدول انتساب پین به این معنی است که هیچ GPIO مربوطه در این بسته وجود ندارد. برای تغییر پینهای UART، مکانهای پین هدف را پیدا کنید و با استفاده از "ht32_board_config.h" پینها را دوباره تعریف کنید. file.
شکل 27. پین مکاتبات و اصلاح تنظیمات
یک کانال UART اضافه کنید
استفاده از HT32F52352 HTCFG_UARTM_CH1 به عنوان نمونه قبلیample، در اینجا نحوه اضافه کردن یک کانال UART جدید توضیح داده شده است.
ht32_board_config.h را تغییر دهید file
با مراجعه به صفحه داده «تخصیص پین» HT32F52352، جدول نگاشت عملکرد جایگزین را جستجو کنید که عملکردهای AFIO نوع دستگاه را فهرست میکند. از آنجایی که USART1 به عنوان HTCFG_UARTM_CH0 استفاده شده است، HTCFG_UARTM_CH1 جدید اضافه شده می تواند USART0 را انتخاب کند. در اینجا، پینهای TX و RX به ترتیب روی PA2 و PA3 قرار دارند، همانطور که در نیمه بالایی شکل 28 نشان داده شده است. تغییرات مربوطه با استفاده از خطوط کد 120~126 در ht32_board_config.h، همانطور که توسط کادر نقطهدار قرمز در شکل نشان داده شده است، اجرا میشوند. 28.
شکل 28. یک کانال UART اضافه کنید
سوالات متداول
Q: در مرحله 5 از قسمت Compilation and Test، تست عملکردی انتقال نرمال است. در اینجا، "ABCThis تست است!" پیام با موفقیت نمایش داده شده است، اما برای تابع دریافت، چرا پنج مقدار ورودی برگردانده و نمایش داده نمی شود؟
A: بررسی کنید که آیا پایههای MCU UART RX و DAP_Tx UART Jumper-J2 با استفاده از جامپر کوتاه شدهاند یا خیر. از آنجایی که کد برنامه Module_UART باید از پورت COM مجازی (VCP) e-Link32 Lite استفاده کند، تنظیمات اتصال کوتاه باید روی دو پایه سمت چپ UART Jumper-J2 اعمال شود، همانطور که در شکل 29 نشان داده شده است.
شکل 29. تنظیمات UART Jumper-J2
س: پس از با اجرای "Build" (یا میانبر "F7")، یک پیام خطایی ظاهر می شود که نشان می دهد نسخه کتابخانه سیستم عامل قدیمی تر از نسخه مورد نیاز است؟ شکل 30 را ببینید.
A: اجرای کد برنامه "Module_UART" باید شامل uart_module.c/h باشد. files که برای یک نسخه کتابخانه سیستم عامل خاص مورد نیاز است. هنگامی که چنین پیام خطایی ظاهر می شود، به این معنی است که کتابخانه سیستم عامل مورد استفاده در حال حاضر یک نسخه قدیمی است. بنابراین لازم است جدیدترین نسخه را از طریق لینک ارائه شده در قسمت “Firmware Library” دانلود کنید.
شکل 30. پیام خطای نسخه کتابخانه سیستم عامل
نتیجه گیری
این سند مقدمه ای اساسی برای کمک به کاربران برای درک بهتر کد برنامه Module_UART و پروتکل ارتباطی UART ارائه کرده است. پس از دانلود و آماده سازی منبع انجام شد. فصل توصیف عملکردی را معرفی کرد file ساختار دایرکتوری، معماری API، توضیحات API و استفاده از API به عنوان مثالamples فصل دستورالعملهای استفاده، آمادهسازی محیطی، گردآوری و آزمایش کد برنامه «Module_UART» را نشان میدهد. همچنین دستورالعملهایی را برای پیوند کد و تنظیمات اصلاح و همچنین توضیح برخی از مشکلات رایجی که ممکن است با آن مواجه شوید ارائه کرده است. همه اینها در کنار هم به کاربران اجازه می دهد تا به سرعت نحوه استفاده از API ها را درک کنند و متعاقباً زمان شروع کار را کاهش دهند.
مواد مرجع
برای اطلاعات بیشتر به هولتک مراجعه کنید webسایت: www.holtek.com
اطلاعات نسخه ها و اصلاحات
تاریخ | نویسنده | رها کنید | اطلاعات اصلاح |
2022.04.30 | 蔡期育 (چی یو تسای) | V1.00 | نسخه اول |
سلب مسئولیت
تمام اطلاعات، علائم تجاری، آرم ها، گرافیک ها، فیلم ها، کلیپ های صوتی، لینک ها و سایر مواردی که در این صفحه نمایش داده می شوند webسایت ("اطلاعات") فقط برای مرجع است و در هر زمان بدون اطلاع قبلی و بنا به صلاحدید Holtek Semiconductor Inc. و شرکت های مرتبط با آن (از این پس "Holtek"، "شرکت"، "ما"، "تغییر می یابد. ما» یا «ما»). در حالی که Holtek تلاش می کند تا از صحت اطلاعات در این مورد اطمینان حاصل کند webسایت، هیچ ضمانت صریح یا ضمنی توسط Holtek به صحت اطلاعات داده نمی شود. Holtek هیچ مسئولیتی در قبال هرگونه نادرستی یا نشتی ندارد.
هولتک مسئولیتی در قبال خسارات ناشی از استفاده یا در ارتباط با استفاده از این سیستم (از جمله ویروس کامپیوتری، مشکلات سیستم یا از دست دادن داده ها) ندارد. webسایت توسط هر حزب ممکن است پیوندهایی در این قسمت وجود داشته باشد که به شما امکان بازدید از آن را می دهد webسایت های شرکت های دیگر
اینها webسایت ها توسط Holtek کنترل نمی شوند. Holtek هیچ مسئولیت و تضمینی در قبال اطلاعات نمایش داده شده در این سایت ها نخواهد داشت. هایپرلینک به سایرین webسایت ها در معرض خطر شما هستند.
محدودیت مسئولیت
به هیچ وجه هلتک لیمیتد در قبال هر گونه ضرر یا خسارتی که مستقیم یا غیرمستقیم در ارتباط با دسترسی یا استفاده شما از این سایت ایجاد شده باشد مسئولیتی در قبال هیچ طرف دیگری ندارد. webسایت، محتوای موجود در آن یا هر کالا، مواد یا خدمات.
قانون حاکم
سلب مسئولیت موجود در webسایت باید بر اساس قوانین جمهوری چین اداره و تفسیر شود. کاربران به حوزه قضایی غیر انحصاری دادگاه های جمهوری چین تسلیم خواهند شد.
به روز رسانی سلب مسئولیت
Holtek حق به روز رسانی سلب مسئولیت را در هر زمان با یا بدون اطلاع قبلی محفوظ می دارد، همه تغییرات بلافاصله پس از ارسال به webسایت
اسناد / منابع
![]() |
نکته برنامه HOLTEK HT32 MCU UART [pdf] دفترچه راهنمای کاربر HT32 MCU، یادداشت کاربردی UART، HT32 MCU UART، یادداشت کاربردی، HT32، MCU UART یادداشت کاربردی، HT32 MCU UART یادداشت کاربردی |