1. خانه
  2. آموزش
  3. جلسه بیست و ششم _نحوه راه اندازی واحد Uart و برنامه آن در محیط STM32CubeIDE(بخش سوم)

جلسه بیست و ششم _نحوه راه اندازی واحد Uart و برنامه آن در محیط STM32CubeIDE(بخش سوم)

دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد سریال(بخش سوم)

در ادامه آموزش STM32 با استفاده از توابع HAL در این جلسه قصد داریم تا در این مطلب برنامه ای بنویسیم تا بصورت مرتب رشته ای را به رایانه ارسال نماید و رایانه نیز رشته هایی را به سمت میکرو ما بفرستد و میکرو پس از دریافت این رشته ها آن ها را روی نمایشگر خود نمایش دهد. برای مانیتور کردن اطلاعات ارسال شده به سمت رایانه می توانید از نرم افزار Docklight یا Hercules یا Putty و غیر استفاده کنیم .
در جلسه قبل با استفاده از نرم افزار STM32CubeMX تنظیمات مربوط به سریال را انجام دادیم و کد برنامه را در محیط STM32CubeIDE تولید نمودیم در این جلسه قصد داریم تا به شرح و معرفی کدهای تولید شده توسط نرم افزار STM32CubeMX بپردازیم و پس از آن با دستورات پر کاربرد واحد سریال آشنا شویم و پس از آن برنامه را تشریح نماییم. با توجه به اینکه در این پروژه از LCE 2×16 برای نمایش داده های دریافتی استفاده می شود برای راه اندازی آن می توانید به جلسات آموزش LCD2x16 مراجعه نمایید. در ابتدا به سراغ فایل main.c می رویم.

huart1

استراکچر مربوط به تنظیمات واحد Usart1 می باشد.

Uart_Pro

معرفی تابع تنظیمات و پیکربندی واحد Usart1

Uart1_Func

تابع مربوط به پیکربندی واحد Usart1 می باشد که در آن پارامترهای تنظیم شده در نرم افزار STM32CubeMX اعمال شده است. در این تابع مواردی همچون Baudrate واحد سریال و طول قالب داده و تعداد Stop bit و فعال بودن قسمت فرستنده یا گیرنده واحد سریال و دیگر موارد تنظیم می شوند.
حال به سراغ توابع کاربردی واحد سریال می رویم:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

برای ارسال یک رشته از این تابع استفاده می شود. این تابع دارای ۴ آرگومان می باشد که آرگومان اول اشاره گر به استراکچر واحد سریال مورد نظر می باشد.
آرگومان دوم، نام رشته مورد نظر برای ارسال است و آرگومان سوم نیز طول رشته مورد نظر برای ارسال را مشخص می کند و در آرگومان چهارم باید زمان Timeout را بر حسب میلی ثانیه مشخص نمود.

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

از این تابع برای ارسال رشته به همراه وقفه و بدون توقف استفاده می شود و دارای سه آرگومان می باشد که اشاره گر به استراکچر واحد سریال مورد نظر و رشته مورد نظر برای ارسال و طول رشته به این تابع ارسال می شود.

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

از این تابع برای دریافت اطلاعات وارد شده از واحد سریال استفاده می شود که دارای ۴ آرگومان می باشد و در آرگومان اول استراکچر مربوط به واحد سریال مورد نظر قرار می گیرد و در آرگومان دوم یک رشته قرار می گیرد تا اطلاعات دریافتی در آن قرار گیرد و در آرگومان سوم طول دیتا دریافتی مشخص می شود و در آرگومان چهارم زمان Timeout بر حسب میلی ثانیه قرار می گیرد.

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

وظیفه این تابع دریافت اطلاعات وارد شده از واحد سریال بدون توقف می باشد با دریافت اطلاعات اینتراپت نیز فعال می شود. این تابع دارای ۳ آرگومان می باشد که در آرگومان های این تابع استراکچر تنظیمات واحد سریال مورد نظر، رشته برای ذخیره اطلاعات دریافتی و طول داده دریافتی قرار می گیرد.

حال به سراغ توضیح برنامه نوشته شده می رویم:

Var

Uart_Data : متغیر مربوط به ذخیره اطلاعات وارد شده از واحد سریال می باشد.
Backup_Data: متغیر مربوط به ذخیره بایت به بایت اطلاعات دریافتی می باشد.
Len_Counter : طول رشته دریافتی با استفاده از این متغیر مشخص می شود
LCD_Allow_Show : از این متغیر در صورتیکه اطلاعات جدیدی از واحد سریال دریافت شود یک می شود و مجوز نمایش اطلاعات دریافتی بر روی نمایشگر با یک شدن این متغیر صادر می شود.

Prog1

توابع و دستورات مربوط به پیکربندی ال سی دی و نمایش متن بر روی آن در ابتدا اجرای برنامه می باشد. متن های بالا تا زمانیکه داده جدیدی به میکرو از طریق سریال ارسال نشود روی ال سی دی پاک نمی شوند.

Enable_Uart_Int

با اجرای این خط واحد دریافت داده سریال با فعال شدن وقفه ، فعال می شود.

