GPIO در STM32

توسط | 11 بهمن, 1398 | STM32, میکروکنترلر, وبلاگ | 24 دیدگاه ها

gpio-در-stm32

آموزش STM32 یوبرد

شروع بازی ST

آموزش های رایگان STM32

فیلم های آموزش STM32

آموزش خصوصی STM32

اخبار جدید یوبرد در اینستاگرام

GPIO در STM32 به مفهوم مجموعۀ پایه های ورودی/خروجی به همراه تمامی مدهای عملکرد آنهاست. GPIO مخفف عبارت General-purpose input/output به معنی ورودی/خروجی همه منظوره است. واحد GPIO در STM32 در سری های مختلف دارای تعداد پورت ها و پایه ها و عملکردهای متفاوت است. پورت های ورودی/خروجی با حروف انگلیسی A و B و C و … نام گذاری شده اند. و هر پورت می تواند حداکثر 16 پایه داشته باشد. در میکروکنترلرهای STM32، عملکردهای مربوط به پورت های I/O که شامل خواندن مقادیر دیجیتال از آنها یا نوشتن مقادیر دیجیتال روی آنهاست، با عملکردهای مربوط به واحدهای دیگر تلفیق شده و نام GPIO را به خود گرفته است. در برخی سری های این میکروکنترلرها مثل سری STM32F101/2/3/5/7xx، این واحد، GPIO and AFIO نام دارد. AFIO مخفف عبارت Alternate function input/output به معنی ورودی/خروجی عملکردهای دیگر است. در واقع هر پایۀ میکروکنترلر علاوه بر عملکرد ورودی/خروجی در پورت، می تواند توسط دیگر واحدهای داخلی به کار گرفته شود. برای این کار باید پایۀ مورد نظر در مد Alternate function یا AF پیکربندی شود. نکتۀ مورد توجه این است که پیش از فعال کردن یک واحد داخلی که نیاز به پایۀ ورودی/خروجی دارد، باید مد آن پایه توسط رجیسترهای GPIO، روی AF تنظیم شود. فرض کنید می خواهیم یک پروتکل I2C را در STM32F103VET6 توسط واحد I2C1 راه اندازی کنیم. در این صورت باید پایه های PB6 و PB7 یا PB8 و PB9 را قبل از راه اندازی I2C1 در مد صحیح پیکربندی کنیم. این دو پایه را که خطوط SCL و SDA واحد I2C1 هستند، باید در مد AF در حالت Open-drain تنظیم کنیم.

پایه-i2c1-پورت-b-remap

تصویر 1 – عملکردهای دیگر پایه های PB6 تا PB9 در STM32F103VET6 و انتخاب عملکرد واحد I2C1 برای آنها

در این نوشته به واحد GPIO در STM32 برای سری های زیر می پردازیم:

STM32MP157 STM32L4+ STM32F0x1

STM32F0x2

STM32F0x8

STM32F101xx

STM32F102xx

STM32F103xx

STM32F105xx

STM32F107xx

STM32G0x1 STM32H742xx

STM32H743/53xx

STM32H750xB

STM32F334xx STM32F205xx

STM32F207xx

STM32F215xx

STM32F217xx

STM32WB55xx

STM32WB35xx

STM32F75xxx

STM32F74xxx

STM32F405xx/07xx

STM32F415xx/17xx

STM32F42xxx

STM32F43xxx

جدول 1 – المان های مورد بحث این نوشته

بنابراین هر جایی از نوشته که می گوییم “GPIO در STM32″، منظور ما سری های مذکور است. با این که در یک نوشته نمی توان به GPIO همۀ میکروکنترلرهای STM32 پرداخت، اما مطالب این نوشته برای یادگیری GPIO سری های دیگر کافی است.

نکته: سری STM32WB55/35xx میکروکنترلرهای مخصوص ارتباطات بی سیم هستند که چند پروتکل ارتباطی را پشتیبانی می کنند. همچنین STM32MP157 یک میکروپروسسور است و لازم دانستیم در این نوشته مباحث مربوط به GPIO آن را بررسی کنیم.

نکته: در این نوشته مطالب جامعی دربارۀ GPIO در STM32 آمده است. اختصاص زمان کافی  برای مطالعۀ دقیق این مطالب و سعی در یادگیری آنها، درک عمیق از واحد GPIO در میکروکنترلرهای STM32 را نتیجه می دهد. ممکن است برخی مطالب، مورد نیاز افرادی که کار با این میکروکنترلرها را به تازگی شروع کرده اند، نباشد. بنابراین این افراد می توانند خواندن مطالب مربوط به پیکربندی GPIO در مدهای مختلف، مشخصات الکتریکی و زمانی و همچنین امکاناتی مثل قفل پیکربندی را به زمان دیگری موکول نمایند.

در ادامه ابتدا به بلوک دیاگرام GPIO در STM32 می پردازیم. سپس مدهای GPIO را بیان می کنیم و پیکربندی GPIO را برای هر مد شرح می دهیم. بعد از آن به مشخصات الکتریکی و زمانی GPIO می پردازیم. سپس با ذکر چند نکته، چند مفهوم مهم GPIO از جمله قفل پیکربندی GPIO در STM32 را شرح می دهیم. در نهایت رجیسترهای GPIO را بررسی می کنیم.

برای مطالعۀ یک پروژه GPIO در STM32 می توانید به نوشتۀ «راه اندازی سون سگمنت با STM32» مراجعه نمایید.

راه-اندازی-سون-سگمنت-stm32

تصویر 2 – راه اندازی سون سگمنت با STM32

بلوک دیاگرام GPIO در STM32

بلوک دیاگرام پایه های GPIO در STM32 در سری های مختلف، تفاوت هایی با هم دارند. به طور کلی بخش های اصلی هر پایه از پورت های GPIO عبارتند از:

  • دیودهای محافظ: که در برخی سری ها ممکن است وجود نداشته باشند؛
  • مقاومت های پول آپ و پول دون: که در برخی سری ها در بخش درایور ورودی و در برخی دیگر، در کنار دیودهای محافظ هستند؛
  • درایور ورودی: که شامل یک اشمیت تریگر و گاهی مقاومت های پول آپ و پول دون است؛
  • درایور خروجی: که شامل کنترل کنندۀ خروجی و ترانزیستورهای N-MOS و P-MOS است.

بلوک دیاگرام GPIO در STM32 را برای سری های مورد بحث این نوشته (به جز سری STM32WB55/35xx و STM32WB35xx)، می توان در تصویر زیر خلاصه کرد.

بلوک-دیاگرام-stm32

تصویر 3 – بلوک دیاگرام GPIO در STM32

در برخی سری ها مثل STM32F101/2/3/5/7xx، مقاومت های پول آپ و پول دون در بخش درایور ورودی و قبل از اشمیت تریگر قرار دارد (1). در بسیاری دیگر، مکان این مقاومت های پول آپ و پول دون  در کنار دیودهای محافظ است (2). در بلوک دیاگرام GPIO برخی سری ها دیودهای محافظ وجود ندارد (3). در برخی سری ها GPIO قابلیت p5-Volt tolerant را دارد. در این موارد کاتد دیود محافظ بالایی، به جای اتصال به VDD، به VDD FT متصل است (4). همچنین در بلوک دیاگرام برخی سری ها، مسیر ورودی آنالوگ، از ورودی اشمیت تریگر گرفته شده است (5). مسیر خروجی آنالوگ نیز مستقیماً به پایه متصل شده است (6). در برخی دیگر، ورودی و خروجی آنالوگ به این شکل نیست. و روی یک خط به صورت ورودی /خروجی متصل به پایه رسم شده است (7).

