کار با نشانگر LCD روی برد توسعه STM32L-Discovery. آموزش STM32 به بلوک تقسیم فرکانس توده ها

اطلاعات کلی

برد توسعه STM32L-Discovery دارای نمایشگر کریستال مایع (LCD) با شش کاراکتر 14 قسمتی، 4 دو نقطه (Colon)، 4 نقطه (DP)، 4 نوار (Bar) است. همه بخش ها در گروه های COM0، COM1، COM2، COM3 از 24 بخش ترکیب می شوند. هر گروه "سیم مشترک" جداگانه خود را دارد.


میکروکنترلر STM32L152RBT6 روی برد دیباگ نصب شده است. میکروکنترلر دارای یک کنترلر LCD داخلی است که نشانگرهای LCD تک رنگ را کنترل می کند.
کنترلر LCD:

  1. به شما امکان می دهد فرکانس به روز رسانی را پیکربندی کنید (نرخ فریم - فرکانس به روز رسانی اطلاعات روی LCD)
  2. پشتیبانی از حالت کنترل استاتیک و چندگانه
  3. پشتیبانی می کند نصب نرم افزارتضاد
  4. اجازه می دهد تا سطوح ولتاژ کنترل چندگانه (حداکثر چهار)
  5. از بافر مضاعف استفاده می کند که به داده های موجود در رجیسترهای LCD_RAM ​​اجازه می دهد در هر زمان در طول اجرای برنامه بدون نقض یکپارچگی اطلاعات نمایش داده شده به روز شوند.

حافظه کنترل LCD ثبت می شود

میکروکنترلر STM32L152RB دارای رجیسترهای LCD_RAM ​​ویژه ای است که اطلاعات ذخیره شده در آن مربوط به گروه بخش های COM0 - COM3 است. هر گروه مربوط به دو ثبات 32 بیتی است. این تعداد رجیستر به میکروکنترلر امکان کنترل LCD c را می دهد مقدار زیادبخش هایی نسبت به آنهایی که روی برد توسعه نصب شده اند.

برای کنترل LCD با 176 سگمنت، از 4 گروه COM0 - COM3 هر کدام 44 قطعه استفاده می شود؛ برای کنترل LCD با 320 سگمنت، از 8 گروه COM0 - COM7 هر کدام 40 قطعه استفاده می شود.



برد توسعه STM32L-Discovery از یک LCD با 96 بخش استفاده می کند که به 4 گروه COM0 - COM3 از 24 بخش تقسیم می شود.


ال سی دی روی برد توسعه STM32L-Discovery به گونه ای متصل می شود که بیت های S40، S41 دومین LCD_RAM ​​در هر گروه و بیت های S0-S27 اولین رجیستر LCD_RAM ​​استفاده می شوند. برای کاهش تعداد رجیسترهای استفاده شده، اطلاعات بیت های S40-S43 با استفاده از تابع remapping روی بیت های آزاد S28-S31 نوشته می شود.

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

بلوک تقسیم کننده فرکانس (فرکانس مولد) به شما امکان می دهد به نرخ فریم های مختلف بر روی LCD در محدوده 32 کیلوهرتز تا 1 مگاهرتز دست یابید. موارد زیر را می توان به عنوان منبع سیگنال زمان بندی استفاده کرد:
  1. ژنراتور خارجی فرکانس پایین با فرکانس 32 کیلوهرتز (LSE. خارجی با سرعت پایین)
  2. ژنراتور داخلی با فرکانس پایین با فرکانس 37 کیلوهرتز (LSI. سرعت پایین داخلی)
  3. ژنراتور خارجی RF با تقسیم کننده های فرکانس 2،4،8 و 16 و حداکثر فرکانس 1 مگاهرتز. (HSE. خارجی با سرعت بالا)
برای دستیابی به زمان بندی دقیق و کاهش افست ولتاژ جریان مستقیماز طریق بخش های LCD، منبع سیگنال زمان بندی باید پایدار باشد. سیگنال ساعت LCDCLK به کنترل کننده LCD ارسال می شود. فرکانس سیگنال ساعت بر اساس فاکتورهای تقسیمی که توسط بیت های PS، DIV رجیستر LCD_FCR (ثبت کنترل قاب) تنظیم می شود، تقسیم می شود. فرکانس حاصل در خروجی بلوک تقسیم کننده فرکانس با فرمول محاسبه می شود:

F ck_div =F LCDCLK / (2 PS * (16+DIV))

نرخ فریم با استفاده از فرمول محاسبه می شود:

F Frame =f ck_div *وظیفه

جایی که وظیفه چرخه وظیفه است - نسبت مدت زمان پالس به دوره آن. در طول یک فریم، اطلاعات از رجیسترهای LCD_RAM[x]، LCD_RAM ​​و غیره به صورت متوالی بر روی LCD نمایش داده می شود. برای ال سی دی نصب شده بر روی برد اشکال زدایی، در یک فریم، کنترل کننده LCD باید اطلاعات 4 گروه از بخش های COM0 - COM3 را خروجی دهد، بنابراین، مدت زمان پالس کنترل برای یک گروه 1/4 مدت زمان فریم خواهد بود، یعنی. وظیفه = 1/4.

کنترل LCD

دو راه برای کنترل LCD وجود دارد - حالت کنترل استاتیک و حالت کنترل چندگانه. با نشانگر استاتیک، هر بخش از بیت نشانگر به خروجی میکروکنترلر متصل می شود. در رابطه با LCD، در برد رفع اشکال STM32LDiscovery، 6 * 14 = 84 پین میکروکنترلر مورد نیاز است (به استثنای دو نقطه، نقطه و راه راه). به دلیل استفاده از چنین تعداد پین، اتصال سایر لوازم جانبی غیرممکن خواهد شد. میکروکنترلر STM32L152RB دارای 64 پین است. در حالت کنترل چندگانه (حالت کنترل پویا)، بخش های یکسان ارقام نشانگر در گروه ها ترکیب می شوند. اطلاعات به دلیل روشن شدن متناوب بخش هایی از ارقام نشانگر، با فرکانس غیر قابل درک برای چشم انسان نمایش داده می شود.

کنترل Multiplex به شما امکان می دهد تعداد زیادی از بخش ها را کنترل کنید. به جای کنترل جداگانه هر عنصر، می توان آنها را با ردیف ها و ستون ها (COM و SEG) آدرس داد، بنابراین مدار کنترل را ساده می کند، زیرا هر بخش به خط کنترل خود نیاز ندارد. برای روشن کردن بخش انتخاب شده، باید اختلاف پتانسیل COM و SEG روی آن اعمال شود. نمونه ای از عملکرد اولین رقم نشانگر (نشانگر "1:" را نشان می دهد):


اولین رقم نشانگر در زمان t 0


اولین رقم نشانگر در زمان t 1


اولین رقم نشانگر در زمان t 2


نمودار کلی اتصال قطعات به پین ​​های LCD


نمودار اتصال پین های LCD به پورت های میکروکنترلر

برای خطوط SEG از یک ولتاژ کنترل استفاده می شود که تعداد سطوح آن توسط ضریب بایاس تعیین می شود. LCD روی برد توسعه از حالت کنترل مالتی پلکس با وظیفه=1/4 و بایاس=1/3 استفاده می کند. مقادیر وظیفه و بایاس از طریق رجیستر LCD_CR (Control Register) در بیت‌های DUTY و BIAS تنظیم می‌شوند.

تمرین

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

برای کنترل LCD، پورت های میکروکنترلر باید بر اساس آن پیکربندی شوند:
  1. به سمت خروجی
  2. استفاده از عملکرد جایگزین AF 11
  3. دارای فرکانس های خروجی به پورت 400 کیلوهرتز
  4. از حالت عملکرد فشار کش استفاده کنید
  5. بدون مقاومت کششی
هنگامی که پورت در حالت عملکرد متناوب کار می کند، بافر داده خروجی پورت توسط سیگنال هایی که از دستگاه جانبی می آیند کنترل می شود. فایل هدر stm32lxx.h کتابخانه CMSIS شامل توضیحاتی از تمام ثبات های جانبی و همچنین ساختار دسترسی به آنها می باشد.

پین های LCD به پورت های GPIOA (PA1-PA3، PA8-PA10، PA15)، GPIOB (PB3-PB5، PB8-PB15)، GPIOC (PC0-PC3،PC6-PC11) میکروکنترلر متصل می شوند. برای اینکه LCD کار کند، باید یک سیگنال ساعت به پورت های انتخاب شده ارسال شود. درگاه‌های GPIO میکروکنترلر از گذرگاه AHB سیستم RCC (تنظیم مجدد و کنترل ساعت) - یک سیستم ساعت و تنظیم مجدد کلاک می‌شوند. سیگنال ساعت با تنظیم بیت های مربوطه در رجیستر RCC_AHBENR (ثبت فعال کننده ساعت محیطی AHB) تامین می شود.

ثبت RCC_AHBENR (شکل 15 بیت اول را نشان می دهد)

برای پورت های GPIOA، GPIOB، GPIOC، باید 1 تا 0، 1، 2 بیت از رجیستر را تنظیم کنید.

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

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); یا RCC->AHBENR = 0x7; /* 0x7=111 */

برای نشان دادن حالت های عملکرد پورت، از ثبات GPIOx_MODER (رجیستر حالت پورت GPIO) (x = A..H) استفاده می شود. همه بیت های ثبات در گروه های MODERy گروه بندی می شوند که y شماره پین ​​پورت مربوطه است. پورت ها باید برای حالت عملکرد جایگزین پیکربندی شوند، به عنوان مثال. در گروه مسئول پین، مقدار را روی 10 قرار دهید. برای پورت GPIOA، باید پین های 1-3،8-10،15 را پیکربندی کنید، یعنی 1 را روی 3،5،7،17،19 تنظیم کنید، 21،31 رقم.