Uart1_Transmit

هر ۳ ثانیه یک بار رشته مورد نظر به رایانه ارسال می شود.

Show_Data

درصورتیکه شرط برقرار باشد یا به عبارتی دیگر داده ای به میکرو ارسال شده باشد برنامه وارد شرط می شود و در ابتدا با پاک کردن نمایشگر داده دریافتی از واحد سریال را نمایش می دهد و پس از آن آرایه مربوط به دریافت داده را بصورت کامل پاک می کند و پس از آن مجددا اینتراپت دریافت داده سریال فعال می شود.
با توجه به اینکه ما برای دریافت داده سریال اینتراپت دریافت را فعال کرده ایم در زمانیکه داده ای دریافت شود روتین مربوط به سریال فعال می شود پس برای خواندن داده ها باید به روتین وقفه سریال مراجعه نماییم که این روتین در فایل stm32f1xx_it.c وجود دارد پس به سراغ این تابع می رویم تا ادامه برنامه را شرح دهیم.

Uart1_Interrupt_Func

با فعال شدن وقفه برنامه به این تابع رجوع می کند که در ابتدا کار طول داده دریافتی را با استفاده از دستور huart1.RxXferCount مشخص می نماییم و پس از آن به یک حلقه می رسیم این حلقه به تعداد داده دریافتی ادامه پیدا می کند و داده ها را بصورت بایت به بایت می خواند و در ابتدا در Backup_Data قرار می دهد و پس از آن با توجه به مقدار Len_Counter بایت خوانده شده را در اندیش متناظر آرایه Uart_Data قرار می دهد و پس از خواندن کامل اطلاعات دریافتی متغیر LCD_Allow_Show را یک می کند تا مجوز نمایش اطلاعات دریافتی بر روی ال سی دی صادر شود.
لازم به ذکر است برای اینکه برنامه بتواند متغیرهای استفاده شده در این بخش را شناسایی کند، می بایست در ابتدای stm32f1xx_it.c این متغیر ها را بصورت extern معرفی نماییم.

Var_Extern

زندگی تون پر از نور و مسیرتون سبز

محمد هادی دشتی

لینک های مرتبط با آموزش:
جلسه اول_معرفی هسته آرم و میکروکنترلرهای ۳۲ بیتی شرکت ST

جلسه دوم_معرفی نرم افزارهای مورد نیازجهت برنامه نویسی و پروگرام

جلسه سوم _ آموزش نحوه دانلود آخرین نسخه از نرم افزار STM32CubeIDE

جلسه چهارم _نصب نرم افزار STM32CubeIDE و نصب کتابخانه

جلسه پنجم _ نحوه انجام تنظیمات در نرم افزار STM32CubeMX برای تولید کد برنامه چشمک زن

جلسه ششم _ برنامه نویسی یک چشمک زن ساده با استفاده از نرم افزار STM32CubeIDE

جلسه هفتم _ نحوه انجام تنظیمات پایه به صورت ورودی در نرم افزار STM32CubeMX و برنامه نویسی یک کلید

جلسه هشتم _ معرفی نرم افزار STM32 Flash Loader Demonstrator (پروگرامر سریال) 

جلسه نهم _ نحوه راه اندازی ال سی دی کاراکتری (قسمت اول)

جلسه دهم _ نحوه راه اندازی ال سی دی کاراکتری _ افزودن کتابخانه (قسمت دوم)

جلسه یازدهم _ نحوه راه اندازی ال سی دی کاراکتری _ معرفی توابع (قسمت سوم)

جلسه دوازدهم _ دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد ADC(بخش اول)

جلسه سیزدهم_دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد ADC(بخش دوم)

جلسه چهاردهم_دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد تایمر(بخش اول)

جلسه پانزدهم_دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد تایمر(بخش دوم)

جلسه شانزدهم _ نحوه راه اندازی وقفه با تحریک خارجی(جلسه اول)

جلسه هفدهم _ راه اندازی وقفه با تحریک خارجی (بخش دوم)

جلسه هجدهم_دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی سون سگمنت(بخش اول)

جلسه نوزدهم _ نحوه راه اندازی سون سگمنت و برنامه آن در محیط STM32CubeIDE (بخش دوم)

جلسه بیستم _ نحوه راه اندازی واحد کانتر ونحوه انجام تنظیمات در محیط STM32CubeMX(بخش اول)

جلسه بیست و یکم _ نحوه راه اندازی کانتر و برنامه آن در محیط STM32CubeIDE (بخش دوم)

جلسه بیست و دوم _ نحوه راه اندازی واحد PWM (بخش اول) 

جلسه بیست و سوم _ نحوه راه اندازی واحد PWM (بخش دوم)

جلسه بیست و چهارم _ معرفی واحد UART و سطوح منطقی ولتاژ و انواع مبدل ها(بخش اول)

جلسه بیست پنجم _ نحوه راه اندازی واحد UART ونحوه انجام تنظیمات در محیط STM32CubeMX(بخش دوم)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
برای ادامه، شما باید با قوانین موافقت کنید