بلوک دیاگرام GPIO در STM32WB55xx و STM32WB35xx به صورت تصویر زیر است. از تفاوت های اصلی بلوک دیاگرام GPIO این سری با سری های قبل، وجود حفاظت ESD است.

بلوک-دیاگرام-stm32wb55xx-stm32wb35xx

تصویر 4 – بلوک دیاگرام GPIO در STM32WB55xx و STM32WB35xx

مدهای GPIO در STM32

این مدها حاصل فعال سازی یا غیر فعال سازی مقاومت های پول آپ و پول دون، پوش پول یا Open-drain بودن درایور خروجی و استفاده از ورودی/خروجی آنالوگ و AFIO است. در GPIO میکروکنترلرهای STM32 در بخش ورودی، هم مقاومت پول آپ و هم مقاومت پول دون وجود دارد. همچنین در سری هایی که مقاومت های پول آپ و پول دون در بخش درایور ورودی نیست، این مقاومت ها می توانند به همراه درایور خروجی در حالت های پوش پول و Open-drain فعال شوند. در مدهای AFO نیز پایه ها می توانند به صورت پوش پول یا Open-drain به همراه پول آپ یا پول دون یا بدون آنها باشند. در سری های مورد بحث این نوشته (به جز STM32F101/2/3/5/7xx)، مدهای GPIO به صورت جدول زیر است.

I/O configuration PUPDR(i) [1:0] OSPEEDR(i) [B:A] OTYPER (i) MODER(i) [1:0]
PP GP output 0 0 SPEED [B:A] 0 01
PP+PU GP output 1 0 0
PP+PD GP output 0 1 0
Reserved 1 1 0
OD GP output 0 0 1
OD+PU GP output 1 0 1
OD+PD GP output 0 1 1
Reserved 1 1 1
PP AF 0 0 0 10
PP+PU AF 1 0 0
PP+PD AF 0 1 0
Reserved 1 1 0
OD AF 0 0 1
OD+PU AF 1 0 1
OD+PD AF 0 1 1
Reserved 1 1 1
Floating Input 0 0 x x x 00
PU Input 1 0 x x x
PD Input 0 1 x x x
Reserved (input floating) 1 1 x x x
Analog Input/output 0 0 x x x 11
Reserved 1 0 x x x
0 1 x x x
1 1 x x x
GP = general-purpose, PP = push-pull, PU = pull-up, PD = pull-down, OD = open-drain, AF = alternate function.

جدول 2 – مدهای GPIO در STM32، سری های به جز STM32F101/2/3/5/7xx

بلوک-دیاگرام-پایه-stm32

تصویر 5 – بلوک دیاگرام GPIO در STM32، مقاومت پول آپ و پول دون در کنار دیود محافظ

مدهای GPIO در STM32F101/2/3/5/7xx

در این سری مقاومت های پول آپ و پول دون در بخش درایور ورودی قرار دارند. این مقاومت ها تنها در مدهای ورودی فعال می شوند. بنابراین تعداد مدهایی که به وجود می آید، کمتر از مدهایی است که در بخش قبل بررسی کردیم. در این سری خروجی می تواند به صورت پوش پول یا Open-drain باشد. در هردوی حالات مذکور مقاومت های پول آپ و پول دون وجود ندارد. هر پایه در مدهای ورودی می تواند دارای مقاومت پول آپ، پول دون یا بدون آنها باشد. در مدهای AFO، پایه ها می توانند پوش پول یا Open-drain بدون مقاومت های پول آپ و پول دون باشند. در این سری، مد آنالوگ در گروه مدهای ورودی قرار دارد. مدهای GPIO در STM32F101/2/3/5/7xx به صورت جدول زیر است.

PxODR MODE0 MODE1 CNF0 CNF1 Configuration mode
0 or 1 MODE[1:0] 0 0 Push-pull GP Output
0 or 1 1 Open-drain
Don’t care 0 1 Push-pull AF output
Don’t care 1 Open-drain
Don’t care 00 0 0 Analog Input
Don’t care 1 Floating
0 0 1 Pull-down
1 Pull-up

جدول 3 – مدهای GPIO در STM32، سری STM32F101/2/3/5/7xx

نکته: پیکربندی مدهای GPIO در سری STM32F101/2/3/5/7xx با مقداردهی به رجیسترهای CR و ODR انجام می شود. CNF و MODE بیت های رجیسترهای CR هستند و بیت های ODR نیز خود رجیستر ODR را شکل می دهند. در این سری، بیت های MODE تعیین کنندۀ سرعت خروجی هستند. در سری های دیگر، هر یک از بیت های MODER و OTYPER و OSPEEDR و PUPDR، رجیستر جداگانه ای دارند. همچنین در سری STM32F101/2/3/5/7xx رجیستر ODR تعیین کنندۀ وجود یا عدم وجود مقاومت های پول آپ و پول دون است. اما در سری های دیگر، برای مقاومت های پول آپ و پول دون، رجیستر جداگانه یعنی PUPDR وجود دارد.

بلوک-دیاگرام-پایه-stm32f10xxx

تصویر 6 – بلوک دیاگرام GPIO در STM32، سری STM32F101/2/3/5/7xx

پیکربندی GPIO در STM32 در مدهای مختلف

در هر یک از مدهای ورودی، خروجی، AF و آنالوگ، بخش هایی از واحد GPIO، فعال و بخش هایی دیگر غیر فعال است. این بخش ها شامل بافر خروجی، ورودی اشمیت تریگر و مقاومت های پول آپ و پول دون هستند. وقتی یک پایه در یکی از مدهای ورودی است:

  • بافر خروجی غیر فعال است.
  • ورودی اشمیت تریگر فعال است.
  • مقاومت های پول آپ و پول دون بسته به مقدار رجیستر مربوط فعال یا غیر فعال هستند. (در STM32F101/2/3/5/7xx، رجیستر ODR و در باقی سری ها، رجیستر PUPDR)
  • با هر سیکل کلاک AHB (یا APB2در سری STM32F101/2/3/5/7xx)، از وضعیت روی پایۀ ورودی، یک نمونه گرفته و در رجیستر IDR ذخیره می شود.
  • با خواندن رجیستر IDR، وضعیت قرار گرفته روی پایۀ ورودی خوانده می شود.

پیکربندی-مد-ورودی-stm32

تصویر 7 – پیکربندی GPIO در مد Input

وقتی یک پایه در یکی از مدهای خروجی است:

  • بافر خروجی فعال است و الف) در مد Open-drain، مقدار صفر در ODR ترانزیستور N-MOS را فعال و مقدار یک در آن، پایه را امپدانس بالا می کند. در این حالت ترانزیستور P-MOS فعال نمی شود. ب) در مد پوش پول، مقدار صفر در ODR ترانزیستور N-MOS را فعال و مقدار یک در آن، ترانزیستور P-MOS را فعال می کند.
  • ورودی اشمیت تریگر فعال است.
  • مقاومت های پول آپ و پول دون بسته به مقدار PUPDR، فعال یا غیر فعال هستند. در سری STM32F101/2/3/5/7xx این مقاومت ها غیر فعال هستند.
  • با هر سیکل کلاک AHB (یا APB2 در سری STM32F101/2/3/5/7xx)، از مقدار روی پایۀ خروجی، یک نمونه گرفته و در IDR ذخیره می شود.
  • با خواندن IDR، وضعیت پایه خوانده می شود. در سری STM32F101/2/3/5/7xx، با خواندن IDRدر مد Open-drain، وضعیت روی پایه خوانده می شود.
  • با خواندن ODR، آخرین مقدار نوشته شده، خوانده می شود. در سری STM32F101/2/3/5/7xx، با خواندن ODRدر مد پوش پول، آخرین مقدار نوشته شده، خوانده می شود.