ثبت GPIOx_MODER (ثبت حالت پورت GPIO)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | MODER10_1 | GPIO_5MODER_); یا GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
پورت های میکروکنترلر باید به حالت فشار کش تغییر داده شوند. برای انجام این کار، باید 1 را در رجیستر GPIOx_OTYPER (رجیستر نوع خروجی پورت GPIO) در بیت های مسئول پین ها تنظیم کنید.


ثبت نام GPIOx_OTYPER (رجیستر نوع خروجی پورت GPIO)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT); یا GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
هر دو گزینه روی پین های انتخاب شده تاثیر می گذارند. (برای پورت GPIOA، پین‌های 1-3.8-10.15 پیکربندی شده‌اند). اگر نیاز دارید که تمام پین‌های پورت را به حالت push-pull تغییر دهید، می‌توانید مقدار زیر را در رجیستر بنویسید:
GPIOA->OTYPER = 0x0;
برای تعیین فرکانس خروجی اطلاعات به پورت، از رجیستر GPIOx_OSPEEDR (رجیستر سرعت خروجی پورت GPIO) استفاده می شود. همه بیت های ثبات در گروه های OSPEEDRy گروه بندی می شوند که y شماره پین ​​پورت مربوطه است. در این کار فرکانس باید روی 400 کیلوهرتز تنظیم شود. در گروه مسئول پین، مقدار را روی 00 قرار دهید.


ثبت نام GPIOx_OSPEEDR (ثبت سرعت خروجی پورت GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR1 یا GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
اگر لازم است فرکانس خروجی را برای همه پین ​​ها روی پورت 400 کیلوهرتز تنظیم کنید، می توانید مقدار را در ثبات بنویسید:
GPIOA->OSPEEDR = 0x0;
برای غیرفعال کردن مقاومت های pull-up و pull-down برای پین های انتخاب شده، از ثبات GPIOx_PUPDR (رجیستر pullup/pull-down پورت GPIO) استفاده کنید. همه بیت های ثبات در گروه های PUDRy گروه بندی می شوند، جایی که y شماره پین ​​پورت مربوطه است. برای غیرفعال کردن مقاومت های pull-up در گروه مسئول پین، مقدار را روی 00 قرار دهید.


ثبت GPIOx_PUPDR (ثبت بالا و پایین درگاه GPIO)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15 | GPIO_PUPDR10); یا GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
اگر نیاز به غیرفعال کردن مقاومت های pull-up برای همه پین ​​ها دارید، می توانید مقدار را در ثبات بنویسید:
GPIOA->PUPDR = 0x0;
برای استفاده از یک تابع جایگزین برای پورت‌های میکروکنترلر، دو رجیستر GPIOx_AFRL (رجیستر پایین تابع جایگزین GPIO)، مسئول پایه‌های پایین (0 تا 7) و GPIOx_AFRH (رجیستر بالای عملکرد جایگزین GPIO) که مسئول پین‌های بالا (8 تا 15) هستند. ، استفاده می شود. همه بیت های ثبات در گروه های AFRLy و AFRHy گروه بندی می شوند که y شماره پین ​​پورت مربوطه است. پورت ها باید به گونه ای پیکربندی شوند که از عملکرد جایگزین AF11 استفاده کنند، برای این کار گروه مسئول پین باید روی 1011 تنظیم شود.


ثبت نام GPIOx_AFRL (ثبت پایین تابع جایگزین GPIO)


ثبت GPIOx_AFRH (ثبت بالا تابع جایگزین GPIO)

برای انجام این کار، باید مقادیر زیر را در رجیسترها بنویسید:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB؛ /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 - یک مقدار را در ثبات GPIOx_AFRL می نویسد.
AFR = 0xB0000BBB - یک مقدار را در ثبات GPIOx_AFRH می نویسد.

تنظیمات برای پین های مربوط به پورت های GPIOB و GPIOC به همین ترتیب انجام می شود.

راه اندازی کنترلر LCD

هنگام کار با یک کنترلر LCD، مانند سایر تجهیزات جانبی، باید یک سیگنال ساعت به آن ارائه شود. سیگنال ساعت نیز به سیستم مدیریت توان عرضه می شود. کنترلر و سیستم مدیریت توان از گذرگاه APB1 برای کلاک استفاده می کنند. برای فعال کردن کلاک در رجیستر RCC_APB1ENR (رجیستر فعال کننده ساعت جانبی APB1)، باید 1 در بیت های 9 و 28 را تنظیم کنید.


ثبت RCC_APB1ENR (ساعت محیطی APB1 ثبت را فعال می کند)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; یا RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
برای کارکرد کنترلر LCD، باید منبع سیگنال های ساعت را مشخص کنید. منبع در رجیستر RCC_CSR مشخص شده است. به طور پیش فرض، نوشتن در این رجیستر غیرفعال است. حفاظت از نوشتن در رجیستر RCC_CSR در رجیستر کنترل توان PWR_CR حذف می شود. رجیستر RCC_CSR منابع ساعت کنترلر RTC و LCD را کنترل می کند
نوشتن در رجیستر RCC_CSR با تنظیم بیت 8 رجیستر PWR_CR روی 1 فعال می شود.


ثبت PWR_CR (رجیستر کنترل توان PWR)

PWR->CR |= PWR_CR_DBP; یا PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
برای تغییر منبع ساعت کنترلر LCD (و همچنین ساعت RTC)، ابتدا باید منبع ساعت را با تنظیم بیت RTCRST (تنظیم 1 به بیت 23) در ثبات RCC_CSR (ثبت کنترل/وضعیت) تنظیم مجدد کنید.


ثبت RCC_CSR (ثبت کنترل/وضعیت)

RCC->CSR |= RCC_CSR_RTCRST;
یا با نوشتن یک مقدار در یک ثبات با استفاده از عملگر “|=”، زیرا ارزش توسط
ثبات پیش فرض با 0x0 متفاوت است:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
برای انتخاب یک منبع ساعت جدید، باید بیت RTCRST را حذف کنید:
RCC->CSR &= ~RCC_CSR_RTCRST; یا RCC->CSR &= ~0x800000;
یک ژنراتور خارجی با فرکانس پایین به عنوان منبع سیگنال ساعت انتخاب می شود. برای روشن کردن ژنراتور در رجیستر RCC_CSR، باید بیت LSEON را تنظیم کنید (تنظیم 1 تا 8 بیت):
RCC->CSR |= RCC_CSR_LSEON; یا RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
پس از روشن کردن ژنراتور، مدتی طول می کشد تا آن را تثبیت کند. آمادگی ژنراتور با تنظیم سخت افزار بیت LSERDY در ثبات RCC_CSR بررسی می شود:
while(!(RCC->CSR&RCC_CSR_LSERDY));
انتخاب یک ژنراتور خارجی با فرکانس پایین به عنوان منبع ساعت با تنظیم رجیستر RCC_CSR روی 01 در گروه RTCSEL انجام می شود:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; یا RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
در کنترلر LCD باید نصب کنید حالت مورد نظرجانبداری. برای انجام این کار، در رجیستر LCD_CR (رجیستر کنترل LCD) باید مقدار 10 را در گروه BIAS تنظیم کنید. قبل از نصب بیت ها، لازم است بیت ها را از "زباله" پاک کنید.


ثبت LCD_CR (رجیستر کنترل LCD)

بازنشانی بیت ها:
LCD->CR &= ~LCD_CR_BIAS; یا LCD->CR &= ~0x60;
انتخاب حالت تعصب=1/3 با استفاده از بیت ماسک:
LCD->CR |= LCD_CR_BIAS_1; یا LCD->CR |= 0x40;
حالت وظیفه = 1/4 را تنظیم کنید. برای انجام این کار، ابتدا همه بیت ها را بازنشانی می کنیم:
LCD->CR &=~LCD_CR_DUTY; یا LCD->CR &= ~0x1C;
مقدار 011 را روی گروه DUTY از رجیستر LCD_CR برای تنظیم کنید
وظیفه حالت = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; یا LCD->CR |= 0xС;
ما تابع تخصیص مجدد پین را فعال می کنیم. برای انجام این کار، 1 تا 7 بیت از رجیستر LCD_CR را تنظیم کنید:
LCD->CR |= LCD_CR_MUX_SEG; یا LCD->CR |= 0x80;
ما مقادیر ضرایب تقسیم فرکانس سیگنال ساعت LCDCLK را تنظیم می کنیم. مقادیر ضرایب در رجیستر LCD_FCR (رجیستر کنترل قاب LCD) تنظیم می شود. ابتدا تمام بیت ها را نیز پاک می کنیم سپس موارد لازم را تنظیم می کنیم.


ثبت LCD_FCR (رجیستر کنترل قاب LCD)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; یا LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
مقادیر ضرایب تقسیم فرکانس سیگنال ساعت برابر با ck_ps = LCDCLK/16، ck_div = ck_ps/17 تنظیم شده است. برای انجام این کار، 1 را به 24 و 18 رقم تنظیم کنید:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
برای تنظیم سطح کنتراست مورد نظر، باید مقدار 010 را در گروه CC تنظیم کنید، همچنین ابتدا بیت ها را از مقادیر قدیمی پاک کنید:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; یا LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
پس از تنظیم تمام مقادیر، همگام سازی رجیستر LCD_FCR کمی طول می کشد. همگام سازی رجیستر با تنظیم بیت FCRSF در سخت افزار در رجیستر LCD_SR (ثبت وضعیت LCD) بررسی می شود.

ثبت LCD_SR (ثبت وضعیت LCD)

