USART در میکروکنترلرهای STM32F1 همانند بسیاری از ویژگی های میکروکنترلرهای STM32 با میکروکنترلرهای دیگر شرکت ها متفاوت است. برای پروتکل ارتباطی USART در میکروکنترلرهای STM32 می توان تفاوت هایی را بر شمرد. در این نوشته قصد داریم به بررسی قابلیت های USART در STM32 بپردازیم. این موارد عبارتند از:
- قابلیت LIN؛
- قابلیت فرستنده / گیرنده مادون قرمز IrDA؛
- قابلیت Smart Card؛
- قابلیت Single Wire؛
- قابلیت DMA.اینکه USART در میکروکنترلرها چیست و به طور کلی مفاهیم پروتکل ارتباطی USART به چه صورت است، مورد بحث این نوشته نیست. برای اطلاعات بیشتر در این رابطه به نوشتۀ راه اندازی USART در AVR مراجعه بفرمایید.در آموزش STM32 یوبرد، قبل از ورود و آشنایی با این ویژگی ها لازم است تا با برخی از تعاریف مهم آشنا شویم:
سیگنال NRZ و RZ در پروتکل های ارتباطی
نام NRZ مخفف عبارت Non Return to Zero است. تصویر 1 نمایش دهندۀ یک سیگنال NRZ است. این سیگنال نوعی پالس بوده که بین پروتکل های ارتباطی دو دستگاه انتقال پیدا می کند. همان طور که در تصویر 1 مشاهده می کنید، این پالس در سطح صفر قرار نمی گیرد. یعنی یا در سطح 1 و یا در سطح 1- قرار می گیرد. به صورت کلی سیگنال NRZ یکی از روش های کدگذاری محسوب می شود.
از دیگر روش های کد گذاری می توان به سیگنال RZ اشاره کرد. این سیگنال بر خلاف سیگنال NRZ که به هیچ عنوان سطح صفر نداشت، پس از هر مرحله و قبل از ورود به سطح دیگر، برای مدتی هر چند کوتاه وارد سطح صفر می شود و پس از آن تغییر سطح می دهد.
تصویر 1 – پالس NRZ و RZ در پروتکل های ارتباطی
حال جملۀ زیر از دیتاشیت میکروکنترلرهای STM32F1 را ببینیم:
سیگنالی که بین دو دستگاه از طریق پروتکل ارتباطی USART انتقال پیدا می کند، به شرط اینکه یکی از این دو دستگاه، یکی از میکروکنترلرهای STM32F1 باشد، پالس NRZ است. به طور خلاصه می توان گفت سیگنال انتقالی در USART در میکروکنترلرهای STM32F1، پالس NRZ است.
سیگنال Break
سیگنال Break، سیگنالی است که می توان آن را به راحتی ساخت، آن را توسط پروتکل های ارتباطی ارسال کرد و پس از دریافت، آن را شناسایی کرد و تشخیص داد. همان طور که در تصویر 2 مشاهده می کنید، سیگنال Break، از بیت شروع تا بیت پایان مقدار صفر دارد. از این سیگنال در مد LIN در بخش پروتکل ارتباطی USART در میکروکنترلرهای STM32F1 استفاده می شود.
کاربرد این سیگنال تشخیص تفاوت بین Baud Rate دو دستگاه مرتبط شده به هم است. انتقال داده در دستگاه ها و رایانه های امروزی از طریق داده های سریال صورت می گیرد. این یعنی داده ها به صورت بیت به بیت منتقل می شوند. نرخ Baud Rate در واقع به تعداد تغییرات سیگنال در هر ثانیه گفته می شود. در حقیقت به صورت کلی نرخ Baud Rate سرعت انتقال داده ها را مشخص می کند. زمانی که قرار است داده ای بین دو دستگاه انتقال پیدا کند، لازم است تا سرعت ارسال و دریافت داده در هر دو دستگاه یکسان باشد. در غیر این صورت، داده ها به صورت اشتباه دریافت می شوند. از سیگنال Break به همین منظور استفاده می شود.
تصویر 2 – سیگنال Break در پروتکل ارتباطی USART
اکنون که با برخی از تعاریف لازم آشنا شدیم به دیتاشیت میکروکنترلرهای STM32F1 مراجعه کرده و ارتباط سریال در STM32 را بررسی می کنیم.
قابلیت LIN در USART میکروکنترلرهای STM32F1
LIN مخفف عبارت Local Interconnect Network یک پروتکل ارتباطی سریال است. از پروتکل ارتباطی LIN به عنوان یک پروتکل بسیار ارتباطی ارزان در کنار پروتکل CAN در خودروها استفاده می شود. برای آشنایی بیشتر و استاندارد با پروتکل LIN که یک پروتکل ارتباطی تک سیم است، پیشنهاد می شود که استاندارد ISO 9141 را مطالعه بفرمایید. در سخت افزار UART میکروکنترلرهای امروزی، سخت افزار اختصاصی LIN نیز تعبیه می شود. از این جمله می توان به پروتکل USART در STM32F1 اشاره کرد. در زمانی که از قابلیت LIN در پروتکل UART میکروکنترلرهای STM32F1 استفاده می کنیم، قابلیتی داریم که با استفاده از آن می توان یک سیگنال Break ساخت و سپس آن را تشخیص داد. به عبارتی می توان یک سیگنال Break را ساخت، آن را روی مسیر TX ارسال کرد و روی مسیر RX تشخیص داد. به طور کلی از این قابلیت در کاربردهای خودرویی استفاده می شود. به طور مثال در برخی از خودروهای امروزی، ماژول دزدگیر (Intrusion) و همچنین آژیر (Siren) با استفاده از پروتکل ارتباطی LIN به ماژول کنترل بدنه (Body Control Module) متصل می شود.
تصویر 3 – پروتکل ارتباطی LIN در خودرو
در آموزش میکروکنترلرهای AVR یوبرد دیدیم که قابلیت LIN در USART میکروکنترلرهای AVR متداول وجود ندارد. اما در سری Automotive میکروکنترلرهای AVR قابلیت LIN وجود دارد. به طور کلی در اکثر میکروکنترلرهایی که برای کاربرد خودرویی ساخته می شوند و بنا بر اتصال آنها به شبکۀ خودرو به صورت مستقیم باشد، پروتکل LIN تدارک دیده شده است.
فرستنده / گیرنده مادون قرمز (IR یا Infrared Radiation)
راه اندازی USART در STM32 علاوه بر استفاده از سیم کشی مستقیم با استفاده از امواج مادون قرمز نیز امکان پذیر است. همان طور که می دانید برای ارتباط دو دستگاه از طریق پروتکل ارتباطی USART باید پایه های TX و RX هر دو دستگاه را به یکدیگر متصل کرد. این دو پایه را می توان با سیم به یکدیگر متصل کرد. راه دیگری که وجود دارد استفاده از فرستنده و گیرنده های مادون قرمز است. به این صورت که پایه های TX و RX هر دو طرف را فرستنده / گیرنده مادون قرمز متصل کرد. به طوری که این دو فرستنده / گیرنده در رو به روی هم قرار گیرند تا در دید هم باشند. بدین صورت می توان بدون استفاده از سیم، اطلاعات را بین دو دستگاه انتقال داد.
به طور کلی لازم است تا بین فرستنده و گیرنده و میکروکنترلر، یک سخت افزار به نام Decoder به عنوان مثال TIR1000، برای تبدیل سطح منطقی قرار گیرد. زمانی که Decoder بر سر راه فرستنده قرار گیرد، سیگنال را از مسیر TX در قالب USART دریافت می کند و آن را به سیگنال مطلوب انتقال مادون قرمز تبدیل می کند. همچنین زمانی که این سخت افزار در مسیر RX قرار گیرد، سیگنال مادون قرمز را دریافت کرده و آن را به سیگنال مطلوب در قالب USART تبدیل می کند.
اما در ارتباط USART STM32، این سخت افزار به صورت داخلی در میکروکنترلر وجود دارد و می توان به صورت مستقیم و بدون نیاز به واسطی مثل تراشۀ دیکودر TIR1000، فرستنده و گیرندۀ مادون قرمز را به پایه های USART در میکروکنترلرهای STM32F1 وصل کرد. نمونه ای از ارتباط IrDA در USART میکروکنترلرهای STM32F1 در تصویر 4 مشاهده می شود.
تصویر 4 – قابلیت IrDA در UART میکروکنترلرهای STM32F1
قابلیت Smart Card در USART میکروکنترلرهای STM32F1
Smart Card یا همان سیم کارت از واحد USART در میکروکنترلرهای STM32F1 استفاده می کند. در این حالت تنها از یک خط دیتا به نام TXو یک خط کلاک به نام SCLK استفاده می شود. استفاده از تنها مسیر TX به این معنی نیست که فقط می توان ارسال داده انجام داد. بلکه مسیر TX در زمان ارسال به سیم کارت، هر دو عمل ارسال و دریافت داده را انجام می دهد و این خود یکی دیگر از قابلیت های USART در میکروکنترلرهای STM32F1 است. نمونه ای از ارتباط Smart Card پروتکل USART میکروکنترلرهای STM32F1 در تصویر زیر در محیط نرم افزار آلتیوم دیزاینر مشاهده می شود. (آموزش طراحی PCB)
تصویر 5 – قابلیت Smart Card در UART میکروکنترلرهای STM32F1
قابلیت Single Wire در USART میکروکنترلرهای STM32F1
در آموزش STM32 UART علاوه بر موارد مذکور قابلیت دیگری نیز وجود دارد که به آن قابلیت Single Wire، قابلیت تک سیمه یا Half Communication نیز گفته می شود. یکی دیگر از قابلیت های USART در میکروکنترلرهای STM32F1 بوده که با استفاده از این قابلیت می توان به جای استفاده از هر دو پایۀ RX و TX، تنها یکی از پایه ها را استفاده کرد. در این نوع ارتباط باید از مقاومت Pull Up استفاده کرد. در تصویر زیر به عنوان نمونه، دو پایۀ TX در دو واحد USART یک میکروکنترلر STM32F1 را به هم متصل کرده ایم.
تصویر 6- قابلیت Single Wire در UART میکروکنترلرهای STM32F1
واحد DMA در USART میکروکنترلرهای STM32F1
واحد USART در میکروکنترلرهای STM32F1 دارای واحد DMA (مخفف Direct Memory Access) است. در راه اندازی سریال STM32 با استفاده از این قابلیت می توان اطلاعات دریافتی از طریق USART را در SRAM میکروکنترلرهای STM32F1 نوشت (و برعکس). این قابلیت یکی از مهم ترین قابلیت های USART در میکروکنترلرهای STM32F1 است. به این دلیل که هر چه از کانال های بیشتری از DMA استفاده شود، حجم کمتری از CPU میکروکنترلرهای STM32F1 اشغال می شود و همین باعث افزایش هر چه بیشتر سرعت عملکرد میکروکنترلرهای STM32F1 می شود.
به عنوان مثال فرض کنید بخواهیم اطلاعاتی را از پورت سریال USART در میکروکنترلرهای STM32F1 ارسال کنیم و حجمی از CPU را اشغال نکنیم. لازم است تا تنظیمات واحد DMA را انجام داده و سپس اطلاعات را بی وقفه و به صورت مداوم از ارسال کنیم. همین کار را نیز می توان برای دریافت اطلاعات نیز انجام داد. از پروتکل USART در میکروکنترلرهای STM32F1 اطلاعاتی را دریافت کرده و آن را در یک متغیر از پیش تعریف شده در SRAM میکروکنترلر به صورت مداوم ذخیره کنید.
نتایج بررسی ویژگی های USART در میکروکنترلرهای STM32F1:
- پالس انتقالی در USART میکروکنترلرهای STM32F1، پالس NRZاست.
- در USART میکروکنترلرهای STM32F1سخت افزار اختصاصی LIN تعبیه شده که در کاربردهای خودرویی می توان از آن استفاده کرد.
- هنگام استفاده از فرستنده ها و گیرنده های مادون قرمز جهت ارتباط از راه دور دو دستگاه، می توان از USART در میکروکنترلرهای STM32F1 استفاده کرد و در این حالت نیازی به استفاده از Decoder خارجی نیست.
- برای ارسال اطلاعات به یک سیم کارت و همچنین دریافت اطلاعات از آن، به واحد USART و پایه های TX و SCLK نیاز است.
- قابلیت Single Wire برای استفاده از تنها یک پایه در پروتکل USART در میکروکنترلرهای STM32F1 وجود دارد.
- استفاده از واحد DMA در USART میکروکنترلرهای STM32F1 یکی از بهترین راه ها در افزایش سرعت عملکرد میکروکنترلرهای STM32F1است.
سلام استاد.فکرکنم من اولین نفری باشم که این نوشته رو میخونم چون تاچند دقیقه پیش این نوشته توی سایت نبود. من خودم STM32 کار میکنم اما نمیدونستم که LIN چیه و بخصوص اینکه توی USART چیکار میکنه. کاربردش رو خیلی خوب گفتید. تشکر.
سلام. خواهش میکنم. ان شاء الله که مفید بوده باشه.
سلام استاد. لطفا درمورد DMA در USART میکروکنترلرهای STM32 یا کلا DMA مطلب قرار میدید؟
سلام. بله حتماً. DMA مبحث خیلی مهمیه و حتماً در آینده مطالبی درباره ش قرار میدیم.
سلام و عرض ادب. نمونه کدهایی که برای قابلبت هایی که توی این نوشته گفتید رو جایی قرار دادید که بتونیم استفاده کنیم؟ مثلا قابلیت LIN یا، قابلیت فرستنده / گیرنده مادون قرمز IrDA یا، قابلیت Smart Card، قابلیت Single Wire، قابلیت DMA.
سلام وقت بخیر. درحال حاضر خیر. در آینده در قسمت پروژه قرار خواهند گرفت.
با عرض سلام و خداقوت
میشه راجع به ارتباط تک سیمه بیشتر توضیح بدید، توی توضیحاتتون فرمودید باید دو پایه TX پول آپ بشند. چرا باید دو واحد usart استفاده بشود. متشکرم
سلام وقت بخیر. تشکر.
ارتباط تک سیمه مبحث این نوشته نیست و در حد کلیات اون توضیح داده شده، برای جزئیات بیشتر می تونید در اینترنت درمورد اون جستجو کنید. اینکه دو واحد UART استفاده شده، یک مثال بوده و نیاز نیست حتما از دو واحد استفاده بشه.