پیکربندی-مد-خروجی-stm32

تصویر 8 – پیکربندی GPIO در مد Output

پیکربندی GPIO در STM32 در مدهای AF و آنالوگ

هنگامی که یک پایه در مد AF است:

  • بافر خروجی می تواند در مدهای Open-drain یا پوش پول پیکربندی شود.
  • بافر خروجی با سیگنالی که از سمت واحد داخلی می آید، راه اندازی می شود.
  • ورودی اشمیت تریگر فعال است.
  • مقاومت های پول آپ و پول دون بسته به مقدار PUPDR، فعال یا غیر فعال هستند. در سری STM32F101/2/3/5/7xx مقاومت های پول آپ و پول دون غیر فعال هستند.
  • با هر سیکل کلاک AHB (یا APB2 در سری STM32F101/2/3/5/7xx)، از وضعیت روی پایه، یک نمونه گرفته و در IDR ذخیره می شود.
  • با خواندن رجیستر IDR، وضعیت روی پایه خوانده می شود. در سری STM32F101/2/3/5/7xx، با خواندن IDRدر مد Open-drain، وضعیت روی پایه خوانده می شود.
  • در سری STM32F101/2/3/5/7xx، با خواندن ODRدر مد پوش پول، آخرین مقدار نوشته شده، خوانده می شود.

پیکربندی-مد-alternate-function-stm32

تصویر 9 – پیکربندی GPIO در مد Alternate function

نکته: هنگامی که پایه برای یک عملکرد LCD تنظیم شود، پیکربندی AF اینگونه که توضیح داده شد، برای آن اعمال نمی شود. بلکه پیکربندی آن مطابق پیکربندی مد آنالوگ اعمال می شود. این موضوع برای سری STM32WB55/35xx که یک واحد داخلی برای راه اندازی نمایشگر LCD نوع TFT دارد، صادق است.

زمانی که یک پایه در مد آنالوگ است:

  • بافر خروجی غیر فعال است.
  • ورودی اشمیت تریگر غیر فعال است و مصرف صفر را برای هر مقدار آنالوگ روی پایه تأمین می کند. خروجی اشمیت تریگر در سطح صفر نگه داشته می شود.
  • مقاومت های پول آپ و پول دون غیر فعال هستند.
  • با خواندن رجیستر IDR، مقدار صفر خوانده می شود.

نکته: در پیکربندی آنالوگ، پایه قابلیت p5-Volt tolerantرا ندارد.

پیکربندی-مد-آنالوگ-stm32

تصویر 10 – پیکربندی GPIO در مد Analog

مشخصات الکتریکی و زمانی GPIO در STM32

مشخصات الکتریکی GPIO در STM32 برای میکروکنترلرهای مختلف در دیتاشیت آن میکروکنترلر آمده است. بررسی دیتاشیت همۀ میکروکنترلرهای سری های مورد بحث، امکان پذیر نیست. بنابراین تنها به مشخصات GPIO میکروکنترلرهای STM32F103xC/D/E می پردازیم. حداکثر مقدار مطلق برای ولتاژ اعمالی به یک پایۀ ورودی، جریان های Sink و Source و همچنین مقدار جریان Injection پایه ها به صورت جدول زیر است. جریان Injection زمانی به وجود می آید که ولتاژ اعمال شده به پایه، از VSS کمتر یا از VDD بیشتر باشد.

Unit Max Min Ratings Symbol
V VDD+0.4 VSS-0.3 Input voltage on five volt tolerant pin VIN
4 VSS-0.3 Input voltage on any other pin
mA 25 Output current sunk by any I/O and control pin II/O
-25 Output current source by any I/Os and control pin
-5/+0 Injected current on five volt tolerant pins IINJ(PIN)
±5 Injected current on any other pin
±25 Total injected current (sum of all I/O and control pins) ITINJ(PIN)

جدول 4 – مقادیر مطلق ولتاژ ورودی و جریان پایه های GPIO در STM32

پایه-io-جریان-sink-source

تصویر 11 – پایۀ GPIO در STM32 و جریان های Sink و Source و Injection و ولتاژ ورودی

مشخصات الکتریکی ورودی/خروجی

در جدول زیر مشخصات عمومی پایه های GPIO در شرایط عملیاتی (Operation condition) آمده است. توجه شود که FT به معنای p5-Volt tolerant است. همچنین اگر جریان Injection منفی در پایه های مجاور وجود داشته باشد، جریان نشتی (Ilkg) ممکن است از مقدار ماکزیمم نوشته شده برای آن بیشتر شود. جریان Injection منفی زمانی به وجود می آید که VIN کمتر از VSS باشد.

Unit Max Typ Min Conditions Parameter Symbol
V 0.28*(VDD-2)+0.8 -0.3 Standard I/O input low level voltage VIL
V 0.32*(VDD-2)+0.75 -0.3 I/O FT input low level voltage
V VDD+0.3 0.41*(VDD-2 V)+1.3 V Standard I/O input high level voltage VIH
V 5.5 0.42*(VDD-2 V)+1 V VDD > 2 V I/O FT input high level voltage
V 5.2 VDD ≤ 2 V
mA ±3 Sink or source current of PC13, PC14, PC15 II/O
mA ±8 Sink or source current of any other pins
mA ±20 Relaxd VOL/VOH Sink or source current of any other pins
mV 200 Standard I/O Schmitt trigger voltage hysteresis Vhys
mV 5% VDD I/O FT Schmitt trigger voltage hysteresis
uA ±1 VSS ≤ VIN ≤ VDD Standard I/Os Input leakage current Ilkg
3 VIN=5V I/O FT
kΩ 50 40 30 VIN=VSS Weak pull-up equivalent resistor RPU
kΩ 50 40 30 VIN=VDD Weak pull-down equivalent resistor RPD
pF 5 I/O pin capacitance CI/O

جدول 5 – مشخصات الکتریکی پایه های GPIO در STM32

جریان مصرفی پورت های GPIO بر حسب فرکانس نیز به صورت زیر است.

Unit Current consumption Peripheral
uA/MHz 8,47 GPIOA APB2 (up to 72 MHz)
8,47 GPIOB
6,53 GPIOC
8,47 GPIOD
6,53 GPIOE
6,53 GPIOF
6,11 GPIOG

جدول 6 – جریان مصرفی پورت های I/O در STM32

مشخصات-الکتریکی-ورودی-io

تصویر 12 – مشخصات الکتریکی ورودی پایه های ورودی/خروجی استاندارد

مشخصات زمانی GPIO در STM32

مشخصات AC پایه های GPIO به صورت جدول زیر است. توجه شود که در STM32F103xC/D/E، بیت های MODE1 و MODE0، حداکثر سرعت پایه را مشخص می کنند.

Unit Max Min Conditions Parameter Symbol MODE [1:0]
MHz 2 CL = 50 pF, VDD = 2 V to 3.6 V Maximum frequency fmax(I/O)out 10
ns 125 Output high to low level fall time tf(I/O)out
ns 125 Output low to high level rise time tr(I/O)out
MHz 10 CL = 50 pF, VDD = 2 V to 3.6 V Maximum frequency fmax(I/O)out 1
ns 25 Output high to low level fall time tf(I/O)out
ns 25 Output low to high level rise time tr(I/O)out
MHz 50 CL = 30 pF, VDD = 2.7 V to 3.6 V Maximum frequency fmax(I/O)out 11
MHz 30 CL = 50 pF, VDD = 2.7 V to 3.6 V
MHz 20 CL = 50 pF, VDD = 2 V to 2.7 V
ns 5 CL = 30 pF, VDD = 2.7 V to 3.6 V Output high to low level fall time tf(I/O)out
ns 8 CL = 50 pF, VDD = 2.7 V to 3.6 V
ns 12 CL = 50 pF, VDD = 2 V to 2.7 V
ns 5 CL = 30 pF, VDD = 2.7 V to 3.6 V Output low to high level rise time tr(I/O)out
ns 8 CL = 50 pF, VDD = 2.7 V to 3.6 V
ns 12 CL = 50 pF, VDD = 2 V to 2.7 V
ns 10 Pulse width of external signals detected by the EXTI controller tEXTIpw