while(!(LCD->SR&LCD_SR_FCRSR));
به عنوان منبع ولتاژ برای LCD، یک مبدل داخلی افزایش دهنده را انتخاب می کنیم تا ال سی دی V را تشکیل دهد. برای انجام این کار، اولین بیت رجیستر LCD_CR (رجیستر کنترل LCD) روی 0 تنظیم می شود:
LCD->CR &= ~LCD_CR_VSEL; یا LCD->CR &= ~0x2;
با تنظیم بیت رجیستر LCD_CR (رجیستر کنترل LCD) روی 0، عملکرد کنترل کننده LCD فعال می شود:
LCD->CR |= LCD_CR_LCDEN; یا LCD->CR |= 0x1;
پس از نصب مبدل افزایش دهنده داخلی به عنوان منبع ولتاژ، باید منتظر بمانید تا آماده شود. آمادگی با تنظیم سخت افزار بیت RDY در رجیستر LCD_SR (ثبت وضعیت LCD) بررسی می شود:
while(!(LCD->SR&LCD_SR_RDY));
پس از اجازه دادن به کنترلر LCD، باید منتظر بمانید تا آماده شود. آمادگی با تنظیم سخت افزار بیت ENS در رجیستر LCD_SR (ثبت وضعیت LCD) بررسی می شود:
while(!(LCD->SR&LCD_SR_ENS));

تشکیل تصویر بر روی LCD

تمام بخش های نشانگر در گروه های COM0 - COM3 با 24 بخش (SEG0-SEG23) ترکیب می شوند. اطلاعات مربوط به بخش ها در رجیسترهای LCD_RAM ​​حافظه کنترل کننده LCD ذخیره می شود. سیم کشی تخته مدار چاپیبه گونه ای است که اعداد سگمنت با شماره بیت های رجیسترهای LCD_RAM ​​مطابقت ندارند.

برای نمایش 1 در اولین رقم LCD، باید بخش های 1B، 1C را روشن کنید. بخش 1B متعلق به گروه COM0 و بخش 1C متعلق به گروه COM1 است. بنابراین، اطلاعات مربوط به آنها باید به ترتیب در رجیسترهای RAM (LCD_RAM0)، RAM (LCD_RAM2) نوشته شود. بخش 1B مسئول خروجی LCD LCDSEG22 است که اطلاعات مربوط به آن در بیت SEG40 رجیستر RAM (LCD_RAM1) ذخیره می شود. با استفاده از تابع نگاشت مجدد، قطعه LCDSEG22 به بیت SEG28 رجیستر RAM (LCD_RAM0) اختصاص داده می شود. بخش 1C مسئول خروجی LCD LCDSEG1 است که اطلاعات مربوط به آن در بیت SEG1 رجیستر RAM (LCD_RAM2) ذخیره می شود.

LCD-> RAM = 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
قبل از نوشتن مقادیر در رجیسترهای حافظه، باید بررسی کنید که آیا انتقال داده قبلی به LCD انجام شده است یا خیر. برای انجام این کار، بیت UDR (درخواست نمایش به‌روزرسانی) رجیستر LCD_SR (ثبت‌کننده وضعیت LCD) بررسی می‌شود. کنترلر LCD دارای دو بافر خروجی است که اطلاعات وارد بافر اول و خروجی از بافر دوم به LCD می شود. بیت UDR در هنگام انتقال از بافر اول به بافر دوم تنظیم می شود و از ثبت کننده های LCD_RAM ​​در برابر نوشتن محافظت می کند:
while(LCD->SR & LCD_SR_UDR);
پس از نوشتن اطلاعات در رجیسترهای LCD_RAM، باید بیت UDR را در رجیستر LCD_SR (رجیستر وضعیت LCD) تنظیم کنید (تنظیم 1 تا 2 بیت):
LCD->SR |= LCD_SR_UDR; یا LCD->SR |= 0x4; /*0x4 = 100 */

برای عذاب و مطالعه این دستگاه. زودتر گفته شود. روسری جمع شد و رفتیم. آه بله! موضوع گفتگوی ما به مقایسه دو MK تبدیل شد. مورد بالا در برابر ATmega328 است. چرا دقیقا آنها؟ هر دو MK در بسته TQFP-32 قرار دارند. (درست است، ATmega328 همچنین در یک بسته DIP ارائه می شود)
حال بیایید نگاهی دقیق تر به درون آنها بیندازیم. برای درک بیشتر، من تمام داده های لازم را در یک جدول جمع آوری کرده ام.

گزینه ها ATmega328 STM32F030K6T6
عمق بیت 8 بیت 32 بیت
فلاش 32 کیلوبایت 32 کیلوبایت
SRAM 1 کیلوبایت 4 کیلوبایت
EEPROM 512b -
تایمر 8 بیتی 2 عدد -
تایمر 16 بیتی 1 کامپیوتر 16 عدد
PWM 3 کانال 6 کانال
USART 1 کامپیوتر 1 کامپیوتر
SPI 1 کامپیوتر 1 کامپیوتر
I2C 1 قطعه (TWI) 1 کامپیوتر
ADC 8 کانال 10 بیتی 16 کانال 12 بیتی
تغذیه 2,7 - 5,5 2,4 - 3,6
سرعت 0 - 16 مگاهرتز 48 مگاهرتز با 4 تا 32 مگاهرتز خارجی
قیمت 160 - 170 روبل. 80 - 140 روبل.
همانطور که از جدول می بینید، STM32 بسیار جالب تر و غنی تر از AVR است. واقعا یک چیز کوچک وجود دارد. STM32 EEPROM ندارد، اما دارای DMA است که به سادگی AVR را به طور کامل از بین می برد. درست است، AVR دارای آردوینو و برنامه نویسی آسان است. من بحثی ندارم، اما STM32 دارای STM32Cube است، که کدی را برای IAR تولید می‌کند و از کل روال تنظیم دستگاه‌های جانبی مراقبت می‌کند. و آخرین میخ در تابوت AVR RTOS است. بله، شما همچنین می توانید آن را روی AVR نصب کنید، اما باید آن را بفهمید، اما در STM32 کادر "FREERTOS" را علامت می زنیم و تمام. خود سیستم هر کاری را که لازم است انجام می دهد و تنها کاری که باید انجام دهیم این است که رشته هایی ایجاد کنیم و کدهایی را در آنها بنویسیم. خوب، این فقط برای شروع است. در واقع، همه چیز در آنجا کمی پیچیده تر است. به طور خلاصه، من STM32 را دوست دارم و برای اینکه در نهایت شما را به این پلتفرم جذب کنم، با انداختن آردوینو در کشوی میز شما، از ابتدا تا انتها یک برد ایجاد می کنم و نحوه کار با آن را به شما نشان می دهم. آخ، یادم رفت. همه STM32 ها دارای یک دیباگر SWD هستند. اینها سه سیم SWDIO، SWCLK، GND هستند و می‌توانید مستقیماً در سخت‌افزار از میان خطوط کد عبور کنید، نه مانند ATmega328 در پروتئوس. برای این کار فقط به برنامه نویس جهانی ST-LINK نیاز دارید. در صورت خرید برد Discovery یا برنامه نویس جداگانه می توان از آن استفاده کرد. و حالا از حرف به عمل.
طرح. بزرگتر
من این برد را به عنوان یک ماژول برای برد اشکال زدایی خود برای AVR ساختم. اما شما می توانید با توزیع برد به صلاحدید خود آن را تکرار کنید (من در پایان مقاله یک پروژه برای DipTrace ارسال خواهم کرد). آنچه در نمودار است. و نمودار یک مهار ساده را مانند AVR نشان می دهد. کوارتز 8 مگاهرتز با دو خازن 20p. درست مانند AVR، مدار منبع تغذیه برای پشتیبانی ADC مونتاژ شده است. مدار را مانند AVR ریست کنید. تنها تفاوت در مدار BOOT است. برخلاف AVR ها، همه STM32 ها دارای بوت لودر سخت افزاری هستند. به طور پیش فرض به USART متصل است. یعنی اگر پین BOOT0 را به منبع تغذیه فشار دهید و MK را دوباره راه اندازی کنید، سپس با استفاده از برنامه Flash Loader Demonstrator می توانید MK را بدون پروگرامر فلش کنید. این ویژگیاگر از قبل یک دستگاه آماده و در حال کار دارید و نیاز به آپدیت سیستم عامل دارید، فقط به یک آداپتور USB USART نیاز دارید. بسیاری از مردم نمی خواهند STM32 را به مشکل برسانند زیرا منبع تغذیه آن بیش از 3.6 ولت نیست. مزخرف. اگر به جدول پین نگاه کنید، متوجه خواهید شد که تمام پاها می توانند 5 ولت را بدون عواقب دریافت کنند. بیایید ادامه دهیم.

و اینگونه به نظر می رسد که روی برد نصب شده است.

اکنون پروگرامر ST-LINK-GA را به کانکتور SWD وصل می کنیم.

اکنون که همه چیز آماده است، آخرین نسخه را از وب سایت ST دانلود کنید (لینک در پایین صفحه). نصب و راه اندازی کنید.

روی New Project کلیک کنید. و در پنجره ای که ظاهر می شود، کنترلر خود را پیدا می کنیم. روی OK کلیک کنید.

بعد از کمی فکر. برنامه پنجره ای مانند این را نمایش می دهد.

من توضیح نمی دهم که چه چیزی و چرا، زیرا این موضوع یک مقاله جداگانه است. حالا مثلاً کاری را که به شما نشان می دهم انجام دهید. چه کنیم. راه اندازی خواهیم کرد سیستم عاملو در یک رشته ما LED را چشمک می زنیم. نوعی "Heloy Word" از یک توپ.))) برای این کار، در پنجره سمت چپ، روی علامت مثبت در کنار کتیبه "FREERTOS" کلیک کنید و یک تیک در لیست کشویی قرار دهید.

علاوه بر این، به محض انتخاب کوارتز خارجی، در سمت راست کنترلر، پایه هایی که باید آن را آویزان کنید، به رنگ سبز برجسته می شوند. کاری که باید انجام دهید این است که پایه ای را که LED روی آن آویزان می شود انتخاب کنید. پورت B و پین 0 را انتخاب کردم. و یک چنگک پیدا کردم. از ترس، نمی دانم چرا، شانه خروجی چهار پایه اول را زیر و رو کردم. از این رو سردرگمی در پورت B. این مشکل فقط روی برد من تأثیر می گذارد. اما هیچ چیز، این مانع از کار MK نشد. و بنابراین پین را پیکربندی کنید. واقعیت این است که با STM همه پین‌ها می‌توانند مقادیر زیادی داشته باشند، اما اگر ورودی/خروجی گسسته را لمس کنید، سه گزینه برای خروجی وجود دارد. خروجی در هوا، خروجی با کشش به منبع تغذیه بعلاوه، خروجی با کشش به اتوبوس مشترک. به طور پیش فرض، STM32CubeMX پای خود را در هوا آویزان می کند. خوب، بگذارید باشد، فقط باید کار را بررسی کنیم و قدرت STM32 را نشان دهیم. برای پیکربندی ساق، باید روی آن کلیک چپ کرده و در پنجره ظاهر شده GPIO_Output را انتخاب کنید. اگر MK خیلی کوچک است، می توانید چرخ را بچرخانید و آن را بزرگ کنید.)))

مرحله بعدی تنظیم ساعت MK است. واقعیت این است که STM32 در این مورد بسیار نامشخص است. برخلاف AVR، STM32 دارای کوارتز در ورودی با فرکانس 4 تا 32 مگاهرتز است و در اتوبوس ها می توان آن را تا 48 مگاهرتز اورکلاک کرد. در داخل MK یک سیستم ساعت بسیار پیچیده وجود دارد، اما STM32CubeMX دوباره به کمک ما می آید. به تب Clock Configuration رفته و آن را مانند تصویر زیر پیکربندی کنید.

همین. روی نماد چرخ دنده در بالا کلیک کنید.

پنجره ای مانند این ظاهر می شود.

و اینجا یادم رفت بگم IAR را برای خودتان دانلود و نصب کنید. می توان آن را از مقامات بارگیری کرد اما مقدار کد آن را کاهش داد یا در تورنت ها یافت می شود. یا اگر پول اضافی زیادی دارید می توانید مجوز بخرید. خوب، من فکر می کنم بسیاری از آنها مسیر را با CodeVisionAVR دنبال خواهند کرد. به طور کلی این را به اختیار شما می سپارم. من ورژن 7.40 رو دارم بیایید به مکعب برگردیم. در پنجره، پروژه را نام ببرید، اما فقط به زبان لاتین، IAR حروف روسی را در مسیرها دوست ندارد. و محل ذخیره پروژه را مشخص کنید. در پنجره IDE باید EWARM را انتخاب کنید (و به طور پیش فرض است). روی OK کلیک کنید. برنامه فکر می کند و سپس پنجره ای مانند این را نمایش می دهد. بلاههههه به طور کلی روی open the project کلیک کنید (برای کسانی که در تانک هستند دکمه وسط).

پنجره ناپدید می شود و IAR و پروژه ما به جای آن راه اندازی می شوند. در سمت چپ به Aplication->User بروید و main.c را اجرا کنید. این دسته از کدها همان چیزی است که STM32CubeMX برای ما ایجاد کرده است.

و حالا با این وحشت چه باید کرد؟ اما برای این ما به یک سری مقاله نیاز داریم))) و اکنون فقط این قطعه کد را پیدا می کنیم.

این تنها جریان ماست. در بدن برای حلقه(;;) تنها تابع osDelay(1) را حذف می کنیم و به جای آن این کد را می نویسیم. HAL_GPIO_WritePin(GPIOB،GPIO_PIN_0،GPIO_PIN_SET)؛
osDelay(500)؛
HAL_GPIO_WritePin(GPIOB،GPIO_PIN_0،GPIO_PIN_RESET)؛
osDelay(500)؛

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

اگر همه چیز درست و بدون خطا باشد، برنامه کل پروژه را جمع آوری می کند، همه چیز مورد نیاز را ایجاد می کند و سیستم عامل را در MK بارگیری می کند. پس از این به حالت اشکال زدایی می رود. او اینجا است. رویای یک مرد AVR. اگر میل مقاومت ناپذیری برای استفاده از آن دارید، می توانید قدم به قدم روی سخت افزار، خط به خط پیش بروید. و اگر می خواهید ببینید برنامه چگونه کار می کند، علامت ضربدر سمت چپ را فشار دهید و از چشمک زدن LED لذت ببرید.

همین. میکروکنترلرها را می توان با کمترین قیمت، به اندازه 78 روبل در فروشگاه ChipResistor خریداری کرد. خوب، اگر آن را ارزان تر می خواهید، عمده فروشی کوچک نیز وجود دارد. از 35 قطعه در حال حاضر برای 50 روبل.
پروژه برای DipTrace.
و البته ویدیو.


مهمان 12/31/15 10:35

اخیراً می‌خواستم یک فرکانس‌سنج روی ATMEGA16 بعلاوه یک شمارنده 8 بیتی خارجی روی 74 منطقی بسازم، اما به اندازه کافی سریع نبود، نمی‌توانم نوشتن در اسمبلر را تحمل کنم؛ حصار کردن یک شمارنده خارجی با 16 بیت دردسر است. AVR قرن گذشته است، یک کنترلر ارزان نیست، من از نویسنده پشتیبانی خواهم کرد، AVR است مرحله گذشته است، من همچنین یک تراشه stm32f100 به اضافه یک تراشه آداپتور USB CP2103 خریدم، به زودی همه AVR را رها می کنند.

الکسی 12/31/15 12:26

من مخالفم با این حال، آردوینو هنوز در حال توسعه است و بسیاری به آن وابسته هستند، و دومی نیز به نوبه خود روی AVR کار می کند. رفتن به STM مانند رفتن به سطح بعدی است. بنابراین، از مهدکودک تا مدرسه.

ناشناس 12.02.16 10:44

AVR و STM32 پردازنده هایی هستند که با یکدیگر رقابت نمی کنند. بشقاب شما حاوی مهمترین پارامتر نیست - این میزان مصرف فعلی است!! و با نگاه کردن به آنها می توانی اشک بریزی. Atmega 328 - - حالت فعال: 0.2 میلی آمپر - حالت خاموش کردن: 0.1 µA - حالت ذخیره انرژی: 0.75 µA (شامل 32 کیلوهرتز RTC) STM32F030K6T6 48 مگاهرتز - حالت فعال: تجهیزات جانبی: میلی‌آمپر - 15 میلی‌آمپر در هر 23 دستگاه. 0.048 میلی آمپر STM32 برق را بی رحمانه مصرف می کند - به طور کلی، 100 برابر بیشتر از AVR. شما نمی توانید دستگاه STM32 را از باتری تغذیه کنید. اما AVR ها ماه ها کار خواهند کرد. بنابراین دست کشیدن از AVR سخت است. همگی موفق باشید.

الکسی 02/12/16 10:54

و هیچ کس پیشنهاد نمی کند که AVR را رها کنیم. من فقط تفاوت در حاشیه را نشان می دهم. من هنوز کتابخانه AVR را حفظ می کنم و هنوز یک ATMega8A به عنوان MCU اصلی خود دارم.

سرگئی 16/02/24 18:02

به نظر من، مقایسه STM32 تازه با AVR بازنشسته به نوعی عجیب است. اگر می خواهید STM32 را با کنترلرهای ATMEL مقایسه کنید، آنها را با خانواده ATSAM مقایسه کنید، اما نه با AVR.

آندری 02.24.16 18:06

این مستمری بگیر کیست؟ AVR زنده است و تا کی می داند به حیات خود ادامه خواهد داد. و با نگاه کردن به جدول، به نظر من مقایسه بیشتر در حاشیه است، نه در معماری.

الکسی 02.24.16 19:04

خوب شروع می شود. حال بیایید در مورد AMD و Intel صحبت کنیم.

سرگئی 16/02/24 22:02

در هاب، یک "کارشناس" نوشت که AVR یک گذرگاه موازی برای اتصال یک LCD استاندارد ندارد، اما STM32 ...

الکسی 02.24.16 22:36

LCD استاندارد به چه معناست؟ آیا این در مورد FSMC است؟ بنابراین این فقط برای نمایشگر نیست، بلکه برای حافظه نیز هست. فقط یک اتوبوس موازی AVR هم داره مثلا Mega8515. SRAM را می توان از طریق یک رجیستر لچ به آن متصل کرد.

Sergets 02/25/16 06:24

الکسی، من در مورد چی صحبت می کنم؟! به نظر می رسد که شما حتی در تلاش برای درک معنای پیام های من نیستید.

الکسی 02/25/16 09:38

خوب، مقایسه دو میکروکنترلر یکسان از شرکت های مختلف چه فایده ای دارد؟ هر دو روی هسته ARM هستند. اگر واقعاً حساس هستید، باید AVR را با STM8 مقایسه کنید. سپس به نزدیکی حاشیه، فاکتور فرم و قیمت چسبیدم. و فقط معماری متفاوت.

عدلان 03.06.16 17:40

سلام. خواهش میکنم کی میتونه کمک کنه نصب شده است آخرین نسخه Cuba 4.15، F1 Libraries 1.4.0. پروژه خالی ایجاد شده در EWARM کامپایل نمی شود - بیش از صد خطا وجود دارد. چه می تواند باشد؟ متشکرم [ایمیل محافظت شده]