جدول 7 – مشخصات AC پایه های GPIO در STM32

مشخصات-خروجی-بار-خازنی

تصویر 13 – سیگنال پایۀ GPIO در STM32 در مدهای خروجی روی بار خازنی

نکات GPIO در STM32

در این بخش به ذکر نکاتی مهم می پردازیم:

  • این امکان وجود دارد که رجیسترهای مربوط به پیکربندی پایه ها را قفل کنیم. این کار با رجیستر LCKR انجام می شود. با فعال کردن بیت های این رجیستر، بیت های مرتبط با پایۀ مورد نظر در جیسترهای MODER و OTYPER و OSPEEDR و PUPDR و AFRL و AFRH فریز می شوند. در سری STM32F101/2/3/5/7xx بیت های مرتبط، در رجیسترهای CRL و CRH فریز می شوند. بیت های فریز شدۀ این رجیسترها تا ریست بعدی میکروکنترلر یا GPIO، قابل تغییر نخواهند بود.
  • در سری STM32F101/2/3/5/7xx حداکثر سرعت خروجی را 2 یا 10 یا 50 مگاهرتز تعیین می کنیم. در سری های دیگر این ارقام وجود ندارد و به جای آنها از عباراتی مانند Low Speed و Medium Speed و High Speed و … استفاده می شود. در جدول مشخصات AC در دیتاشیت، به ازای ولتاژهای VDD مختلف و شرایط دیگر، مقادیر مختلفی برای سرعت پایۀ خروجی آورده شده است.
  • در برخی سری ها یک بخش به اسم I/O Compensation Cell (سلول جبران I/O) وجود دارد. کاربرد آن، کاهش Slew rate سیگنال روی پایۀ خروجی و درنتیجه کاهش اثر نویز روی تغذیه است. این سلول باید در سرعت های مشخص پایه های GPIO به ازای ولتاژهای مشخص فعال شود. سری های STM32F205/07/15/17xx و STM32F405/07/15/17xx و STM32F42/43xxx و STM32F75/74xxx و STM32H742/43/53xx و STM32H750xB و STM32MP157 دارای این سلول هستند.
  • در صورت خاموش بودن اسیلاتورهای LSE و HSE، می توان پایه های مربوط به اتصال کریستال آنها را به عنوان GPIO استفاده کرد.

اسیلاتور-lse-hse

تصویر 14 – اسیلاتورهای LSE و HSE غیر فعال و پایه های کریستال آنها به عنوان GPIO

نکات مربوط به Alternate function

وقتی یک پایۀ GPIO در STM32 در مد AF پیکربندی می شود، توسط یک مالتی پلکسر، به واحدهای داخلی متصل می شود. مالتی پلکسر مذکور می تواند  پایۀ GPIO را در 16 حالت به واحدهای داخلی مختلف وصل کند. مالتی پلکسر اجازه می دهد که هر پایه در یک زمان، تنها به یک واحد داخلی وصل باشد. رجیسترهای AFRH و AFRL تعیین می کنند که مالتی پلکسر، پایۀ GPIO را به کدام واحد داخلی متصل کند. در سری STM32F101/2/3/5/7xx مالتی پلکسر وجود ندارد و هر پایه می تواند به تعداد محدودی واحد داخلی متصل شود. در STM32F101/2/3/5/7xx، این عملکرد با Remap کردن امکان پذیر است و توسط رجیسترهای AFIO انجام می شود. در تصویر زیر شمایی از مالتی پلکسر نامبرده را برای سری STM32F205/07/15/17xx می بینیم.

مالتی-پلکسر-alernate-function-afio

تصویر 15 – انتخاب کنندۀ عملکردهای دیگر (Alternate function) پایه های GPIO در STM32F205/07/15/17xx

در دیتاشیت میکروکنترلرهای STM32 (به جز سری STM32F101/2/3/5/7xx) جداولی با عنوان Alternate function mapping وجود دارد. در این جداول عملکرد هر پایه از AF0 تا AF15 لیست شده است. جدول زیر لیست عملکردهای صفرم تا چهارم پایه های PA0 تا PA3 را نشان می دهد.

AF4 AF3 AF2 AF1 AF0 Port
I2C1/I2C2/I2C3 TIM8/9/10/11 TIM3/4/5 TIM1/2 SYS
TIM8 ETR TIM 5 CH1 TIM2 CH1 ETR PA0-WKUP
TIM5 CH2 TIM2 CH2 PA1
TIM9 CH1 TIM5 CH3 TIM2 CH3 PA2
TIM9 CH2 TIM5 CH4 TIM2 CH4 PA3

جدول 8 – عملکردهای صفرم تا چهارم پایه های PA0 تا PA3

نکته: عملکردهای آنالوگ مربوط به واحدهای ADC و DAC و …، در مدهای Alternate function قرار نگرفته اند و توسط بیت های رجیستر MODER انتخاب می شوند.

نکته: برای پروگرام کردن STM32 با روش های JTAG و SWD، پایه های مربوط به این دو ارتباط باید در مد AF و در حالت System یعنی AF0 قرار گیرند. در سری STM32F101/2/3/5/7xx، باید بیت های SWJ CFG در رجیستر MAPR مقداردهی شوند.

پایه-jtag-swd-stm32f103ve

تصویر 16 – پایه های مربوط به JTAG و SWD در میکروکنترلر STM32F103VE

رجیسترهای GPIO در STM32

در این بخش به رجیسترهای واحد GPIO و همچنین رجیسترهای دیگر مربوط به راه اندازی GPIO در STM32 می پردازیم. سری STM32MP157 چند رجیستر اضافی و همچنین سری STM32F101/2/3/5/7xx دو رجیستر متفاوت دارد که در ادامه به صورت جداگانه بررسی خواهند شد.

رجیستر MODER: بیت های این رجیستر مد پایه را تعیین می کنند:

MODEy[1:0] = (y=0..15)

  • p00: Input
  • p01: General purpose output
  • p10: Alternate function
  • p11: Analog

مد پیش فرض در سری های STM32L4+ و STM32H742/43/53xx و STM32H750xB و STM32WB55/35xx و STM32MP157 و STM32G0x1، آنالوگ است. در باقی سری ها مد پیش فرض Input است.

نکته: مقدار پیش فرض رجیستر MODER در سری های مختلف متفاوت است. در برخی سری ها مقادیر پیش فرض برای پورت های مختلف هم تفاوت دارد. برای مطالعۀ دقیق تر رجیسترها به Reference Manual میکروکنترلر مراجعه نمایید.

رجیستر OTYPER: بیت های این رجیستر نوع خروجی را تعیین می کند. اگر بیت OTy صفر باشد، خروجی پوش پول است. اگر یک باشد، خروجی Open-drain است. نوع پیش فرض برای همۀ سری ها، پوش پول است.

رجیستر-moder-otyper

تصویر 17 – رجیسترهای MODER و OTYPER

رجیستر OSPEEDR: این رجیستر سرعت پایه های خروجی را تعیین می کند. در سری های مختلف عبارات مختلفی برای سرعت پایه های خروجی تعریف شده است. برای کسب اطلاعات دقیق دربارۀ سرعت پایه های خروجی در شرایط مختلف، به Reference Manual و دیتاشیت مراجعه نمایید. عبارات بیان کنندۀ سرعت پایه های خروجی در سری های مختلف به صورت زیر است:

OSPEEDRy[1:0] = (y=0..15)

  • p00: Very low/Low speed
  • p01: Low/Medium speed
  • p10: Low/Fast/High speed
  • p11: High/Very high speed

رجیستر PUPDR: این رجیستر تعیین کنندۀ وجود یا عدم وجود مقاومت پول آپ یا پول دون GPIO در STM32 به صورت زیر است:

PUPDRy[1:0] = (y=0..15)

  • p00: No pull-up, no pull-down
  • p01: Pull-up
  • p10: Pull-down
  • p11: Reserved

نکته: مقدار پیش فرض PUPDR برای پورت های مختلف در سری های مختلف، متفاوت است.

رجیستر-ospeedr-pupdr

تصویر 18 – رجیسترهای OSPEEDR و PUPDR

رجیسترهای دادۀ ورودی/خروجی و BSRR و BRR

رجیسترهای دادۀ ورودی و خروجی GPIO در STM32، رجیسترهای IDR و ODR هستند. در مدهای Input و Output و AF، مقدار قرار گرفته روی پایه ها در رجیستر فقط خواندنی IDR ذخیره می شود. در مد آنالوگ، مقدار صفر در این رجیستر ذخیره می شود. در مد خروجی با خواندن رجیستر ODR، آخرین مقدار قرار گرفته روی پایۀ خروجی خوانده می شود. مقدار پیش فرض برای رجیستر IDR در همۀ سری ها نامشخص است. یعنی بیت های IDR پس از ریست، می توانند مقدار صفر یا یک را داشته باشند. مقدار پیش فرض برای بیت های رجیستر ODR نیز صفر است. همچنین در سری STM32WB55/35xx، بیت های ODR مربوط به پایه های PE5 تا PE15 و PH4 تا PH15 و PH2، رزرو هستند. رجیسترهای IDR و ODR در سری STM32F101/2/3/5/7xx نیز وجود دارند.

رجیستر-idr-odr

تصویر 19 – رجیسترهای IDR و ODR

برای مقداردهی بیتی به رجیستر ODR، رجیسترهای دیگری نیز وجود دارد. برای یک کردن بیت های ODR، می توان بیت های 0 تا 15 رجیستر BSRR را یک کرد. بیت های 0 تا 15 بیت های BSy هستند. برای صفر کردن بیت های ODR نیز می توان بیت های 16 تا 31 این رجیستر را یک کرد.بیت های 16 تا 31 بیت های BRy هستند. همچنین در برخی سری ها رجیستر BRR وجود دارد. برای صفر کردن بیت های ODR، می توان بیت های 0 تا 15 این رجیستر را یک کرد. رجیسترهای BSRR و BRR فقط نوشتنی هستند و نوشتن مقدار صفر در آنها بی معنی است. بنابراین برای این که تغییری در بیت های ODR ایجاد کنیم، باید در بیت متناظر در رجیستر صحیح، یک بنویسیم.

نکته: در رجیستر BSRR اگر بیت های BS و BR مربوط به یک پایه همزمان با هم یک شوند، اولویت با بیت BS است. یعنی این بیت عمل می کند و خروجی یک می شود.

رجیستر-bsrr-brr

تصویر 20 – رجیسترهای BSRR و BRR

رجیسترهای تعیین عملکردهای دیگر GPIO در STM32

دو رجیستر برای تعیین عملکرد پایه در مد Alternate function وجود دارد. رجیستر AFRL عملکرد پایه های 0 تا 7 هر پورت را در مد AF انتخاب می کند. رجیستر AFRH نیز برای انتخاب عملکرد پایه های 8 تا 15 هر پورت در مد AF است. هر چهار بیت از این دو رجیستر به یک پایه اختصاص دارد. و مقداردهی به این بیت ها، عملکردهای AF0 تا AF15 را برای هر پایه انتخاب می کند. همان طور که قبلاً توضیح دادیم، در مد AF پایه ها توسط مالتی پلکسر به واحدهای داخلی متصل می شوند. مقدار 0 تا 15 به بیت های AFRLy[3:0] یا AFRHy[3:0]، عملکردهای AF0 تا AF15 را برای پایۀ Pxy میکروکنترلر تنظیم می کند. برای بررسی عملکردهای هر پایۀ GPIO در STM32، به جداول Alternate function mapping در دیتاشیت میکروکنترلر مراجعه نمایید. دقت شود که مقدار پیش فرض بیت های AFRL و AFRH در همۀ سری ها صفر است. همچنین در برخی سری ها، برخی مقادیر رزرو شده هستند. بنابراین بیت های AFRL و AFRH نمی توانند آن مقادیر را به خود بگیرند. به این نکته توجه شود که برای استفاده از مدهای AF، ابتدا رجیسترهای MODER و OTYPER و OSPEEDR و PUPDR مقداردهی شوند و سپس AFRH و AFRL.

AFRLy[3:0] or AFRHy[3:0] = (y=0..15)

  • p0000: AF0
  • p0001: AF1
  • p0010: AF2
  • p…
  • p1111: AF15

رجیستر-afrl-afrh

تصویر 21 – رجیسترهای AFRH و AFRL

رجیستر قفل کردن پیکربندی GPIO در STM32

رجیستر LCKR این امکان را فراهم می کند که بتوان پیکربندی هر پایه را قفل کرد. این کار با فریز کردن بیت های مربوط در رجیسترهای MODER و OTYPER و OSPEEDR و PUPDR، انجام می شود. بیت های فریز شده، تا ریست بعدی میکروکنترلر یا پورت ورودی/خروجی مورد نظر، قابل تغییر نخواهند بود. بیت های 0 تا 15 این رجیستر مربوط به پایه های 0 تا 15 هر پورت هستند. یک کردن این بیت ها باعث فریز شدن پیکربندی پایۀ متناظر در پورت می شود. بیت 16 این رجیستر که LCKK نام دارد، نشان دهندۀ فعال یا غیر فعال بودن قفل پیکربندی است. هرگاه این بیت یک  باشد، قفل پیکربندی فعال و هرگاه صفر باشد، قفل پیکربندی غیر فعال است. تغییر بیت های این رجیستر باید مطابق مراحل خاصی طی شود. این مراحل به ترتیب عبارتند از:

  • ابتدا باید در بیت های 0 تا 15 نوشت و به همراه آن، بیت 16 را یک کرد.
  • سپس باید همان مقدار قبلی را در بیت های 0 تا 15 نوشت و همزمان بیت 16 را صفر کرد.
  • بعد از آن باید همان مقدار قبلی را در بیت های 0 تا 15 نوشت و همزمان بیت 16 را یک کرد.
  • در این مرحله باید یک بار رجیستر LCKR خوانده شود.
  • در نهایت باید یک بار دیگر رجیستر LCKR را خواند و از یک شدن بیت 16 اطمینان حاصل کرد.

دقت شود که حین نوشتن در رجیستر LCKR، مقدار بیت های 0 تا 15 نباید تغییر کند. همچنین باید توجه داشت که نوشتن در این رجیستر تنها به صورت 32 بیتی مجاز است. هر خطایی حین نوشتن در این رجیستر، باعث بی نتیجه شدن عملیات قفل کردن می شود.

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

رجیستر-lckr

تصویر 22 – رجیستر LCKR

رجیسترهای GPIO در STM32 سری STM32F101/2/3/5/7xx

در سری STM32F101/2/3/5/7xx تنها رجیسترهای IDR و ODR و BSRR و BRR و LCKR همانند سری های قبل است. در این سری برای پیکربندی مدهای GPIO، از دو رجیستر CRL و CRH استفاده می شود. رجیستر CRL شامل بیت های CNF و MODE مربوط به پایه های 0 تا 7 هر پورت است. رجیستر CRH نیز شامل همان بیت ها برای پایه های 8 تا 15 پورت است. مقدار پیش فرض برای این دو رجیستر p0x44444444 است. بنابراین مد پیش فرض هر پایه Floating input است. در صورتی که بیت های MODE[1:0] برابر 00 باشند، بیت های CNF به صورت زیر هستند:

CNFy[1:0] = (y=0..7 in CRL, y=8..15 in CRH)

  • p00: Analog mode
  • p01: Floating input
  • p10: Input with pull-up/pull-down
  • p11: Reserved

در صورتی که بیت های MODE[1:0] برابر 01 یا 10 یا 11 باشند، بیت های CNF به شکل زیر هستند:

CNFy[1:0] = (y=0..7 in CRL, y=8..15 in CRH)

  • p00: General purpose output push-pull
  • p01: General purpose output Open-drain
  • p10: Alternate function output Push-pull
  • p11: Alternate function output Open-drain

بیت های MODE نیز خود به صورت زیر، تعیین کنندۀ مد یا سرعت پایۀ خروجی هستند:

MODEy[1:0] = (y=0..7 in CRL, y=8..15 in CRH)

  • p00: Input mode
  • p01: Output mode, max speed 10 MHz
  • p10: Output mode, max speed 2 MHz
  • p11: Output mode, max speed 50 MHz

رجیستر-crl-crh

تصویر 23 – رجیسترهای CRH و CRL

رجیسترهای AFIO در STM32F101/2/3/5/7xx

در سری STM32F101/2/3/5/7xx در مد Alternate function امکان اتصال پایه ها به تعداد محدودی واحد داخلی امکان پذیر است. این کار با رجیسترهای AFIO با عملکرد Remap انجام می شود. برخی واحدهای داخلی برای عملکردهای خود می توانند چند پایه از GPIO را به کار بگیرند. مثلاً در سری STM32F101/2/3/5/7xx، پایه های SCL و SDA واحد I2C1، به طور پیش فرض روی PB6 و PB7 هستند. این پایه ها با Remap کردن می توانند به پایه های PB8 و PB9 منتقل شوند. Remap در واقع به معنی جابه جا کردن عملکرد ورودی/خروجی یک واحد داخلی از پایه ای به پایۀ دیگر است. در سری های قبل که بررسی کردیم، عملیاتی مشابه Remap با کارکرد مجموع مالتی پلکسرهای پایه ها تحقق می یافت. در سری STM32F101/2/3/5/7xx مالتی پلکسری وجود ندارد و تنها چند رجیستر برای Remap کردن وجود دارد. رجیستر MAPR برای Remap پایه های بسیاری از واحدهای داخلی است. همان طور که در تصویر زیر می بینید، بیت 1 مربوط به I2C1 است. در صورتی که آن را صفر کنیم، SCL و SDA روی PB6 و PB7 هستند. در غیر این صورت SCL و SDA روی PB8 و PB9 هستند. بیت های دیگر نیز برای واحدهای داخلی دیگر به کار می روند. بیت های 24 تا 26 نیز که قبلاً توضیح دادیم، برای فعال و غیر فعال کردن JTAG و SWD هستند. برای مطالعۀ رجیسترهای AFIO و مشاهدۀ جداول مربوط به Remap واحدهای داخلی، به Reference Manual، بخش AFIO مراجعه نمایید. در ادامه به رجیسترهای دیگر مربوط به GPIO در STM32 می پردازیم.

رجیستر-mapr

تصویر 24 – رجیستر MAPR

رجیسترهای مربوط به GPIO در STM32

پیش از راه اندازی GPIO در STM32 لازم است ابتدا در واحد RCC، رجیسترهایی را مقداردهی کنیم. در برخی سری ها GPIO روی باس AHB1 است. در برخی دیگر GPIO روی باس AHB4، در برخی روی APB2 و … است. ابتدا باید بدانیم که GPIO روی کدام باس قرار گرفته است. برای این کار باید به بخش Memory and bus architecture یا System and memory overview در Reference manual مراجعه کنیم. دو رجیستر RSTR و ENR به ترتیب برای ریست و فعال سازی کلاک واحدهای داخلی از جمله GPIO هستند. نام این رجیسترها با توجه به باس مورد نظر، معمولاً AHBxRSTR و AHBxENR یا APBxRSTR و APBxENR است. برای مثال در سری STM32F101/2/3/5/7xx، واحد GPIO روی APB2 است. در واحد RCC دو رجیستر APB2RSTR و APB2ENR وجود دارد. در APB2RSTR بیت هایی برای ریست و در APB2ENR بیت هایی برای فعال سازی کلاک پورت های ورودی/خروجی وجود دارد. در تصویر زیر این رجیسترها آورده شده اند. برای مطالعۀ رجیسترهای RCC مربوط به GPIO، به Reference manual مراجعه فرمایید.

نکته: نام رجیسترهای RCC مربوط به GPIO در برخی سری ها متفاوت است. مثلاً در سری STM32G0x1، نام این رجیسترها IOPRSTR و IOPENR است.

نکته: در سری STM32MP157 برای هر یک از عملکردهای ریست و فعال سازی GPIO یا واحدهای داخلی دیگر، دو رجیستر وجود دارد. یک رجیستر برای Set کردن و یک رجیستر برای Clear کردن.

نکته: پیش از تغییر بیت های رجیسترهای AFIO در STM32F101/2/3/5/7xx، باید بیت صفرم رجیستر APB2ENR را یک کرده باشیم.

نکته: در برخی سری ها رجیسترهای دیگری مربوط به GPIO وجود دارد. در سری هایی که I/O Compensation Cell دارند، در بخش SYSCFG رجیسترهایی برای فعال سازی و کنترل آن وجود دارد. همچنین سری STM32MP157 تعدادی رجیستر دیگر در بخش GPIO دارد که بررسی آنها فراتر از موضوع این نوشته است.

رجیستر-apb2rstr-apb2enr

تصویر 25 – رجیسترهای APB2RSTR و APB2ENR