الکسی 06/03/16 20:48

Adlan، اولین کاری که باید انجام دهید این است که پروژه ای را بارگذاری کنید که کامپایل نمی شود.

Doc 07/18/16 21:51

درست است که AVR از آردوینو و برنامه نویسی ساده برخوردار است. او درباره چه چیزی می تواند لاف بزند؟ ؛ دی

الکسی 07/19/16 11:41

این یک مقایسه احمقانه است. اولا، STM دارای آنالوگ آردوینو به نام nucleo است. برنامه ها در IDE آنلاین مستقیماً از طریق مرورگر نوشته می شوند. اما اگر مزایای سنگ شخصا، پس. فرکانس کاری هسته 72 مگاهرتز است، AVR حتی نمی توانست چنین سرعتی را در خواب ببیند. البته اگه ال ای دی چشمک بزنی هیچ فرقی نمیکنه ولی اگه محور و یه سری وسایل جانبی رو راه اندازی کنی AVR از بین میره. ظرفیت بیت، 32 با 8 فاصله دارد. لوازم جانبی در STM می توانند شامل 3 I2C، 3 SPI، 6 UART، USB، CAN، اترنت باشند. تقریباً همه چیز قابلیت ریمپ شدن یعنی انتقال به سایر پاهای mk را دارد. همچنین DMA وجود دارد، این یک پردازنده مشترک مستقل برای کار با تجهیزات جانبی است. بنابراین وقفه های AVR به طور عصبی در حاشیه دود می کنند. یک سخت افزار SDIO برای آن وجود دارد کار تمام عیاربا کارت های سی دی، و نه یک ISP عصا در AVR. به طور کلی، چیزهای بیشتری در آنجا وجود دارد، اما بزرگترین سنگ در باغ AVR ایمنی در برابر صدا است. از کار انداختن AVR با کابلی که در نزدیکی موتور الکتریکی است کار سختی نیست، اما STM باید آزمایش شود. بنابراین من طعنه آمیز بودن با آردوینو را توصیه نمی کنم.

مهمان 08/11/16 23:27

میکروچیپ جذب AVR!))))))))))

الکسی 08/12/16 08:35

مثل پنج سال پیش با خبر دیر رسیدیم.

ولادیمیر 16/08/17 22:56

الکسی! در ژانویه 2016، Microchip Atmel را به قیمت 3.56 میلیارد دلار خریداری کرد. چه 5 سال؟

الکسی 08/18/16 10:30

این امری قانونی است، اما عملاً از سال 2008 ادامه دارد. بنابراین من واقعاً اشتباه کردم، نه 5 سال، بلکه 8 سال پیش.))))

ولادیمیر 18/08/16 23:53

الکسی! من شروع به تغییر به stm32 کردم! و در مورد مصرف در حالت خودکار، او توصیه می کند همه چیز را ساعت نکنید، سپس جریان مصرف کاهش می یابد.

اولگ 09.11.16 22:31

در دیتاشیت STM نمودارهایی از مصرف ساعت CLK سیستم را مانند AVR پیدا نکردم - و با توجه به صفحاتی که در آنجا هستند، STM32 هم در حالت عادی و هم در حالت بیکار به طور کامل از دست می دهد. بله، و این STM32 ساعت 72 مگاهرتز ندارد - فقط 48 حداکثر، این همه است، بنابراین حتی با 32 بیت 8 beatnik AVR - بهتر به نظر می رسد، و اتفاقا سازنده در دیتاشیت تعداد آن را ننوشته است. چرخه های ساعت در چرخه ماشین STM32 که دارد، بنابراین اگر معلوم شد که 2 سیکل ساعت در مقابل 1 برای AVR است - پس در نظر بگیرید که 48/2 = 24 مگاهرتز واقعی - تقریباً مشابه 20 مگاهرتز برای AVR. بنابراین سؤال این است - معجزه این STM32 که همه شما در مورد آن صحبت می کنید کجاست؟

ناشناس 09.11.16 23:03
الکسی 11/10/16 00:23

من حتی نمی خواهم بحث کنم. اینتل یا AMD کدام بهتر است؟ یا ژیگولی یا ولگا؟ STM دارای سخت افزار USB، CAN، Ethernet، SDIO و یکسری تجهیزات جانبی دیگر است که AVR فقط می تواند رویای آنها را ببیند. در پایان، یک DMA به عنوان یک پردازشگر مستقل با دسترسی مستقیم به حافظه وجود دارد که در جلوی آن تمام AVR دود عصبی را قطع می کند. به عنوان مثال، سری اول دارای 3 UART، 2 SPI، 3 I2C هستند. یک نقشه مجدد از پورت ها وجود دارد و نیازی نیست نگران نحوه جداسازی برد باشید. اگر دوست دارید با AVR کار کنید، پس هر کسی که شما را اذیت می کند کار کنید. تا به امروز، من برای پروژه های کوچک مگا هشتم می سازم و شکایت نمی کنم. اوه بله، AVR را کنار استارتر بچسبانید و ببینید که چگونه با تداخل سرش را از بین می برد. AVR حفاظت EMI ندارد. بنابراین، PIK ها همیشه در دزدگیر خودرو نصب می شدند، زیرا AVR در چنین شرایطی می میرد. چرا بحث کنید، این یک عدد مرده است.

کورنت 27.11.16 21:22

خوب، به هر حال، در حال حاضر یک آردوینو در STM32 وجود دارد. این Amperka و انواع اسپروینو در JS است) علاوه بر این، اگر میکروچیپ توسط Atmel گرفته شده است، آنها را پیچ کنید.

الکسی 27.11.16 21:44

نام اسپروینو آردوینو، معروف ترین پلتفرم سرگرمی در آن زمان را تقلید می کند، اما اسپروینو با کلاسیک سازگار نیست. آردوینو اونونه مکانیکی و نه برنامه ای (به نقل از آمپرکا)
منم یه برد Nucleo دارم و به آردوینو هم ربطی نداره بجز هندسه خود برد)))
به طور کلی، در اصل، من از MK استفاده می کنم که برای کار فعلی مناسب است.

آندری 16/12/20 22:50

چه کسی دوست دارد بیش از حد پرداخت کند: ارزش آن attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2.1$ در مقابل stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT timer dual. -حالت PWM کانال ) -4/ADC-2/72MHz CPU/=2.3$ به نظر من ساختن امپدانس متر برای مدار RLC با استفاده از AVR تقریبا غیرممکن است یا 10 سنگ وجود دارد.اما می توانید این کار را با STM و FFT (DMA کمک می کند). من سعی کردم به نحوی یک فرکانس متر روی Mega10 بسازم (دقت 1 هرتز) - به سادگی به اندازه کافی سریع نبود (یا یک شمارنده خارجی 32 بیتی با یک شیفت رجیستر نصب کنید - از جایی که ابعاد از آنجا آمده است. من یک سال پیش AVR را کنار گذاشتم، معلوم شد AVR برای افراد ثروتمند است.

آندری 16/12/20 22:53

ناشناس نوشت - "و در اینجا نقل قول دیگری از شرح STM32 به زبان روسی - "... با
لحظه
دریافت
قطع می کند
قبل از
آغاز شده
اجرا
اولین
تیم ها
کنترل کننده
قطع می کند
صرف می شود
فقط
دوازده
چرخه ها
ساعت
علامت"

این درست است اما دو عدد 32 بیتی را در avr ضرب کنید - به وضوح 8-10 سیکل ساعت!

الکسی 20/12/16 23:31

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

اسکندر 21.12.16 00:27

نظرات را خواندم و یادم آمد.
دو بچه در جعبه شنی
یک دودوکا!
دوم، بوق!
اول دودوکا! (لحن صدایی تهدیدآمیزتر)
دوم، BIBIKA! (با لحن گویاتر)
اولین DUDUKA! (از قبل جیغ می زدم)
بیبیکا دوم!!! (نزدیک به گریه)
....
این جنگ تمام شد، هر دو ایستاده و گریه می کنند، یکی بلندتر از دیگری.)))

Val 02/10/17 01:43

اگر بدون تاخیر لوپ کنید چه فرکانسی خواهد بود؟
در حالی که (1)
{
HAL_GPIO_WritePin(GPIOB،GPIO_PIN_0،GPIO_PIN_SET)؛
HAL_GPIO_WritePin(GPIOB،GPIO_PIN_0،GPIO_PIN_RESET)؛
}

الکسی 10.02.17 10:07

یکی در اتوبوس APB

ایگور 06/08/17 22:33

بنابراین بیایید فوراً لپ‌تاپ‌ها را در سیستم‌های تعبیه‌شده ادغام کنیم، آنها صدها برابر بهتر از STM هستند، و فقط تعداد زیادی تجهیزات جانبی در آنجا وجود دارد، از قبل Wi-Fi و بلوتوث وجود دارد و حتی برنامه‌نویس هم نیازی نیست، بلافاصله یک مانیتور با یک صفحه کلید برای نوشتن یک برنامه و اجرای فوری، و نیازی به برنامه نویس و دیباگر نیست.
این مانند خرید یک بیل مکانیکی برای استفاده شخصی در خانه خود است تا گاهی اوقات چند سوراخ به عمق نیم متر حفر کنید.
قرار دادن STM در ترموستات، ساعت، ترازو، خوب، به نظر من، این طبیعی نیست. به هر حال بله، چطور حافظه غیر فرار، بنابراین من یک ترموستات درست می کنم، دما را تنظیم می کنم، سپس چراغ ها خاموش می شوند، پس چه، تنظیمات از بین می روند. اما در سیستم های تعبیه شده که باید یک بار برای عملیات بیشتر پیکربندی شوند، مقادیر باید برای همیشه ذخیره شوند.

الکسی 06/09/17 08:25