نتایج GPIO در STM32

  1. مفهوم GPIO در میکروکنترلرهای STM32، ورودی/خروجی ها با عملکرد پورت و عملکردهای مربوط به واحدهای داخلی دیگر است. مفهوم AFIO در STM32 نیز در میکروکنترلرهای STM32F101/2/3/5/7xx به معنی عملکردهای واحدهای داخلی روی پایه های ورودی/خروجی است. در STM32 واحد GPIO شامل پایه های I/O به همراه تمامی عملکردهای آنهاست. در سری STM32F101/2/3/5/7xx این واحد GPIO and AFIO نام دارد.
  2. بلوک دیاگرام GPIO در میکروکنترلرهای STM32 شامل بخش های اصلی دیودهای محافظ، مقاومت های پول آپ و پول دون، درایور ورودی و درایور خروجی است.
  3. مدهای GPIO در میکروکنترلرهای STM32 حاصل فعال یا غیر فعال بودن مقاومت های پول آپ و پول دون، نوع خروجی پوش پول یا Open-drain، فعال یا غیر فعال بودن ورودی/خروجی آنالوگ و استفاده یا عدم استفاده از عملکردهای دیگر (Alternate function) است.
  4. در پیکربندی مد Output در STM32، بافر خروجی (با آرایش پوش پول یا Open-drain) و ورودی اشمیت تریگر فعال هستند. در سری های به غیر از STM32F101/2/3/5/7xx مقاومت های پول آپ یا پول دون نیز می توانند فعال شوند.
  5. در پیکربندی مد Input در STM32، بافر خروجی غیر فعال است. همچنین ورودی اشمیت تریگر فعال است و مقاومت های پول آپ یا پول دون می توانند فعال شوند.
  6. در پیکربندی مد Alternate function در STM32، بافر خروجی (با آرایش پوش پول یا Open-drain) و ورودی اشمیت تریگر فعال هستند. همچنین مقاومت های پول آپ یا پول دون در سری های غیر از STM32F101/2/3/5/7xx، می توانند فعال شوند.
  7. در پیکربندی مد Analog در STM32، بافر خروجی و ورودی اشمیت تریگر و مقاومت های پول آپ و پول دون غیر فعال هستند. همچنین خروجی اشمیت تریگر در سطح صفر نگه داشته می شود.
  8. برای بررسی مشخصات الکتریکی و زمانی GPIO و پایه های هر پورت می توان به دیتاشیت مراجعه کرد.
  9. قفل GPIO در میکروکنترلرهای STM32، پیکربندی پایه های GPIO را تا ریست بعدی میکروکنترلر یا GPIOفریز می کند. عملیات فریز کردن شامل چند مرحله است که در صورت بروز خطا، بی نتیجه می ماند.
  10. می توان پایه های مربوط به کریستال خارجی اسیلاتورهای HSE و LSE را به عنوان GPIO استفاده کرد.
  11. مالتی پلکسر پایه های GPIO این امکان را فراهم می آورد که پایۀ پیکربندی شده در مد AF، بتواند به واحدهای داخلی متعدد وصل شود. پایۀ GPIO در یک زمان تنها می تواند یکی از عملکردهای AF0 تا AF15 را داشته باشد. در سری STM32F101/2/3/5/7xx مالتی پلکسر وجود ندارد.
  12. عملکردهای آنالوگ پایه های GPIO جدا از مدهای AF هستند.
  13. رجیسترهای MODER و OTYPER و OSPEEDR و PUPDR برای پیکربندی پایه های GPIO استفاده می شود. در سری STM32F101/2/3/5/7xx پیکربندی توسط رجیسترهای CRL و CRH و ODR انجام می شود.
  14. علاوه بر نوشتن مستقیم روی رجیستر ODR، می توان با رجیسترهای BSRR و BRR نیز روی آن نوشت.
  15. رجیسترهای AFRL و AFRH برای تعیین عملکردهای AF0 تا AF15 پایه ها است.
  16. در سری STM32F101/2/3/5/7xxاختصاص پایه ها به واحدهای داخلی به صورت محدود و با استفاده از Remap کردن است. Remap کردن در این سری توسط رجیسترهای AFIO انجام می شود. برای تغییر رجیسترهای AFIO باید ابتدا بیت صفرم رجیستر APB2ENR را یک کنیم.
  17. دو رجیستر مهم از واحد RCC برای راه اندازی و کار با GPIO وجود دارد. این دو رجیستر، رجیسترهای مربوط به ریست و فعال کردن کلاک پورت های I/O هستند.

نوشته های مرتبط در وبلاگ یوبرد:

آموزش های یوبرد مرتبط با این نوشته:

رضا اسدی

رضا اسدی

مدیر یوبرد، خالق و توسعه دهندۀ پلتفرم یوبرد، مجری پروژه های الکترونیکی، فعال در صنعت آسانسور، سابقه فعالیت در صنعت خودرو و همکاری در صنعت پزشکی و صنایع دیگر، آموزگار آموزش های یوبرد

سفارش پروژه میکروکنترلر یوبرد

زیرساخت مطمئن صنعت

جدیدترین تاپیک های STM32

میکروکنترلر ARM

میکروکنترلر ARM چیست؟ پردازندۀ ARM

میکروکنترلر ARM ، میکروکنترلرهایی هستند که پردازندۀ آنها ساخت شرکت ARM است. شرکت ARM سازندۀ میکروکنترلر نیست. سازندۀ پردازنده (CPU) است. امروزه به میکروکنترلرهایی که پردازندۀ آنها طراحی شدۀ شرکت ARM باشد، میکروکنترلر ARM گفته می شود.

راه-اندازی-dac-stm32

راه اندازی DAC در STM32

راه اندازی DAC در STM32، ویژگی های DAC در میکروکنترلرهای STM32F1، بلوک دیاگرام DAC در STM32، اتصالات راه اندازی DAC در میکروکنترلر STM32F107VC، نمونه کد رجیستری راه اندازی واحد DAC در میکروکنترلرهای STM32F1، ساخت موج سینوسی با STM32، راه اندازی مبدل دیجیتال به آنالوگ STM32 با توابع HAL

راه-اندازی-usart-stm32

راه اندازی UART در STM32، رجیستری و HAL

راه اندازی UART در STM32، اتصالات و نرم افزار مورد نیاز، نمونه کد USART در STM32 به صورت رجیستری، نمونه کد رجیستری USART با وقفۀ دریافت، نمونه کد HAL برای راه اندازی USART در STM32، نمونه کد HAL با وقفۀ دریافت، نحوه محاسبه Baud rate در USART میکروکنترلرهای STM32F1

برنامه-نویسی-میکروکنترلر-ویژوال-استودیو

برنامه نویسی میکروکنترلرها با ویژوال استودیو

نصب VisualGDB روی ویژوال استودیو، ساخت پروژه برای برنامه نویسی میکروکنترلرها با ویژوال استودیو، ساخت پروژه برای STM32 در ویژوال استودیو، کدنویسی STM32 در ویژوال استودیو، ساخت پروژه برای AVR در ویژوال استودیو، ساخت پروژه برای LPC در ویژوال استودیو، ساخت پروژۀ آردوینو در ویژوال استودیو

24 دیدگاه ها

  1. سلام استاد اسدی من متن رو کامل خوندم و خواستم تشکر کنم و سوال داشتم خدمتتون.
    امکان داره برای هرکدوم از مدهای عملکرد GPIO در میکروکنترلرهای STM32 ، کاربردشون رو بفرمایید؟
    همچنین توضیح مد عملکرد ALTERNATE FUNCTION OPEN DRAIN رو توی متن ندیدم.
    رجیسترهایی که در متن توضیح دادید مربوط به کدام واحد میکروکنترلر هستند؟ واحد GPIO ؟ کلا این واحد همین میکروکنترلرها را دارد؟

    پاسخ
    • سلام. خواهش میکنم. مواردی که فرمودید به متن اضافه شد.

      پاسخ
  2. سلام. عرض شود که توی میکروکنترلرهای AVR ما وقتی میخواستیم از یک پایه به عنوان ورودی آنالوگ استفاده کنیم اون رو روی حالت ورودی Float قرار میدادیم. اما الان توی STM32 یک حالت مجزا به عنوان Analog داریم و از این حالت استفاده می کنیم. حالا سوال اینه که از ورودی Float توی STM32 چه جاهایی استفاده می کنیم و چه کاربردهایی داره؟

    پاسخ
    • سلام. حالت Float برای قابلیت هایی مثل i2c استفاده میشه.

      پاسخ
  3. سلام آقای اسدی. آموزش های شما لایق تقدیر هستن.

    پاسخ
    • سلام دوست عزیز. خیلی سپاسگذارم از لطفی که به بنده دارید.

      پاسخ
  4. رجیستر GPIOx_BSRR چی هست ؟
    و اگه امکانش هست LCKR را بیشتر توضیح دهید . چرا 17 بیت دارد ؟

    پاسخ
    • رجیستر GPIOx_BSRR برای صفر و یک کردن پایه ها استفاده میشه. از اسمش هم پیداس که مخفف Bit Set Reset Register هست.

      رجیستر GPIOx_LCKR هم که مخفف Lock Configuration Register هست، این رجیستر برای قفل کردن مقدار داخل رجیسترهای CRL و CRH استفاده میشه. که این کار با ترکیب بیت هفدهم (LCKK) و همچنین 16 بیت اول (LCK) انجام میشه. هر کدوم از پایه ها رو که قرار باشه قفل کنیم، باید بیت مربوطۀ اون رو توی 16 بیت اول، یک کنیم و بعد بیت هفدهم رو یک کنیم. البته برای این که بیت هفدهم (LCKK) رو یک کنیم، این که همینطوری بنویسیم یک، این بیت یک نمیشه. برای یک کردن این بیت یک پروسه هست به این صورت که یه بار اونو یک می کنیم، بعد صفر می کنیم، دوباره یک می کنیم، حالا یه بار می خونیمش باید از اون بخونیم صفر، یه بار دیگه میخونیمش و باید از اون بخونیم یک. اگر این پروسه رو انجام دادیم و در بار دوم از این رجیستر، یک رو خوندیم، یعنی که این بیت به درستی یک شده.

      پاسخ
  5. با سلام
    خدمت ادمین گرامی با ارزوی توفیق و سلامتی
    من می خواهم بدانم در ایران بیشتر چه میکروکنترلری از چه شرکتی سازنده ای فروش دارد.با دانستن این موضوع پروزه های که تعریف می کنم میدانم دنبال کدام بروم.
    و سنسورهای پردازش تصویر کدام شزکت خارجی در ایران راحتتر پیدا می شود. قیمت مناسب دارد.
    باسپاس

    پاسخ
    • سلام. خیلی ممنون. زنده باشید. میکروکنترلرهای شرکت ST و DSPهای شرکت TI استفاده میشه. الان دیگه توی ایران خیلی از قطعات الکترونیکی سخت پیدا میشه. هر زمان یک قطعه هست و یک قطعه نیست. توی خرید قطعه پیشنهاد میکنم به کیفیت و مرجعی که از اون تهیه می کنید بیشتر از قیمت توجه کنید. همچنین به نظرم اصلا بازارتون رو محدود نکنید به ایران. وارد کردن قطعه از خارج از کشور مثل گذشته سخت نیست.

      پاسخ
  6. سلام استاد. وقتتون بخیر. میشه برای استفاده از رجیستر LCKR به صورت اصولی یه چند خط کد همینجا بذارید؟ چون توضیح دادید به آقای کریمی من متوجه نشدم. ممنون.

    پاسخ
    • سلام. وقت بخیر. توی دیتاشیت توضیح جامع داده شده. پاسخ به سوالتون گستردس و پاسخ به اون توی نظرات نمی گنجه. چون فرمودید روش اصولی.

      پاسخ
  7. سلام
    عرض ادب
    ممنون از آموزش های خوبتون
    یک سوال داشتم . ممنون میشم اگه راهنماییم کنید.
    در حین ریست تا لحظه کوتاهی بعد از آن، تمامی پایه‌های GPIO يک ميکروکنترلر به چه صورت میشه ؟

    پاسخ
    • سلام. خیلی ممنون از لطفتون. حالت و مد یک پایه از GPIO برای میکروکنترلرهای مختلف ممکنه متفاوت باشه. مثلاً برای میکروکنترلرهای AVR بعد از ریست، پایه ها ورودی Tri-state هستند. برای میکروکنترلرهای STM32 که توی این نوشته درباره شون صحبت شد، بعد از ریست با توجه به این که مقدار بیت CNFx0 اون پایه مقدارش 1 هستش، توی مد Input floating قرار میگیره. تا لحظه ای که مقدار بیت های مربوط به پایۀ مورد نظر توی رجیسترهاش تغییر نکنه، توی همین حالت باقی میمونه. برای اطلاعات بیشتر دیتاشیت میکروکنترلر مورد نظر رو مطالعه کنید.

      پاسخ
  8. خدا خیرت بده امید آنکه خدمتی برای بندگان خدا کنیم.

    پاسخ
    • خواهش میکنم. زنده باشید. ان شاءالله

      پاسخ
  9. سلام خسته نباشيد
    استاد سوالي داشتم از خدمتتون ميخواستم بدونم خروجي يك دستكاه فلزياب كه با ميكروكنترلر برنامه نويسي شده چه نوع داده اي هست؟

    پاسخ
    • سلام. به نظرم از میکروکنترلر برای نمایش داده توی LCD (در صورت وجود) یا راه اندازی بازر استفاده بشه. همچنین ممکنه از میکروکنترلر برای ساخت سیگنالی که در نهایت به آنتن فرستنده میره هم استفاده بشه. متاسفانه اطلاعات آنچنانی دربارۀ عملکرد فلزیاب ها تو اینترنت موجود نیست. و اگه افرادی هم باشن که تو این حوزه فعالیت کنن، اطلاعاتشونو منتشر نمیکنن.

      پاسخ
  10. سلام. حفاظت ESD یعنی چی؟ ممنون

    پاسخ
    • سلام. ESD مخفف Electrostatic discharge و به معنی تخلیۀ الکتریسیتۀ ساکنه. با توجه به این که تخلیۀ الکتریسیتۀ ساکن میتونه به مدارات داخلی ICها و همچنین مدارات حساس دیگه آسیب برسونه، روش هایی برای تخلیۀ صحیح اون وجود داره که اصطلاحاً بهش محفاظت ESD یا حفاظت از ESD میگن. برای اطلاعات بیشتر به نوشتۀ «دیود TVS» مراجعه کنید. خواهش میکنم.

      پاسخ
  11. سلام خداقوت
    ممنون از اطلاعاتتون
    بعد از ریست میکروکنرلر چه اتفاقی برای پایه های gpio میافته؟

    پاسخ
    • سلام. خیلی ممنون. زنده باشید. پایه های GPIO توی مد پیش فرض قرار میگیرن. بسته به این که مقدار پیش فرض رجیسترا چی باشه. مقدار پیش فرض رجیسترها توی سری های مختلف تا حدودی متفاوته. حتی تو بعضی سری ها مقدار پیش فرض رجیسترها برای پورت های مختلف متفاوته. برای این که بدونیم بعد از ریست، پایه ها تو چه مدی تنظیم میشن، باید به دیتاشیت مراجعه کنیم. همچنین بعد از ریست رجیسترهای مربوط به فعال کردن پورت های GPIO توی واحد RCC به حالت پیش فرض برمیگردن که برای فعال کردن مجدد باید بیت های متناظر مقداردهی بشن.

      پاسخ

یک دیدگاه بنویسید

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

دیگر آموزش های یوبرد

آموزش TFT LCD با TouchGFX و STM32 یوبرد

گرافیک کاربرپسند با میکروکنترلر ST

آموزش FreeRTOS یوبرد

زمان واقعی در میکروکنترلر و پردازنده های کوچک با FreeRTOS

آموزش طراحی PCB و نویز یوبرد

تجسم دنیای الکترونیک

آموزش زبان C و MISRA-C یوبرد

گام نخست دنیای میکروکنترلر

آموزش لحیم کاری و IPC-A-610 یوبرد

ساخت دنیای الکترونیک

آموزش آردوینو یوبرد

جادۀ آسفالت میکروکنترلر

آموزش ماژول های SIM800 یوبرد

تلفن همراه صنعت

آموزش زبان ++C و ++MISRA-C یوبرد

لمس شی گرایی در میکروکنترلرها

آموزش میکروکنترلرهای AVR یوبرد

شاهکار 8 بیتی Atmel

آموزش میکروکنترلرهای LPC یوبرد

یادگار فیلیپس

آموزش های شاخص

دانلود

لطفا برای دریافت لینک دانلود اطلاعات خواسته شده را وارد نمایید
ضبط پیام صوتی

زمان هر پیام صوتی 4 دقیقه است