خوب، به عنوان مثال، تراشه شیب STM32F030F4P6 48 روبل و ATtiny2313 آنالوگ مستقیم 98 روبل قیمت دارد. من فکر می کنم هر یک از آنها برای ساخت یک ترموستات کافی باشد. و جبران حافظه برای STM می تواند در هر سنسور دما باشد. بله حداقل در همان DS18B20. در مورد لپ‌تاپ‌ها، هر پایانه پذیرش پرداخت دارای رایانه شخصی با سیستم‌عامل و مانیتور است. بنابراین حتی چنین سیستم هایی وجود دارد. هنگام انتخاب MK، اول از همه، یکی را انتخاب کنید که ارزان تر است. اگر این یک سرگرمی است، پس می توانید یک آردوینو بخرید تا با لحیم کاری خسته نشوید، و زمانی که قرار است این سیستم به تولید برسد و صدها نفر تولید شود، هر پنی اهمیت دارد. و پرداخت بیش از حد 50 روبل برای یک MK زمانی که قیمت آن 48 است، یک تجمل غیرقابل قبول است.

روسلان 17/06/17 21:46

الکسی، چرا محیط برنامه نویسی IAR را انتخاب کردید؟
برای یک تازه کار بهتر است کدام محیط را انتخاب کند (به طوری که نکات زیادی مانند داخل وجود داشته باشد Atmel Studio)?

الکسی 17/06/17 22:07
روسلان 17/06/17 22:56
اگر "بد" به نظر نمی رسیدم، پس پیوندی به من بدهید که بتوانم ببینم یا بخوانم چگونه این کار را انجام دهم!
بهتر است یک ویدیو بسازید، من فکر می کنم بسیاری از مبتدیان (و نه تنها) علاقه مند به تماشای آن خواهند بود!
پیشاپیش متشکرم
الکسی 08/05/17 10:19
روسلان 22.11.17 12:17

منظورم این بود https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 دقیقه!!!

روسلان 22.11.17 12:18

الکسی ، لطفاً به من بگویید چگونه با شمارش های "enum" کار کنم ، در غیر این صورت چنین اطلاعاتی در هیچ کجا وجود ندارد و در فیلم های شما "C برای کوچولوها" نیز وجود ندارد ، اما من واقعاً به آن نیاز دارم!
وقتی داشتم با AVR ها بازی می کردم، هرگز معجزه ای به عنوان enumeration ندیده بودم، اما اکنون به STM ها علاقه مند هستم و تعداد آنها زیاد است! و هیچ اطلاعاتی در مورد نحوه کار با آنها وجود ندارد!
در اینجا یک مثال از کد واقعی آورده شده است:


StatusCode MIFARE_Read (byte blockAddr, byte * buffer, byte * bufferSize);

شماره StatusCode کجاست:


enum کد وضعیت: بایت (
STATUS_OK، // موفقیت آمیز
STATUS_ERROR، // خطا در ارتباط
STATUS_COLLISION، // برخورد شناسایی شد
STATUS_TIMEOUT، // مهلت زمانی در ارتباط.
STATUS_NO_ROOM، // یک بافر به اندازه کافی بزرگ نیست.
STATUS_INTERNAL_ERROR، // خطای داخلیدر کد نباید اتفاق بیفتد ;-)
STATUS_INVALID، // آرگومان نامعتبر.
STATUS_CRC_WRONG، // CRC_A مطابقت ندارد
STATUS_MIFARE_NACK = 0xff // یک MIFARE PICC با NAK پاسخ داد.
};

این از کتابخانه آردوینو (C++) است، اما کیل به آن فحش می دهد!
چگونه بازگشت یک تابع شمارش را به درستی بنویسیم؟

روسلان 22.11.17 12:29

و نحوه بیان یکی از آرگومان ها در تابعی که یک enumeration است:


void PCD_WriteRegister(PCD_Register reg، مقدار بایت);

جایی که PCD_Register لیست شده است:


enum PCD_Register: byte (
// صفحه 0: فرمان و وضعیت
// 0x00 // برای استفاده در آینده رزرو شده است
CommandReg = 0x01<< 1, // starts and stops command execution
ComIEnReg = 0x02<< 1, // enable and disable interrupt request control bits
DivIEnReg = 0x03<< 1, // enable and disable interrupt request control bits
ComIrqReg = 0x04<< 1, // interrupt request bits
...
};

و reg همونطور که من فهمیدم یک enumeration هستش ولی در هیچ کجای کد اعلان نشده و نمیفهمم از کجا اومده!
من صفحات زیادی را در اینترنت خواندم و اطلاعاتی پیدا کردم که این شمارش ها را می توان با تعاریف جایگزین کرد، اما هنوز می خواستم بدانم چگونه با آنها کار کنم!!!

روسلان 22.11.17 12:35

من مشتاقانه منتظر پاسخ شما هستم!
شاید یک ویدیو در مورد نحوه کار با آنها بسازید تا برای دیگران مفید باشد، به نظر من ویدیو بسیار مفید خواهد بود زیرا چنین ویدیوهایی وجود ندارد (حداقل من آنها را پیدا نکردم)!

دیمیتری 28.11.17 22:02

"برنامه نویسی ساده"

یک ارگان جالب برای کنترلرهای برنامه نویسی. در کل مشخص نیست که چگونه می توان 32 بیت را با 8 بیت مقایسه کرد. مثل پورشه کاین با زارپورژتس.

الکسی 11/29/17 10:24

شما می توانید مقایسه کنید، می توانید. فقط باید در نظر بگیرید که در این مقایسه پورشه ارزان تر از Zaporozhets است. در مورد اورولوژی، تلخ تر است. پس درستش نمیکنم

کنستانتین 12/23/17 00:06

روسلان، من نمی فهمم که چگونه شما جستجو می کنید و چیزی پیدا نمی کنید (ظاهراً دنبال نمی کنید). اینها اصول اولیه زبان C هستند (نه تنها برای MKها، بلکه برای کامپیوترها). کتاب کرنیگان و ریچی را بخوانید، تمام C در آنجا کاملاً توضیح داده شده است.
و هیچ کس به سوالات شما پاسخ نمی دهد، این چیزهای ابتدایی است.

ناشناس 11.02.18 16:27

چرا ST MK 32 بیتی را با Atmel 8 بیتی مقایسه می کنید. مقایسه احمقانه این معادل مقایسه Atmel AT91SAM 32 بیتی با STM8 8 بیتی است، حتی با توجه به اینکه Atmel دارای 32 تخلیه کننده قوی تر است.

الکسی 02/13/18 12:18

چون در زمان نگارش این مطلب، ST های 8 باند در فروش نبودند و مگا و STM32 قیمت یکسانی دارند.

STM32_Dev 06/19/19 13:59

خب AVR 4-5 سیکل کلاک طول میکشه تا همون کار رو انجام بده!!! فقط و در اینجا دوباره معلوم می شود که AVR با ساعت باد شده اش بهتر از STM32 ساخته شده است و STM32 مانند AVR داخلش EEPROM ندارد.

ساعت AVR در 16 مگاهرتز - 1/16000000 = 0.0000000625 s = 62.5 ns * 5 ساعت = 312.5 ns.
ساعت ARM در 48 مگاهرتز - 1/48000000 = 0.0000000208 s = 20.8 ns * 12 ساعت = 250 ns.

به نظر می رسد که اتمگا موزه 5 سیکل ساعت خود را بیشتر از 12 چرخه ساعت STM32 می شمارد)))

آیا STM32 eprom ندارد؟ مطمئن؟ STM32L152 - 8kB eprom! در مورد atmega چطور؟ 512 بایت؟ اوه خیلی زیاد!!! من حتی نمی دانم آنجا چه بنویسم. بیایید فکر کنیم ... mmm ... 16 متغیر هر کدام 4 بایت)) خوب ، این فقط یک طوفان در بین کنترلرها است))

SIM31 06/30/19 19:29

از نظر مصرف هم میتونید مقایسه کنید، اتمگا و آتینی جدید خیلی به صرفه هستن.
و هر چیزی کاربرد خود را دارد. اگر به قدرت نیاز دارید، Raspbery Pi 4 بگیرید و نگران نباشید، Python حتی امکانات بیشتری دارد، حتی یک وب سرور کامل راه اندازی کنید، حتی Quake 3D را اجرا کنید.
اگر نیاز به پردازش جریان های داده دارید، یک pls وجود دارد (به پروژه "مریخ نورد" "مریخ نورد 2" مراجعه کنید)
نویسنده نکات مثبت زیادی دارد، اما این واقعیت که آردوینا از همه زنده ها زنده تر است به این معنی است که همه چیز به این سادگی نیست.


سالهاست که رادیو آماتورها از میکروکنترلرهای هشت بیتی خانواده PIC و AVR استفاده می کنند. آنها به دلیل قیمت پایین، مستندات دقیق، سهولت برنامه نویسی و سهولت نصب محبوب هستند. با این حال، اغلب مواردی وجود دارد که قدرت چنین میکروکنترلری برای حل کار کافی نیست. ساده ترین مثال فرکانس متر یا سیگنال مولد روی یک میکروکنترلر است که در آن حداکثر فرکانس اندازه گیری شده یا تولید شده مستقیماً به سرعت پردازش یا خروجی اطلاعات بستگی دارد.

میکروکنترلرهای هشت بیتی علاوه بر سرعت، محدودیت های دیگری نیز دارند، به عنوان مثال، بسیاری از مدل های AVR تنها دارای یک پورت سریال سخت افزاری هستند که امکان دریافت اطلاعات از دستگاه خارجی و ارسال همزمان نتایج پردازش آن را به مصرف کننده نمی دهد. ناگفته نماند موارد "پیش پا افتاده" مانند نمایش اطلاعات در یک نشانگر گرافیکی که به منابع زیادی از سرعت و حافظه نیاز دارد. پس از تجزیه و تحلیل تعدادی از این محدودیت ها، نویسنده ایده جابجایی به میکروکنترلرهای خانواده STM32 را مطرح کرد.

به عنوان مثال، دو میکروکنترلر از یک رده قیمتی را در نظر بگیرید - STM32F103C6 و ATmega328P.

میز 1

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

اندازه پردازنده

گام سرب، میلی متر

فرکانس ساعت، مگاهرتز

حجم حافظه FLASH. کیلوبایت

مقدار رم، کیلوبایت

شماره USART

تعداد تایمر 16 بیتی

تعداد خطوط ورودی/خروجی

قیمت تقریبی، مالش.

پارامترهای مقایسه ای آنها در جدول آورده شده است. 1. نتایج مقایسه حتی تا حدودی تعجب آور است. یک میکروکنترلر 32 بیتی نه تنها تقریباً از همه جهات قدرتمندتر از یک میکروکنترلر هشت بیتی است، بلکه ارزانتر نیز هست. البته لحیم کاری میکروکنترلر با گام پین 0.5 میلی متر در خانه چندان آسان نیست. خوشبختانه، در بیشتر موارد این مورد نیاز نیست - انواع مختلفی از بردهای توسعه با میکروکنترلرهای خانواده STM32 در بازار وجود دارد که برای کاربردهای مختلف کافی است. بیایید با جزئیات بیشتری به آنها نگاه کنیم.

STM32F4-DISCOVERY

این برد (نشان داده شده در شکل 1) شاید راحت ترین برد برای مبتدیانی باشد که میکروکنترلرهای STM را مطالعه می کنند. اولاً، مجموعه بزرگی از تجهیزات جانبی دارد. علاوه بر میکروکنترلر، برد شامل یک شتاب سنج میکروالکترومکانیکی، یک میکروفون، یک DAC صوتی، دو کانکتور USB، یک دکمه و چهار LED است.

پین‌های میکروکنترلر برای نصب کانکتورهای پین در لبه‌های چپ و راست برد، روی پدهای تماسی قرار می‌گیرند که اتصال همه دستگاه‌های خارجی لازم را به آنها آسان می‌کند. میکروکنترلر STM32F407VGT6 نصب شده روی برد دارای پارامترهای بسیار خوبی است: 1 مگابایت حافظه FLASH، 192 کیلوبایت رم و فرکانس کلاک 168 مگاهرتز.

در نهایت، برد مجهز به یک دیباگر ST-LINK/V2 داخلی است که می‌توان از آن برای اشکال‌زدایی برنامه‌ها نه تنها روی میکروکنترلر روی برد، بلکه در میکروکنترلرهای هم خانواده که روی بردهای دیگر قرار دارند، استفاده کرد. جابجایی به آنها با استفاده از یک بلوز قابل جابجایی و اتصال SWD انجام می شود.

قیمت تخته حدود 800 روبل است که می توان آن را کاملاً قابل قبول در نظر گرفت.

برد توسعه STM32F103RBT6

گزینه جالب بعدی یک برد توسعه با میکروکنترلر STM32F103RBT6 است (شکل 2).

این تا حدودی ضعیف تر از نصب شده روی برد قبلی است - فرکانس ساعت 72 مگاهرتز، 128 کیلوبایت حافظه FLASH و 20 کیلوبایت رم، اما دستگاه های جانبی بسیار جالب هستند. یک صفحه نمایش لمسی TFT با وضوح 320x240 پیکسل و مورب 2.8 اینچ یک پورت USB داخلی برای تبادل اطلاعات با کامپیوتر، یک اسلات برای کارت حافظه SD، یک ساعت کوارتز 32768 هرتز، یک محفظه برای یک باتری ساعت بلادرنگ و کانکتور ST-LINK برای اشکال زدایی برنامه ها.

قیمت این برد نیز حدود 800 روبل است، اما لازم به ذکر است که دیباگر داخلی ندارد. برای دانلود برنامه‌ها، باید یک دیباگر ST-LINK جداگانه خریداری کنید یا به جای آن از برد STM32F4-DISCOVERY که در بالا توضیح داده شد استفاده کنید.

مینی افرا

شباهت خارجی این برد (شکل 3) با ماژول های معروف آردوینو قابل توجه است. و این تصادفی نیست.

برد Maple Mini به عنوان جایگزینی برای آردوینو نانو طراحی شده است. زبان برنامه نویسی و محیط توسعه برای خانواده میکروکنترلرهای AVR نصب شده در آردوینو با خانواده STM سازگار شده است. برای اطلاعات دقیق در مورد زبان برنامه نویسی Maple IDE و محیط توسعه به http://leaflabs.com/docs/maple-q uickstart.html بروید.

برد توسعه دارای یک میکروکنترلر STM32F103CBT6 با فرکانس 72 مگاهرتز، 128 کیلوبایت حافظه FLASH و 20 کیلوبایت رم است که بدون شک از هر ماژول آردوینو بیشتر است. و این که محیط توسعه تقریباً بدون تغییر باقی مانده است، مزیت بیشتری دارد.

به طور جداگانه، ما متذکر می شویم که با وجود اندازه کوچک، Maple Mini لوازم جانبی بسیار متنوعی را ارائه می دهد: 34 خط ورودی/خروجی، دو کانال رابط SPI و دو کانال I2C، سه پورت سریال. این به آن اجازه می دهد تا با موفقیت در پیشرفت های مختلف آماتور استفاده شود. به لطف اندازه کوچک، Maple Mini را می توان مستقیماً در دستگاه در حال توسعه قرار داد.

برد اصلی Maple Mini را می توان با قیمت 35 دلار در وب سایت توسعه دهندگان آن خریداری کرد. هزینه ارسال 5 دلار دیگر خواهد بود. یک کپی از برد ساخته شده در چین نیمی از آن قیمت خواهد داشت.

نرم افزار

چندین گزینه برای محیط های توسعه وجود دارد که می توان از آنها برای تهیه برنامه های میکروکنترلرهای خانواده STM32 استفاده کرد:

Commercial IAR Embedded Workbench، AtollicTrueSTUDIO، Keil، و غیره. این محصولات با امکانات کامل بسیار گران هستند، با قیمت مجوز از 1000 یورو شروع می شود، اما نسخه های آزمایشی رایگان با محدودیت در حجم برنامه در حال توسعه نیز وجود دارد. پروژه های ساده آنها کاملاً کافی هستند.

Eclipse رایگان با کامپایلر ARM-GCC قبل از استفاده نیاز به پیکربندی غیر ضروری کامپایلر دارد. تنها مزیت امروز توانایی کار نه تنها در ویندوز، بلکه در لینوکس است.

رایگان CooCox IDE (CoIDE) بر اساس همان ویرایشگر Eclipse. برنامه ها را از طریق ST-LINK بارگیری و اشکال زدایی می کند. برخلاف گزینه قبلی، CoIDE نیازی به تنظیمات خاصی ندارد و بلافاصله پس از نصب کار می کند. این گزینه راحت ترین است و ارزش استفاده را دارد.

بیایید از CooCox IDE برای ایجاد یک برنامه نمونه برای برد STM32F4-DISCOVERY استفاده کنیم که پلک زدن LED کلاسیک اولین برنامه را برای هر میکروکنترلر اجرا می کند. بر روی برد STM32F4-DIS-COVERY چهار عدد LED وجود دارد که به پایه های PD12-PD15 میکروکنترلر متصل می شوند. اجازه دهید آنها را به طور متناوب پلک بزنیم.

مرحله 1. محیط توسعه CoIDE را راه اندازی کنید و یک پروژه ایجاد کنید. از لیست کشویی نشان داده شده در شکل. 4، میکروکنترلر STM32F407VG را انتخاب کنید.

مرحله 2. همانطور که در شکل نشان داده شده است. 5، اجزایی را که در پروژه استفاده خواهند شد انتخاب کنید. موارد اصلی عبارتند از GPIO (ورودی-خروجی)، کتابخانه C (توابع اصلی زبان C) و M4 Core (عملکردهای هسته پردازنده). هنگامی که یک مؤلفه را فعال می کنید، CoIDE به طور خودکار فایل های لازم را در پوشه پروژه کپی می کند که بسیار راحت است.

مرحله 3. وارد کردن متن برنامه. بسیار کوتاه است و در جدول آورده شده است. 2.

همانطور که می بینید، همه چیز ساده و واضح است. کسانی که برنامه هایی برای میکروکنترلرهای AVR نوشته اند احتمالاً طرح های آشنا را خواهند دید - مقداردهی اولیه پورت ها که جهت (ورودی یا خروجی) را نشان می دهد، حلقه اصلی که در آن اقدامات لازم انجام می شود. به طور کلی، نحو برنامه به طور کامل با زبان C مطابقت دارد، که ادبیات بیش از حد کافی برای آن وجود دارد. همچنین مقالات زیادی در مورد برنامه نویسی STM32 در اینترنت وجود دارد. نمونه های زیادی همراه با برد توسعه عرضه می شوند و می توانند به عنوان نمونه نیز استفاده شوند.

پس از وارد کردن متن برنامه با کلیک بر روی دکمه صفحه نمایش «دانلود برای فلش»، در میکروکنترلر دانلود می شود. LED های روی برد شروع به چشمک زدن می کنند. به طور جداگانه، شایان ذکر است قابلیت های اشکال زدایی - نقطه شکست را می توان در هر نقطه از برنامه تنظیم کرد، می توانید برنامه را مرحله به مرحله اجرا کنید و مقادیر متغیرها را مشاهده کنید.

البته این مثال ایده آل نیست. به عنوان مثال، می توانید از وقفه های تایمر برای کنترل چشمک زدن LED ها استفاده کنید که حلقه اصلی برنامه را برای کارهای دیگر آزاد می کند. کسانی که مایلند می توانند به تنهایی به این موضوع پی ببرند.

نتیجه

به طور کلی پس از اولین آشنایی، میکروکنترلرهای خانواده STM32 تاثیر بسیار خوشایندی از خود به جای گذاشتند. معلوم شد همه چیز چندان پیچیده نیست و راحتی محیط توسعه، فرآیند اشکال زدایی و تعداد زیادی توابع استاندارد حتی تا حدودی انتقال از Ms DOS به Windows را یادآوری می کند - به نظر می رسد نکات کلی یکسان است، اما همه چیز بسیار راحت تر و کاربردی تر

اما نقطه ضعف اصلی این خانواده برای پیشرفت‌های آماتوری، هنوز هم پین بسیار کوچک است. طراحی و لحیم کاری تخته ای با گام پین 0.5 میلی متری در خانه یک کار بسیار بی اهمیت است. اما با قیمت های فعلی، بردهای اشکال زدایی با میکروکنترلرهای از قبل نصب شده برای هر آماتور رادیویی کاملاً قابل دسترسی است.

آیا ارزش تبدیل همه چیز به STM و معماری 32 بیتی را دارد؟ البته که نه. وظایفی وجود دارد که ATtiny برای آنها کاملاً کافی است. اما، به عنوان مثال، برای تجزیه و تحلیل طیف در یک گیرنده SDR خانگی یا دریافت و انتقال مقادیر زیادی از اطلاعات از طریق یک شبکه، استفاده فوری از یک میکروکنترلر قدرتمند بسیار موثرتر است تا با کمبود حافظه یا عملکرد مواجه نشوید. بهبود دستگاه

بر اساس هسته Cortex، آنها به طور فعال در میان توسعه دهندگان حرفه ای و مبتدی دستگاه های روی میکروکنترلرها محبوبیت پیدا کردند. چندین دلیل برای این وجود دارد:
- قیمت پایین در مقایسه با رقبا؛
- تعداد زیادی رابط داخلی؛
- سهولت برنامه نویسی و قابلیت اطمینان بالا.
اما یک اشکال مهم نیز وجود دارد - همه میکروکنترلرهای STM در بسته های DIP تولید نمی شوند، که اغلب به سادگی افراد مبتدی را می ترساند، زیرا ساخت تخته ای با مسیرهای کمتر از 0.3 میلی متر در خانه مشکل ساز است. این وضعیت منجر به ظهور تعداد زیادی برد اشکال زدایی در بازار شده است، هم از ST Microelectronics (Discovery) و هم بردهای تولید شده توسط شرکت های شخص ثالث (Olimex، Pinboard). من Discovery را به سه دلیل انتخاب کردم:
- قیمت نسبتاً پایین (تخته را می توان از 300 روبل خریداری کرد).
- طرز کار خوب (اگرچه شکایاتی در مورد سیم کشی وجود دارد، اما آنها چندان قابل توجه نیستند).
- منابع و نمونه های زیادی در وب سایت سازنده قرار داده شده است.
- وجود یک برنامه نویس داخلی (لازم نیست آن را جداگانه بخرید).
هدف از درس اول کمک به یک توسعه دهنده مبتدی در انتخاب یک برد اشکال زدایی و در آینده - آموزش اصول برنامه نویسی است.
پس بزن بریم.

STM32F0DISCOVERY

این برد در فوریه 2012 به منظور جذب توسعه دهندگانی که قبلاً از میکروکنترلرهای 8 بیتی استفاده کرده بودند منتشر شد و بدین وسیله این جایگاه را پر کرد. من نمی توانم چیز بد یا خوبی در مورد او بگویم. یک تخته معمولی، ارزان، برای شروع عالی است. دارای ویژگی های زیر است:
- میکروکنترلر: STM32F051R8T6 (کورتکس M0، 48 مگاهرتز، فلش 64 کیلوبایت، رم 8 کیلوبایت).
- ساخته شده در ST-link/V2، که می تواند به طور جداگانه از هیئت مدیره استفاده شود.
- از USB یا از یک منبع خارجی 3/5 ولت تغذیه می شود.
- 4 LED و 2 دکمه؛
- رابط ها: USART، SPI، I2C، HDMI.
- تایمرهای 16 و 32 بیتی؛
- تمام خروجی ها به دو شانه تک ردیفی هدایت می شوند.
در واقع ، چنین تخته ای در حال حاضر کاملاً منسوخ شده است و توصیه می شود آن را فقط برای همان ابتدای آموزش مصرف کنید.

STM32VLDISCOVERY

تفاوت آن با برد قبلی فقط در پردازنده STM32F100RBT6B (کورتکس M3، 24 مگاهرتز، فلش 128 کیلوبایت، رم 8 کیلوبایت) و چیدمان شانه های جانبی است. درست مانند موردی که در بالا توضیح داده شد، برای توسعه دهندگان مبتدی مناسب است. دیگر چیزی برای گفتن در مورد او وجود ندارد.

STM32LDISCOVERY

STM32LDISCOVERY یک تکامل ارزشمند از برد قبلی است. در اینجا چیزی است که در مورد آن جالب است:
- میکروکنترلر STM32L152RBT6 (کورتکس M3، 32 مگاهرتز، فلش 128 کیلوبایت، رم 8 کیلوبایت، EEPROM 4 کیلوبایت)
- رابط ها: USB، USART، SPI، I2C؛
- 8 تایمر؛
- ADC 24 کاناله 12 بیتی؛
-12 بیت DAC؛
- ساعت واقعی؛
- کنترلر LCD 8*40
- ST-link/V2 داخلی.
موارد زیر روی برد نصب شده است:
- صفحه نمایش LCD 24x8;
- 4 LED؛
- 2 دکمه؛
- صفحه کلید لمسی؛
- 2 شانه تک ردیفی با سرب های آزاد.
من می خواهم به طور جداگانه در مورد USB بگویم: کنترلر از USB 2.0 با سرعت کامل، حالت میزبان و دستگاه پشتیبانی می کند که به ندرت در MK از این کلاس دیده می شود.
در واقع، برد بهترین گزینه برای کار با هسته Cortex-M3 است، بنابراین می توانید با خیال راحت آن را بگیرید، زیرا قیمت آن پایین است.

STM32F3DISCOVERY

STM32F3DISCOVERY متعلق به نسل بعدی بردهای توسعه STM است و دارای ویژگی های زیر است:
- میکروکنترلر STM32F303VCT6 (کورتکس M4، 72 مگاهرتز، فلش 256 کیلوبایت، رم 48 کیلوبایت)
- ساعت واقعی؛
- ST-link/V2 داخلی؛
- 13 تایمر؛
- کنترلر DMA 12 کاناله؛
- 4 ADC؛
- 4 تقویت کننده عملیاتی؛
- رابط ها: CAN، USB 2.0، USART/UART، SPI، I2C؛
- 87 خط GPIO.

- پورت USB سفارشی؛
- شتاب سنج 3 محوره و سنسور ژئومغناطیسی 3 محوره در یک محفظه.
- ژیروسکوپ 3 محوره؛
- 10 LED؛
- 2 دکمه؛
- 2 عدد شانه دو ردیفه.
یک تابلوی بسیار جالب، فرصت های زیادی برای آزمایش. به طور کلی، نظر در مورد آن همچنان خوب است، اما تمرکز آن بر روی ردیابی وضعیت فیزیکی و موقعیت، دامنه آزمایش را بسیار کاهش می دهد، اگرچه می توانید به راحتی خودتان یک تخته توسعه بسازید.

STM32F4DISCOVERY

من بیشتر از همه فرصت کار با این هیئت را داشتم و آن را بیشتر از بقیه دوست داشتم - تمرکز جامع آن روی آن تأثیر گذاشت.
در اینجا چیست:
- میکروکنترلر STM32F407VGT6 (Cortex M4، 168 مگاهرتز، فلش 1 مگابایت، رم 192 کیلوبایت)
- ST-link/V2 داخلی؛
- تایمر؛
- کنترل کننده DMA؛
- ADC/DAC؛
- رابط ها: CAN، USB 2.0، USART/UART، SPI، I2C، GPIO؛
برد شامل تجهیزات جانبی زیر است:
- پورت USB سفارشی؛
- شتاب سنج 3 محوره؛
- 8 LED؛
- 2 دکمه؛
- 2 شانه دو ردیفه؛
- DAC صوتی با تقویت کننده کلاس D.
- میکروفون دیجیتال همه جانبه

همانطور که در بالا نوشتم، این برد برای من اصلی شد؛ من از توانایی کار با صدا و شتاب سنج راضی بودم.

دروس بعدی بر اساس این تابلو خواهد بود.

خلاصه.
اگر تصمیم دارید کار با تخته های اشکال زدایی STM را شروع کنید ، به شما توصیه می کنم STM32F4DISCOVERY را بگیرید ، به نظر من بیشترین عملکرد را دارد. مقالات بعدی به طور خاص بر اساس کار با آن خواهد بود. در آینده نزدیک مقالاتی با موضوعات زیر نوشته خواهد شد:
- کار با GPIO، تایمرها، وقفه ها و غیره؛
- کار با رابط های UART، SPI، I2C و 1-wire با استفاده از نمونه هایی از دستگاه های واقعی، مانند نمایشگرها، ماژول های GPS و GSM، سنسورهای دما، ارتباط با رایانه از طریق RS-232 و موارد دیگر.
هدف نهایی این چرخه ایجاد یک برد توسعه برای STM32F4 است. همه سفت‌افزارها و نمودارهای مدار برای عموم در دسترس خواهند بود.