STM32L-Discovery ishlab chiqish platasida LCD indikator bilan ishlash. Massalarga STM32 bo'yicha trening. Chastotani ajratuvchi blok

Umumiy ma'lumot

STM32L-Discovery ishlab chiqish platasi suyuq kristall displeyga (LCD) ega bo'lib, oltita 14 segmentli belgilar, 4 ta ikki nuqta (ko'p nuqta), 4 nuqta (DP), 4 ta chiziq (Bar). Barcha segmentlar 24 ta segmentdan iborat COM0, COM1, COM2, COM3 guruhlariga birlashtirilgan. Har bir guruhning o'ziga xos "umumiy simi" mavjud.


Nosozliklarni tuzatish platasiga STM32L152RBT6 mikrokontrolleri o'rnatilgan. Mikrokontroller monoxrom LCD indikatorlarini boshqaradigan o'rnatilgan LCD kontrollerga ega.
LCD boshqaruvchisi:

  1. Yangilanish chastotasini sozlash imkonini beradi (kadr tezligi - LCD displeydagi ma'lumotlarning yangilanish chastotasi)
  2. Statik va multipleks boshqaruv rejimini qo'llab-quvvatlaydi
  3. Qo'llab-quvvatlaydi dasturiy ta'minotni o'rnatish kontrast
  4. Bir nechta nazorat kuchlanish darajalariga ruxsat beradi (to'rttagacha)
  5. Ikki marta buferlashdan foydalanadi, bu LCD_RAM ​​registrlaridagi ma'lumotlarni dasturni bajarish paytida istalgan vaqtda ko'rsatilgan ma'lumotlarning yaxlitligini buzmasdan yangilanishiga imkon beradi.

LCD kontroller xotira registrlari

STM32L152RB mikrokontrolleri maxsus LCD_RAM ​​registrlariga ega, ularda saqlangan ma'lumotlar COM0 - COM3 segmentlari guruhiga mos keladi. Har bir guruh ikkita 32 bitli registrlarga mos keladi. Ushbu registrlar soni mikrokontrollerga LCD displeyni boshqarishga imkon beradi c katta miqdor segmentlar ishlab chiqish taxtasida o'rnatilganidan ko'ra.

176 segmentli LCD displeyni boshqarish uchun har biri 44 segmentdan iborat 4 guruh COM0 - COM3 ishlatiladi; 320 segmentli LCDni boshqarish uchun har biri 40 segmentdan iborat 8 guruh COM0 - COM7 ishlatiladi.



STM32L-Discovery ishlab chiqish platasi 96 ta segmentli LCD displeydan foydalanadi, ularning har biri 24 ta segmentdan iborat 4 ta COM0 - COM3 guruhiga bo'lingan.


STM32L-Discovery ishlab chiqish platasidagi LCD displey shunday ulanganki, har bir guruhdagi ikkinchi LCD_RAM ​​registrlarining S40, S41 bitlari va birinchi LCD_RAM ​​registrlarining S0-S27 bitlari ishlatiladi. Amaldagi registrlar sonini kamaytirish uchun S40-S43 bitlaridan olingan ma'lumotlar S28-S31 bo'sh bitlariga remapping funksiyasidan foydalanib yoziladi.

Chastotani ajratuvchi blok

Chastotani ajratuvchi blok (chastota generatori) 32 kHz dan 1 MGts gacha bo'lgan diapazonda LCD displeyda turli kvadrat tezligiga erishishga imkon beradi. Vaqt signali manbai sifatida quyidagilardan foydalanish mumkin:
  1. 32 kHz chastotali tashqi past chastotali generator (LSE. Past tezlikli tashqi)
  2. 37 kHz chastotali ichki past chastotali generator (LSI. Past tezlikli ichki)
  3. 2,4,8 va 16 chastotali va maksimal chastotasi 1 MGts bo'lgan tashqi RF generatori. (HSE. Yuqori tezlikli tashqi)
Aniq vaqtga erishish va kuchlanish ofsetini kamaytirish uchun to'g'ridan-to'g'ri oqim LCD segmentlari orqali vaqt signalining manbai barqaror bo'lishi kerak. LCDCLK soat signali LCD kontrollerga yuboriladi. Takt signalining chastotasi LCD_FCR (Frame Control Register) registrining PS, DIV bitlari tomonidan o'rnatiladigan bo'linish omillariga ko'ra bo'linadi. Chastotani ajratuvchi blokning chiqishidagi hosil bo'lgan chastota quyidagi formula bo'yicha hisoblanadi:

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

Kadr tezligi quyidagi formula bo'yicha hisoblanadi:

F Frame =f ck_div *vazifa

Qaerda vazifa ish aylanishi - puls davomiyligining uning davriga nisbati. Bir kadr davomida LCD_RAM[x], LCD_RAM ​​va boshqalar registrlaridagi ma'lumotlar LCD displeyda ketma-ket ko'rsatiladi. Rivojlanish platasiga o'rnatilgan LCD uchun bir freymda LCD boshqaruvchisi COM0 - COM3 segmentlarining 4 guruhidan ma'lumotni chiqarishi kerak, shuning uchun bitta guruh uchun boshqaruv pulsining davomiyligi ramka davomiyligining 1/4 qismini tashkil qiladi, ya'ni. burch = 1/4.

LCD boshqaruv

LCD displeyni boshqarishning ikkita usuli mavjud - statik boshqaruv rejimi va multipleks boshqaruv rejimi. Statik ko'rsatkich bilan indikator bitining har bir segmenti mikrokontrollerning chiqishiga ulanadi. LCD displeyga nisbatan, STM32LDiscovery disk raskadrovka platasida 6 * 14 = 84 mikrokontroller pinlari talab qilinadi (ko'p nuqta, nuqta va chiziqlar bundan mustasno). Bunday ko'p sonli pinlardan foydalanish tufayli boshqa tashqi qurilmalarni ulash imkonsiz bo'ladi. STM32L152RB mikrokontrolleri 64 pinga ega. Multipleks boshqaruv rejimida (dinamik boshqaruv rejimi) ko'rsatkich raqamlarining bir xil segmentlari guruhlarga birlashtiriladi. Ma'lumot inson ko'ziga sezilmaydigan chastota bilan indikator raqamlari segmentlarining muqobil yoritilishi tufayli ko'rsatiladi.

Multipleks boshqaruv sizga ko'p sonli segmentlarni boshqarish imkonini beradi. Har bir elementni alohida nazorat qilish o'rniga, ular qatorlar va ustunlar (COM va SEG) bo'yicha ko'rib chiqilishi mumkin, bu esa boshqaruv sxemasini soddalashtiradi, chunki har bir segment o'z nazorat chizig'ini talab qilmaydi. Tanlangan segmentni yoqish uchun unga COM va SEG potentsial farqi qo'llanilishi kerak. Ko'rsatkichning birinchi raqamining ishlashiga misol (indikator "1:" ni ko'rsatadi):


t 0 vaqtidagi indikatorning birinchi raqami


t 1 vaqtidagi indikatorning birinchi raqami


t 2 vaqtidagi indikatorning birinchi raqami


Segmentlarni LCD pinlariga ulashning umumiy diagrammasi


LCD pinlarining mikrokontroller portlariga ulanish diagrammasi

SEG liniyalari uchun nazorat kuchlanishi qo'llaniladi, uning darajalari soni egilish koeffitsienti bilan belgilanadi. Rivojlanish platasidagi LCD displey burch = 1/4 va taraflama = 1/3 bilan multipleks boshqaruv rejimidan foydalanadi. Vazifa va noaniqlik qiymatlari DUTY va BIAS bitlarida LCD_CR (Boshqaruv registri) registri orqali o'rnatiladi.

Amaliyot

Mikrokontroller portlarini sozlash

LCD displeyni boshqarish uchun mikrokontroller portlari mos ravishda sozlanishi kerak:
  1. Chiqishga
  2. AF 11 Alternativ funksiyasidan foydalanish
  3. 400 kHz portga chiqish chastotalariga ega bo'ling
  4. Push-pull ish rejimidan foydalaning
  5. Pull-up rezistorlari yo'q
Port muqobil funktsiya rejimida ishlayotganida, portning chiqish ma'lumotlari buferi periferiyadan keladigan signallar bilan boshqariladi. CMSIS kutubxonasining stm32lxx.h sarlavha faylida barcha periferik registrlarning tavsifi hamda ularga kirish strukturasi mavjud.

LCD pinlari mikrokontrollerning GPIOA (PA1-PA3, PA8-PA10, PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3, PC6-PC11) portlariga ulangan. LCD displey ishlashi uchun tanlangan portlarga soat signali berilishi kerak. Mikrokontrollerning GPIO portlari RCC (Reset and Clock Control) tizimining AHB avtobusidan - soat va qayta o'rnatish tizimidan soatlanadi. Takt signali RCC_AHBENR (AHB periferik soatni yoqish registri) registridagi mos bitlarni o'rnatish orqali ta'minlanadi.

RCC_AHBENR-ni ro'yxatdan o'tkazing (rasmda dastlabki 15 bit ko'rsatilgan)

GPIOA, GPIOB, GPIOC portlari uchun registrning 1 dan 0, 1, 2 bitlarini o'rnatishingiz kerak.

Keyinchalik, men bit maskasi va o'n oltilik kodlardan foydalangan holda registrga ma'lumot yozish uchun kodni beraman. Bitmaskalardan foydalanish qulayroq, lekin o'n oltilik kodlar bilan ishlash registrlar bilan ishlashning mohiyatini tushunish imkonini beradi.

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

Portning ish rejimlarini ko'rsatish uchun GPIOx_MODER registri (GPIO port rejimi registri) (x = A..H) ishlatiladi. Barcha registr bitlari MODERy guruhlarga guruhlangan, bu erda y mos keladigan portning pin raqamidir. Portlar muqobil funksiya rejimi uchun sozlanishi kerak, ya'ni. pin uchun mas'ul bo'lgan guruhda qiymatni 10 ga qo'ying. GPIOA porti uchun siz 1-3,8-10,15 pinlarini sozlashingiz kerak, ya'ni 1 dan 3,5,7,17,19 gacha, 21,31 raqam.


GPIOx_MODERni ro'yxatdan o'tkazish (GPIO port rejimi registri)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_1MODER1GP5 | GPIO_MODER_1MODER1GP1 | yoki GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Mikrokontroller portlari push-pull rejimiga o'tkazilishi kerak. Buning uchun GPIOx_OTYPER registrida (GPIO portining chiqish turi registrida) pinlar uchun mas'ul bo'lgan bitlarda 1 ni o'rnatishingiz kerak.


GPIOx_OTYPER (GPIO port chiqish turi registrini) ro‘yxatdan o‘tkazish

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_15); yoki GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Ikkala variant ham tanlangan pinlarga ta'sir qiladi. (GPIOA porti uchun 1-3.8-10.15 pinlari sozlangan). Agar siz barcha port pinlarini push-pull rejimiga o'tkazishingiz kerak bo'lsa, registrga quyidagi qiymatni yozishingiz mumkin:
GPIOA->OTYPER = 0x0;
Portga axborot chiqarish chastotasini belgilash uchun GPIOx_OSPEEDR (GPIO port chiqish tezligi registr) registridan foydalaniladi. Barcha registr bitlari OSPEEDRy guruhlariga birlashtirilgan, bu erda y mos keladigan portning pin raqamidir. Ushbu ishda chastota 400 kHz ga o'rnatilishi kerak, ya'ni. pin uchun mas'ul bo'lgan guruhda qiymatni 00 ga qo'ying.


GPIOx_OSPEEDR (GPIO portining chiqish tezligi registrini) ro'yxatdan o'tkazing

GPIOA->OSPEEDER &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDER15 |_GPIO_OSPEEDER_OSPEEDER15 | yoki GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Agar siz portga chiqish chastotasini barcha pinlar uchun 400 kHz ga o'rnatishingiz kerak bo'lsa, siz qiymatni registrga yozishingiz mumkin:
GPIOA->OSPEEDR = 0x0;
Tanlangan pinlar uchun tortib olinadigan va pastga tortiladigan rezistorlarni o'chirish uchun GPIOx_PUPDR registridan foydalaning (GPIO porti ochiladigan/pastga tortiladigan registr). Barcha registr bitlari PUPDRy guruhlariga guruhlangan, bu erda y mos keladigan portning pin raqamidir. PIN uchun mas'ul bo'lgan guruhdagi tortishish rezistorlarini o'chirish uchun qiymatni 00 ga qo'ying.


GPIOx_PUPDR ni ro'yxatdan o'tkazing (GPIO porti yuqoriga ko'tariladigan/pastga tortiladigan registr)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDRP1); yoki GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Agar siz barcha pinlar uchun tortishish rezistorlarini o'chirib qo'yishingiz kerak bo'lsa, siz qiymatni registrga yozishingiz mumkin:
GPIOA->PUPDR = 0x0;
Mikrokontroller portlari uchun muqobil funktsiyadan foydalanish uchun ikkita registr GPIOx_AFRL (GPIO muqobil funksiyasi past registri), past pinlar (0 dan 7 gacha) va GPIOx_AFRH (GPIO muqobil funksiyasi yuqori registr) uchun javob beradi, yuqori pinlar uchun javob beradi (8 dan 15 gacha). , ishlatiladi. Barcha registr bitlari AFRLy va AFRHy guruhlariga birlashtirilgan, bu erda y mos keladigan portning pin raqamidir. Portlar AF11 muqobil funksiyasidan foydalanish uchun sozlanishi kerak, buning uchun pin uchun mas'ul guruh 1011 ga o'rnatilishi kerak.


GPIOx_AFRL ni ro'yxatdan o'tkazish (GPIO muqobil funksiyasi past registr)


GPIOx_AFRH (GPIO muqobil funksiyasi yuqori registr) ni ro‘yxatdan o‘tkazish

Buning uchun registrlarga quyidagi qiymatlarni yozish kerak:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 - GPIOx_AFRL registriga qiymat yozadi.
AFR = 0xB0000BBB – GPIOx_AFRH registriga qiymat yozadi.

GPIOB va GPIOC portlarining mos keladigan pinlari uchun sozlamalar xuddi shu tarzda amalga oshiriladi.

LCD kontrollerni sozlash

LCD kontroller bilan ishlaganda, boshqa atrof-muhit qurilmalarida bo'lgani kabi, unga soat signali berilishi kerak. Soat signali quvvatni boshqarish tizimiga ham beriladi. Nazoratchi va quvvatni boshqarish tizimi soat uchun APB1 avtobusidan foydalanadi. RCC_APB1ENR (APB1 periferik soatni yoqish registri) registrida soatlashni yoqish uchun siz 9 va 28 bitlarda 1 ni o'rnatishingiz kerak.


RCC_APB1ENR (APB1 periferik soatni yoqish registrini) ro'yxatdan o'tkazish

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; yoki RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
LCD kontroller ishlashi uchun soat signallarining manbasini ko'rsatish kerak. Manba RCC_CSR registrida ko'rsatilgan. Odatiy bo'lib, ushbu registrga yozish o'chirilgan. RCC_CSR registridagi yozishdan himoyalanish PWR_CR quvvatni boshqarish registrida olib tashlanadi. RCC_CSR registri RTC va LCD kontrollerning soat manbalarini boshqaradi
RCC_CSR registriga yozish PWR_CR registrining 8-bitini 1 ga o'rnatish orqali yoqiladi.


PWR_CR (PWR quvvatni boshqarish registrini) ro'yxatdan o'tkazish

PWR->CR |= PWR_CR_DBP; yoki PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
LCD kontrollerning soat manbasini (va RTC soatini ham) o'zgartirish uchun avval RCC_CSR registrida (Boshqaruv/holat registrida) RTCRST bitini (1 dan 23 bitgacha o'rnatish) o'rnatish orqali soat manbasini qayta o'rnatishingiz kerak.


RCC_CSR (Boshqaruv/holat registrini) ro'yxatdan o'tkazish

RCC->CSR |= RCC_CSR_RTCRST;
Yoki “|=” operatori yordamida registrga qiymat yozish orqali, chunki tomonidan qiymat
standart registr 0x0 dan farq qiladi:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Yangi soat manbasini tanlash uchun RTCRST bitini olib tashlashingiz kerak:
RCC->CSR &= ~RCC_CSR_RTCRST; yoki RCC->CSR &= ~0x800000;
Taktli signal manbai sifatida tashqi past chastotali generator tanlangan. RCC_CSR registridagi generatorni yoqish uchun siz LSEON bitini o'rnatishingiz kerak (1 dan 8 bitgacha o'rnating):
RCC->CSR |= RCC_CSR_LSEON; yoki RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
Jeneratorni yoqqandan so'ng, uni barqarorlashtirish uchun biroz vaqt kerak bo'ladi. Generatorning tayyorligi RCC_CSR registridagi LSERDY bitining apparat sozlamalari orqali tekshiriladi:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Soat manbai sifatida tashqi past chastotali generatorni tanlash RCC_CSR registrini RTCSEL guruhida 01 ga o'rnatish orqali amalga oshiriladi:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; yoki RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
LCD kontrollerda siz o'rnatishingiz kerak kerakli rejim tarafkashlik. Buning uchun LCD_CR registrida (LCD boshqaruv registri) BIAS guruhida 10 qiymatini belgilashingiz kerak. Bitlarni o'rnatishdan oldin, bitlarni "axlat" dan tozalash kerak.


LCD_CR (LCD boshqaruv registrini) ro'yxatdan o'tkazish

Bitlarni tiklash:
LCD->CR &= ~LCD_CR_BIAS; yoki LCD->CR &= ~0x60;
Bitmask yordamida bias=1/3 rejimini tanlash:
LCD->CR |= LCD_CR_BIAS_1; yoki LCD->CR |= 0x40;
Rejim vazifasini = 1/4 o'rnating. Buning uchun biz avval barcha bitlarni qayta tiklaymiz:
LCD->CR &=~LCD_CR_DUTY; yoki LCD->CR &= ~0x1C;
LCD_CR registrining DUTY guruhiga 011 qiymatini o'rnating
rejim vazifasi = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; yoki LCD->CR |= 0xS;
Biz pinni qayta tayinlash funksiyasini faollashtiramiz. Buning uchun LCD_CR registrining 1 dan 7 bitgacha o'rnating:
LCD->CR |= LCD_CR_MUX_SEG; yoki LCD->CR |= 0x80;
Biz LCDCLK soat signalining chastota bo'linish koeffitsientlarining qiymatlarini o'rnatdik. Koeffitsient qiymatlari LCD_FCR registrida (LCD ramkani boshqarish registrida) o'rnatiladi. Birinchidan, biz ham barcha bitlarni tozalaymiz, keyin keraklilarini o'rnatamiz.


LCD_FCR (LCD ramkani boshqarish registrini) ro'yxatdan o'tkazish

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; yoki LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Soat signali chastotasining bo'linish koeffitsientlarining qiymatlari ck_ps = LCDCLK/16, ck_div = ck_ps/17 ga teng o'rnatiladi. Buning uchun 1 dan 24 gacha va 18 ta raqamni o'rnating:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Kerakli kontrast darajasini o'rnatish uchun siz CC guruhida 010 qiymatini belgilashingiz kerak, shuningdek, avval eski qiymatlardan bitlarni tozalashingiz kerak:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; yoki LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Barcha qiymatlarni o'rnatgandan so'ng, LCD_FCR registrini sinxronlashtirish uchun biroz vaqt kerak bo'ladi. Registrni sinxronlashtirish LCD_SR (LCD holat registr) registridagi apparatdagi FCRSF bitini o'rnatish orqali tekshiriladi.

LCD_SR (LCD holati registrini) ro'yxatdan o'tkazish

While(!(LCD->SR&LCD_SR_FCRSR));
LCD uchun kuchlanish manbai sifatida biz V lcd hosil qilish uchun ichki kuchaytiruvchi konvertorni tanlaymiz. Buning uchun LCD_CR registrining birinchi biti (LCD boshqaruv registri) 0 ga o'rnatiladi:
LCD->CR &= ~LCD_CR_VSEL; yoki LCD->CR &= ~0x2;
LCD kontrollerning ishlashi LCD_CR registrini (LCD boshqaruv registri) bitini 0 ga o'rnatish orqali yoqiladi:
LCD->CR |= LCD_CR_LCDEN; yoki LCD->CR |= 0x1;
Ichki kuchaytirgichni kuchlanish manbai sifatida o'rnatganingizdan so'ng, u tayyor bo'lguncha kutishingiz kerak. Tayyorlik LCD_SR registridagi RDY bitining apparat sozlamalari bilan tekshiriladi (LCD holat registri):
while(!(LCD->SR&LCD_SR_RDY));
LCD kontroller ishlashiga ruxsat berganingizdan so'ng, u tayyor bo'lguncha kutishingiz kerak. Tayyorlik LCD_SR registridagi (LCD holat registri) ENS bitining apparat sozlamalari bilan tekshiriladi:
while(!(LCD->SR&LCD_SR_ENS));

LCD displeyda tasvirni shakllantirish

Barcha indikator segmentlari har biri 24 ta segmentdan iborat COM0 - COM3 guruhlariga birlashtirilgan (SEG0-SEG23). Segmentlar haqidagi ma'lumotlar LCD kontroller xotirasining LCD_RAM ​​registrlarida saqlanadi. Simlarni ulash bosilgan elektron plata segment raqamlari LCD_RAM ​​registrlarining bit raqamlariga mos kelmaydi.

LCD displeyning birinchi raqamida 1 ni ko'rsatish uchun siz 1B, 1C segmentlarini yoritishingiz kerak. 1B segmenti COM0 guruhiga, 1C segmenti COM1 guruhiga tegishli. Shuning uchun ular haqidagi ma'lumotlar mos ravishda RAM (LCD_RAM0), RAM (LCD_RAM2) registrlariga yozilishi kerak. Segment 1B LCDSEG22 LCD chiqishi uchun javobgardir, bu haqda ma'lumot RAM registrining SEG40 bitida (LCD_RAM1) saqlanadi. Remapping funksiyasidan foydalanib, LCDSEG22 segmenti RAM registrining (LCD_RAM0) SEG28 bitiga tayinlanadi. 1C segmenti LCDSEG1 LCD chiqishi uchun javobgardir, bu haqda ma'lumot RAM registrining SEG1 bitida (LCD_RAM2) saqlanadi.

LCD->RAM = 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Xotira registrlariga qiymatlarni yozishdan oldin, LCD displeyga oldingi ma'lumotlarni uzatish tugallanganligini tekshirish kerak. Buning uchun LCD_SR (LCD status registr) registrining UDR (Update display so'rovi) biti tekshiriladi. LCD kontroller ikkita chiqish buferiga ega, ma'lumot birinchi buferga kiritiladi va ikkinchi buferdan LCD displeyga chiqariladi. UDR biti LCD_RAM ​​registrlarini yozishdan himoya qilib, birinchi buferdan ikkinchisiga o'tish paytida o'rnatiladi:
while(LCD->SR va LCD_SR_UDR);
LCD_RAM ​​registrlariga ma'lumot yozgandan so'ng, siz LCD_SR registrida (LCD holat registrida) UDR bitini o'rnatishingiz kerak (1 dan 2 bitgacha o'rnating):
LCD->SR |= LCD_SR_UDR; yoki LCD->SR |= 0x4; /*0x4 = 100 */

Ushbu qurilmani azoblash va o'rganish uchun. Aytilgan gap otilgan o'q. Sharf yig'ildi va biz ketdik. Oh Ha! Suhbatimiz mavzusi ikki MKni solishtirishga aylandi. Yuqoridagisi ATmega328 ga qarshi. Nima uchun aynan ular? Ikkala MK ham TQFP-32 paketida. (To'g'ri, ATmega328 ham DIP paketida keladi)
Endi ularning ichki tomonlarini batafsil ko'rib chiqaylik. Ko'proq tushunish uchun men barcha kerakli ma'lumotlarni bitta jadvalda to'pladim.

Variantlar ATmega328 STM32F030K6T6
Bit chuqurligi 8 bit 32 bit
FLASH 32kb 32kb
SRAM 1kb 4kb
EEPROM 512b -
Taymer 8 bit 2 dona -
Taymer 16 bit 1 ta kompyuter 16 dona
PWM 3 ta kanal 6 ta kanal
USART 1 ta kompyuter 1 ta kompyuter
SPI 1 ta kompyuter 1 ta kompyuter
I2C 1 dona (TWI) 1 ta kompyuter
ADC 8 kanal 10 bit 16 kanal 12 bit
Oziqlanish 2,7 - 5,5 2,4 - 3,6
Tezlik 0 - 16 MGts 48 MGts tashqi 4 - 32 MGts
Narxi 160 - 170 rub. 80 - 140 rub.
Jadvaldan ko'rinib turibdiki, STM32 AVRga qaraganda ancha qiziqarli va boyroq. Haqiqatan ham bitta kichik narsa bor. STM32-da EEPROM yo'q, lekin u AVR-ni butunlay o'ldiradigan DMA-ga ega. To'g'ri, AVR Arduino va oson dasturlash bilan faxrlanadi. Men bahslashmayman, lekin STM32-da STM32Cube mavjud bo'lib, u IAR uchun kod ishlab chiqaradi va tashqi qurilmalarni o'rnatishning butun tartibini bajaradi. Va AVR tobutidagi oxirgi mix RTOS hisoblanadi. Ha, siz uni AVR-ga ham o'rnatishingiz mumkin, lekin siz buni aniqlab olishingiz kerak, lekin STM32-da biz "FREERTOS" katagiga belgi qo'yamiz va hammasi shu. Tizimning o'zi kerak bo'lgan hamma narsani bajaradi va biz qilishimiz kerak bo'lgan narsa iplarni yaratish va ularga kod yozishdir. Xo'sh, bu faqat boshlanuvchilar uchun. Aslida, u erda hamma narsa biroz murakkabroq. Xulosa qilib aytganda, menga STM32 yoqadi va nihoyat sizni ushbu platformaga jalb qilish uchun Arduino-ni stol tortmasiga tashlab, boshidan oxirigacha doska yarataman va u bilan qanday ishlashni ko'rsataman. Oh, unutdim. Barcha STM32-larda SWD tuzatuvchisi mavjud. Bular uchta SWDIO, SWCLK, GND simlari va siz Proteus-dagi ATmega328 kabi emas, balki to'g'ridan-to'g'ri apparatda kod qatorlaridan o'tishingiz mumkin. Buning uchun sizga ST-LINK universal dasturchisi kerak bo'ladi. Agar siz Discovery platasini yoki alohida dasturchi sotib olsangiz, undan foydalanish mumkin. Va endi so'zdan amalga.
Sxema. Kattaroq
Men ushbu platani AVR uchun disk raskadrovka taxtasi uchun modul sifatida yaratdim. Ammo siz uni o'zingizning xohishingiz bilan taxtani tarqatish orqali takrorlashingiz mumkin (men maqolaning oxirida DipTrace uchun loyihani joylashtiraman). Diagrammada nima bor. Va diagrammada AVR uchun oddiy jabduqlar ko'rsatilgan. Ikkita 20p kondansatkichli 8 MGts kvarts. Xuddi AVRda bo'lgani kabi, ADC qo'llab-quvvatlash uchun quvvat manbai sxemasi yig'ilgan. AVR kabi sxemani qayta o'rnating. Yagona farq BOOT sxemasi. AVR-lardan farqli o'laroq, barcha STM32-larning bortida apparat yuklash moslamasi mavjud. Odatiy bo'lib, u USART ga ulangan. Ya'ni, agar siz BOOT0 pinini quvvat manbaiga bossangiz va MK-ni qayta ishga tushirsangiz, Flash Loader Demonstrator dasturidan foydalanib, MK-ni dasturchisiz o'chirib qo'yishingiz mumkin. Bu xususiyat Agar sizda allaqachon tayyor va ishlaydigan qurilmangiz bo'lsa va proshivkani yangilashingiz kerak bo'lsa, sizga faqat USB USART adapteri kerak bo'ladi. Ko'p odamlar STM32 bilan aralashishni xohlamaydilar, chunki quvvat manbai 3,6 voltdan oshmaydi. Bema'nilik. Agar siz pin stoliga qarasangiz, barcha oyoqlar oqibatlarsiz 5 volt olishi mumkinligini sezasiz. Keling, davom etaylik.

Va u taxtada o'rnatilgan ko'rinadi.

Endi biz ST-LINK-GA dasturchini SWD ulagichiga ulaymiz.

Endi hamma narsa tayyor, so'nggi versiyani ST veb-saytidan yuklab oling (sahifaning eng pastki qismidagi havola). O'rnatish va ishga tushirish.

Yangi loyiha-ni bosing. Va paydo bo'lgan oynada biz kontrollerimizni topamiz. OK tugmasini bosing.

Bir oz o'ylangandan keyin. Dastur shunday oynani ko'rsatadi.

Men nima va nima uchun tasvirlamayman, chunki bu alohida maqolaning mavzusi. Endi, masalan, men sizga ko'rsatgan narsani qiling. Nima qilamiz. Biz ishga tushiramiz operatsion tizim va bitta ipda biz LEDni miltillaymiz. To'pdan bir xil "Heloy Word".))) Buning uchun chap oynada "FREERTOS" yozuvi yonidagi ortiqcha belgini bosing va ochiladigan ro'yxatga belgi qo'ying.

Bundan tashqari, tashqi kvarts tanlanishi bilan, boshqaruvchining o'ng tomonida uni osib qo'yishingiz kerak bo'lgan oyoqlar yashil rangda ta'kidlanadi. Siz qilishingiz kerak bo'lgan keyingi narsa - bu LED osilgan oyoqni tanlashdir. Men B portini va 0 pinni tanladim. Va men rake topdim. Qo'rquvdan nima uchunligini bilmayman, birinchi to'rtta pinning chiqish taroqini teskari aylantirdim. Shuning uchun B portidagi chalkashlik. Bu muammo faqat mening platamga ta'sir qiladi. Ammo hech narsa, bu MKning ishlashiga to'sqinlik qilmadi. Shunday qilib, pinni sozlang. Haqiqat shundaki, STM bilan barcha pinlar bir nechta qiymatlarni olishi mumkin, ammo agar siz diskret kirish/chiqishga tegsangiz, chiqish uchun uchta variant bo'lishi mumkin. Havodagi chiqish, quvvat manbai plyusga tortib olish bilan chiqish, umumiy avtobusga tortish bilan chiqish. Odatiy bo'lib, STM32CubeMX oyog'ini havoda osib qo'yadi. Mayli, bo'lsin, biz faqat ishni tekshirishimiz va STM32 kuchini namoyish qilishimiz kerak. Oyoqni sozlash uchun siz sichqonchaning chap tugmachasini bosishingiz va paydo bo'lgan oynada GPIO_Output-ni tanlashingiz kerak. Agar MK juda kichik bo'lsa, siz g'ildirakni burishingiz va uni kattalashtirishingiz mumkin.)))

Keyingi qadam MK soatini sozlashdir. Gap shundaki, STM32 bu masalada juda noaniq. AVR dan farqli o'laroq, STM32 4 dan 32 MGts gacha chastotali kirishda kvartsga ega va avtobuslarda uni 48 MGts ga oshirib yuborish mumkin. MK ichida juda murakkab soat tizimi mavjud, ammo STM32CubeMX yana yordamimizga keladi. Soat konfiguratsiyasi yorlig'iga o'ting va uni quyidagi rasmdagi kabi sozlang.

Ana xolos. Yuqoridagi tishli belgini bosing.

Bunday oyna paydo bo'ladi.

Va bu erda men aytishni unutibman. O'zingiz uchun IARni yuklab oling va o'rnating. Uni rasmiylardan yuklab olish mumkin, lekin kod miqdori kamaytirilishi yoki torrent orqali topish mumkin. Yoki qo'shimcha pulingiz ko'p bo'lsa, litsenziya sotib olishingiz mumkin. O'ylaymanki, ko'pchilik CodeVisionAVR bilan yo'ldan boradi. Umuman olganda, men buni sizning ixtiyoringizga qoldiraman. Menda 7.40 versiyasi bor. Keling, kubga qaytaylik. Oynada loyihani nomlang, lekin faqat lotin tilida, IAR yo'llardagi rus harflarini yoqtirmaydi. Va loyiha qayerda saqlanishini belgilang. IDE oynasida siz EWARM-ni tanlashingiz kerak (va u sukut bo'yicha). OK tugmasini bosing. Dastur o'ylaydi va keyin shunday oynani ko'rsatadi. Bla bla bla. Umuman olganda, loyihani ochish tugmasini bosing (tankda bo'lganlar uchun o'rta tugma).

Oyna yo'qoladi va uning o'rniga IAR va bizning loyihamiz ishga tushadi. Chapda Application->User-ga o'ting va main.c-ni ishga tushiring. Ushbu kodlar to'plami STM32CubeMX biz uchun yaratgan narsadir.

Va endi bu dahshat bilan nima qilish kerak? Ammo buning uchun bizga bir qator maqolalar kerak))) Va endi biz ushbu kod qismini topamiz.

Bu bizning yagona oqimimiz. Tanada loop uchun(;;) biz yagona osDelay(1); funktsiyasini o'chirib tashlaymiz va o'rniga ushbu kodni yozamiz. HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
osDelay (500);
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
osDelay (500);

Ajoyib. Endi yuqori o'ng burchakdagi yashil o'q bilan tugmani bosing va kompilyatsiya va yuklab olishni kuting.

Agar hamma narsa to'g'ri va xatosiz bo'lsa, dastur butun loyihani yig'adi, kerakli hamma narsani yaratadi va proshivkani MK-ga yuklaydi. Shundan so'ng, u disk raskadrovka rejimiga o'tadi. Mana u. AVR-odamning orzusi. Agar sizda undan foydalanishni cheklab bo'lmaydigan istak bo'lsa, unda siz faqat apparatga, satrga bosqichma-bosqich o'tishingiz mumkin. Va agar siz dastur qanday ishlashini ko'rishni istasangiz, yuqori chap burchakdagi xochni bosing va LEDning miltillashidan zavqlaning.

Ana xolos. ChipResistor do'konida mikrokontrollerlarni eng arzon narxda sotib olish mumkin, har bir dona 78 rubl. Xo'sh, agar siz arzonroq qilishni istasangiz, kichik ulgurji ham bor. 35 donadan allaqachon 50 rubl.
DipTrace uchun loyiha.
Va, albatta, video.


mehmon 31.12.15 10:35

Yaqinda men ATMEGA16-da chastota o'lchagich va 74 mantiqda tashqi 8-bitli hisoblagich yasamoqchi edim, lekin bu etarli darajada tez emas edi.Men assemblerda yozishni uddalay olmayapman; tashqi hisoblagichni 16 bit bilan o'rash juda og'riqdir. ass.AVR bu o'tgan asr, arzon kontroller emas.Muallifni qo'llab-quvvatlayman, AVR - Bosqich o'tdi, men ham stm32f100 chipi plus CP2103 USB adapter chipini sotib oldim, tez orada hamma AVRdan voz kechadi.

Aleksey 31.12.15 12:26

Men qo'shilmayman. Shunga qaramay, Arduino hali ham rivojlanmoqda va ko'pchilik unga bog'langan, ikkinchisi esa, o'z navbatida, AVRda ishlaydi. STMga o'tish keyingi bosqichga o'tishga o'xshaydi. Shunday qilib aytganda, bolalar bog'chasidan maktabgacha.

ANONIM 12.02.16 10:44

AVR va STM32 bir-biri bilan raqobatlashmaydigan protsessorlardir. Sizning plastinkangizda eng muhim parametr mavjud emas - bu joriy iste'mol !! Va ularga qarab, siz ko'z yosh to'kishingiz mumkin. Atmega 328 - – Faol rejim: 0,2 mA – Quvvatni o‘chirish rejimi: 0,1 mkA – Quvvatni tejash rejimi: 0,75 mkA (jumladan, 32 kHz RTC) STM32F030K6T6 48 MGts - Faol rejim: tashqi qurilmalar yoniq 23,3 mkA to‘xtash vaqti: 23,3 mkA. 0,048 mA STM32 elektr energiyasini shafqatsiz iste'mol qiladi - taxminan, AVR dan 100 baravar ko'p. Siz STM32 qurilmasini batareyadan quvvatlay olmaysiz. Ammo AVRlar oylar davomida ishlaydi. Shuning uchun AVRdan voz kechish qiyin. Hammaga omad.

Aleksey 12.02.16 10:54

Va hech kim AVRdan voz kechishni taklif qilmayapti. Men shunchaki atrofdagi farqni ko'rsatyapman. Men hali ham AVR kutubxonasini saqlayman va hali ham asosiy MCU sifatida ATMega8A ga egaman.

Sergey 24.02.16 18:02

Menimcha, yangi STM32 ni iste'fodagi AVR bilan solishtirish qandaydir g'alati. Agar siz STM32 ni ATMEL kontrollerlari bilan solishtirmoqchi bo'lsangiz, ularni AVR bilan emas, balki ATSAM oilasi bilan solishtiring.

Andrey 24.02.16 18:06

Bu pensioner kim? AVR tirik va kim biladi, qancha vaqt yashashda davom etadi. Va stolga qarab, mening fikrimcha, taqqoslash arxitekturada emas, balki atrof-muhitda ko'proq.

Aleksey 24.02.16 19:04

Xo'sh, u boshlanadi. Endi AMD va Intel haqida gaplashamiz.

Sergey 24.02.16 22:02

Hubda bitta "mutaxassis" AVR standart LCDni ulash uchun parallel avtobusga ega emasligini yozdi, ammo STM32 ...

Aleksey 24.02.16 22:36

Standart LCD nimani anglatadi? Bu FSMC haqidami? Demak, bu nafaqat displey uchun, balki xotira uchun ham. Shunchaki parallel avtobus. AVR ham mavjud, masalan, Mega8515. SRAM unga mandal registr orqali ulanishi mumkin.

Sergets 25.02.16 06:24

Aleksey, men nima haqida gapiryapman?! Siz mening xabarlarimning ma'nosini tushunishga harakat qilmayotganga o'xshaysiz.

Aleksey 25.02.16 09:38

Xo'sh, turli kompaniyalarning ikkita bir xil mikrokontrollerlarini solishtirishning nima keragi bor? Ikkalasi ham ARM yadrosida. Agar siz haqiqatan ham tanlagan bo'lsangiz, unda siz haqiqatan ham AVRni STM8 bilan taqqoslashingiz kerak. Keyin men atrof-muhitning yaqinligiga, shakl omiliga va narxga yopishib oldim. Va faqat boshqa arxitektura.

Adlan 03.06.16 17:40

Salom. Iltimos, kim yordam bera oladi. Oʻrnatilgan oxirgi versiya Kuba 4.15, F1 kutubxonalari 1.4.0. EWARM-da yaratilgan bo'sh loyiha tuzilmaydi - yuzdan ortiq xatoliklar mavjud. Bu nima bo'lishi mumkin? rahmat [elektron pochta himoyalangan]

Aleksey 16.06.03 20:48

Adlan, siz qilishingiz kerak bo'lgan birinchi narsa - kompilyatsiya qilinmaydigan loyihani yuklash.

Hujjat 18.07.16 21:51

"To'g'ri, AVR Arduino va oddiy dasturlash bilan faxrlanadi." U nima bilan maqtana oladi? ;D

Aleksey 19.07.16 11:41

Bu ahmoqona taqqoslash. Birinchidan, STMda Arduinoning nukleo deb ataladigan analogi mavjud. Dasturlar bevosita brauzer orqali onlayn IDE da yoziladi. Ammo agar toshning afzalliklari shaxsan bo'lsa, unda. Asosiy ish chastotasi 72 MGts, AVR bunday tezlikni orzu ham qila olmadi. Albatta, agar siz LEDni miltillatsangiz, unda hech qanday farq yo'q, lekin agar siz o'qni va bir qator tashqi qurilmalarni ishga tushirsangiz, AVR o'chib ketadi. Bit sig'imi, 32 8 dan uzoqdir. STM dagi tashqi qurilmalarda 3 ta I2C, 3 SPI, 6 UART, USB, CAN, Ethernet bo'lishi mumkin. Deyarli hamma narsa remapping, ya'ni mk ning boshqa oyoqlariga o'tkazish qobiliyatiga ega. DMA ham mavjud, bu tashqi qurilmalar bilan ishlash uchun mustaqil protsessor. Shunday qilib, AVR uzilishlari asabiy ravishda chekka chekadi. uchun apparat SDIO mavjud to'liq huquqli ish CD-kartalar bilan, va AVR da qo'ltiq provayderi emas. Umuman olganda, u erda juda ko'p narsa bor, lekin AVR bog'idagi eng katta tosh shovqinga qarshi immunitetdir. Elektr dvigatelining yaqinida ishlaydigan simi bilan AVRni nokaut qilish - bu aql bovar qilmaydigan narsa, ammo STMni sinab ko'rish kerak. Shuning uchun men Arduino bilan istehzoli bo'lishni tavsiya etmayman.

mehmon 11.08.16 23:27

MICROCHIP so'rilgan AVR!))))))))))))

Aleksey 12.08.16 08:35

Besh yil oldin bo'lgani kabi yangiliklar bilan kechikdik.

Vladimir 17.08.16 22:56

Aleksey! 2016 yil yanvar oyida Microchip Atmelni 3,56 milliard dollarga sotib oldi.Nima 5 yil?

Aleksey 18.08.16 10:30

Bu de-yure, lekin de-fakto 2008 yildan beri davom etmoqda. Shunday qilib, men 5 yil emas, balki 8 yil oldin xato qildim.))))

Vladimir 18.08.16 23:53

Aleksey! Men stm32 ga o'tishni boshladim! Avtonom rejimda iste'molga kelsak, u hamma narsani soatlab qo'ymaslikni maslahat beradi, keyin iste'mol oqimi kamayadi.

Oleg 11.09.16 22:31

STM ma'lumotlar jadvalida men AVR-dagi kabi CLK tizim soati iste'moli grafiklarini topmadim - va u erda joylashgan plitalarga ko'ra, STM32 oddiy rejimda ham, Bo'sh rejimda ham to'g'ridan-to'g'ri yo'qotadi. Ha, va bu STM32 ning 72 MGts chastotasi yo'q - atigi 48 maks, bu hammasi, shuning uchun ham 32 bitli 8 beatnik AVR bilan - bu yaxshiroq bo'lib chiqdi va aytmoqchi, ishlab chiqaruvchi ma'lumotlar varag'ida qancha ekanligini yozmagan. STM32 mashina siklida uning soat sikllari bor, shuning uchun agar u AVR uchun 1 ga qarshi 2 soat sikli bo'lib chiqsa, 48/2 = 24 real MGts deb hisoblang - AVR uchun 20 MGts bilan deyarli bir xil. Demak, savol tug'iladi - siz aytayotgan STM32 mo''jizasi qayerda?

ANONIM 09.11.16 23:03
Aleksey 10.11.16 00:23

Men bahslashishni ham xohlamayman. Qaysi biri yaxshiroq Intel yoki AMD? Yoki "Jiguli" yoki "Volga"? STM apparat USB, CAN, Ethernet, SDIO va AVR faqat orzu qilishi mumkin bo'lgan boshqa tashqi qurilmalarga ega. Oxir-oqibat, DMA to'g'ridan-to'g'ri xotiraga ega bo'lgan mustaqil protsessor sifatida mavjud bo'lib, uning oldida barcha AVR chekkada asabiy ravishda chekishni to'xtatadi. Masalan, birinchi seriyada 3 ta UART, 2 ta SPI, 3 ta I2C bor. Portlarning qayta ko'rinishi mavjud va siz taxtani qanday qismlarga ajratish haqida tashvishlanishingiz shart emas. Agar siz AVR bilan ishlashni yaxshi ko'rsangiz, kim sizni bezovta qilsa, ishlang. Bugungi kunga kelib, men kichik loyihalar uchun mega sakkizinchi qismini qilaman va shikoyat qilmayman. Ha, AVR-ni starterning yoniga qo'ying va uning shovqin bilan qanday qilib boshini yiqitganini tomosha qiling. AVR EMI himoyasiga ega emas. Shuning uchun, PIKlar har doim avtomobil signallariga o'rnatilgan, chunki AVR bunday sharoitda o'ladi. Nima uchun bahslashasiz, bu o'lik raqam.

Kornet 27.11.16 21:22

Aytgancha, STM32 da Arduino allaqachon mavjud. Bu Amperka va JSdagi barcha turdagi Espruino) Bundan tashqari, agar mikrochip Atmel tomonidan olingan bo'lsa, ularni burab qo'ying.

Aleksey 27.11.16 21:44

Espruino nomi o'sha paytdagi eng mashhur hobbi platformasi bo'lgan Arduinoga parodiya qiladi, ammo Espruino klassikaga mos kelmaydi. Arduino Uno na mexanik, na dasturiy jihatdan.(Amperkadan iqtibos)
Menda Nucleo taxtasi ham bor va uning Arduino bilan hech qanday aloqasi yo'q, taxtaning geometriyasidan tashqari)))
Umuman olganda, men joriy vazifaga mos keladigan MK dan foydalanaman.

Andrey 20.12.16 22:50

Kim ortiqcha to'lashni yaxshi ko'radi: bunga arziydi attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ taymer -1/8bit_ taymer -1 =2.1$ va boshqalar stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT o'lik vaqtni boshqarish taymeri ( -kanal PWM rejimi ) -4/ADC-2/72MHz CPU/=2,3$.Menimcha, AVR yordamida RLC sxemasi uchun impedans o'lchagichni yasash deyarli mumkin emas yoki 10ta tosh bor.Lekin siz qila olasiz. uni STM va FFT bilan (DMA yordam beradi).Men uni qandaydir tarzda Mega10 (aniqlik 1 gerts) da chastota o'lchagichni yasashga harakat qildim - bu shunchaki tez emas edi (yoki o'zgartirish registriga ega tashqi 32 bitli hisoblagichni o'rnating - bu erda o'lchamlar Men bir yil oldin AVR dan voz kechdim, AVR badavlat odamlar uchundir.

Andrey 20.12.16 22:53

ANONYMOUS yozgan - "Va bu erda rus tilidagi STM32 ta'rifidan yana bir iqtibos - "...Bilan
moment
qabul qilish
xalaqit beradi
oldin
boshlandi
ijro
birinchi
jamoalar
ishlov beruvchi
xalaqit beradi
sarflanadi
faqat
o'n ikki
sikllar
soat
signal"

Bu to'g'ri, lekin ikkita 32 bitli raqamni avrga ko'paytiring - aniq 8-10 soat tsikli!

Aleksey 20.12.16 23:31

Ha bu halivar boshlanganidan afsusdaman.))))

Aleksandr 21.12.16 00:27

Komentariyalarni o'qib esladim.
Sandboxda ikki bola
Bitta duduka!
Ikkinchidan, signal!
Birinchidan, Duduka! (intonatsiya yanada xavfli)
Ikkinchidan, BIBIKA! (Bundan ham ifodali intonatsiya bilan)
Birinchi DUDUKA! (Allaqachon qichqirmoqda)
Ikkinchi BIBIKA!!! (Deyarli yig'layapti)
....
Bu jang tugadi, ikkalasi ham turib yig'layapti, biri ikkinchisidan balandroq.)))

10.02.17 01:43

Kechiktirmasdan loop qilsangiz, u qanday chastota bo'ladi?
esa (1)
{
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}

Aleksey 10.02.17 10:07

APB avtobusidagi biri

Igor 17.06.08 22:33

Shunday qilib, keling, noutbuklarni zudlik bilan o'rnatilgan tizimlarga integratsiya qilaylik, ular STM dan yuzlab marta yaxshiroq va u erda juda ko'p tashqi qurilmalar mavjud, allaqachon Wi-Fi va bluetooth mavjud va hatto dasturchilar kerak emas, darhol monitor mavjud. dastur yozish va darhol ishga tushirish uchun klaviatura va dasturchilar va tuzatuvchilar kerak emas.
Ba'zan yarim metr chuqurlikdagi bir nechta teshik qazish uchun dachangizda shaxsiy foydalanish uchun ekskavator sotib olishga o'xshaydi.
STM ni termostatga, soatga, taroziga qo'yish, menimcha, bu normal emas. Aytgancha, ha, nima haqida o'zgarmas xotira, shuning uchun men termostatni qilaman, haroratni o'rnataman, keyin chiroqlar o'chadi, shuning uchun nima, sozlamalar yo'qoladi. Ammo keyingi ishlash uchun bir marta sozlanishi kerak bo'lgan o'rnatilgan tizimlarda qiymatlar abadiy saqlanishi kerak

Aleksey 09.06.17 08:25

Xo'sh, masalan, STM32F030F4P6 chip-dip narxi 48 rubl, ATtiny2313 to'g'ridan-to'g'ri analogi esa 98 rublni tashkil qiladi. Menimcha, ularning har biri termostatni qurish uchun etarli bo'ladi. Va STM uchun xotira kompensatsiyasi har qanday harorat sensorida bo'lishi mumkin. Ha, hech bo'lmaganda bir xil DS18B20 da. Noutbuklarga kelsak, har qanday to'lovni qabul qilish terminalida operatsion tizim va monitor o'rnatilgan shaxsiy kompyuter mavjud. Shunday qilib, hatto bunday tizimlar ham mavjud. MK ni tanlashda, birinchi navbatda, arzonroq bo'lganini tanlang. Agar bu sevimli mashg'ulot bo'lsa, lehim bilan bezovta qilmaslik uchun Arduino sotib olishingiz mumkin va tizimni ishlab chiqarishga qo'yish va yuzlab ishlab chiqarish rejalashtirilganda, har bir tiyin hisobga olinadi. Va uning narxi 48 bo'lganida, MK uchun 50 rublni ortiqcha to'lash - bu arzon hashamatdir.

Ruslan 17.06.17 21:46

Aleksey, nima uchun IAR dasturlash muhitini tanladingiz?
Yangi boshlanuvchilar uchun qaysi muhitni tanlash yaxshiroq (shuning uchun ko'plab maslahatlar mavjud Atmel studiyasi)?

Aleksey 17.06.17 22:07
Ruslan 17.06.17 22:56
Agar men "yomon" ko'rinmagan bo'lsam, men buni qanday qilishni ko'rishim yoki o'qishim mumkin bo'lgan havolani bering!
Yaxshisi, video tayyorlang, menimcha, ko'plab yangi boshlanuvchilar (va nafaqat) uni tomosha qilishga qiziqishadi!
Oldindan rahmat!
Aleksey 05.08.17 10:19
Ruslan 22.11.17 12:17

Men buni nazarda tutgan edim https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 daqiqa!!!

Ruslan 22.11.17 12:18

Aleksey, iltimos, menga "enum" ro'yxatlari bilan qanday ishlashni ayting, aks holda bunday ma'lumot hech qaerda yo'q va sizning videolaringizda "Kichiklar uchun C" ham yo'q, lekin menga juda kerak!
Men AVRlar bilan o'ynaganimda, ro'yxatga olish kabi mo''jizani hech qachon ko'rmaganman, lekin hozir men STMlarga qiziqaman va ular juda ko'p! Va ular bilan qanday ishlash haqida hech qanday ma'lumot yo'q!
Mana haqiqiy koddan misol:


StatusCode MIFARE_Read(bayt blokAddr, bayt * bufer, bayt * buferSize);

StatusCode ro'yxati qayerda:


enum StatusCode: bayt (
STATUS_OK , // Muvaffaqiyatli
STATUS_ERROR , // Muloqotda xato
STATUS_COLLISION , // To'qnashuv aniqlandi
STATUS_TIMEOUT , // Muloqotda vaqt tugashi.
STATUS_NO_ROOM , // Bufer yetarlicha katta emas.
STATUS_INTERNAL_ERROR , // Ichki xato kodda. Bunday bo'lmasligi kerak ;-)
STATUS_INVALID , // Yaroqsiz argument.
STATUS_CRC_WRONG , // CRC_A mos kelmaydi
STATUS_MIFARE_NACK = 0xff // MIFARE PICC NAK bilan javob berdi.
};

Bu Arduino kutubxonasidan (C++), lekin Keil unga qasam ichadi!
Ro'yxatga olish funktsiyasining qaytishini qanday to'g'ri yozish kerak?

Ruslan 22.11.17 12:29

Va sanab bo'lgan funktsiyadagi argumentlardan birini qanday e'lon qilish kerak:


void PCD_WriteRegister(PCD_Register reg, bayt qiymati);

PCD_Register ro'yxati qaerda:


enum PCD_Register: bayt (
// 0-sahifa: Buyruq va holat
// 0x00 // kelajakda foydalanish uchun ajratilgan
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
...
};

Va reg, men tushunganimdek, bu ro'yxatga olish, lekin u kodning biron bir joyida e'lon qilinmagan va men qaerdan kelganini tushunmayapman!
Men Internetda juda ko'p sahifalarni o'qib chiqdim va bu ro'yxatlarni ta'riflar bilan almashtirish mumkinligi haqida ma'lumot topdim, lekin men hali ham ular bilan qanday ishlashni bilmoqchi edim !!!

Ruslan 22.11.17 12:35

Javobingizni kutaman!
Balki ular bilan qanday ishlash kerakligi haqida video tayyorlarsiz, boshqalarga ham foydali bo'lsin, menimcha video juda foydali bo'ladi, chunki bunday videolar yo'q (hech bo'lmaganda men ularni topa olmadim)!

Dmitriy 28.11.17 22:02

"oddiy dasturlash"

Dasturlash boshqaruvchilari uchun qiziqarli organ. Umuman olganda, 32-bitni 8-bit bilan qanday solishtirish mumkinligi aniq emas. Zarporojets bilan Porsche Cayenne kabi.

Aleksey 29.11.17 10:24

Siz taqqoslashingiz mumkin, mumkin. Shuni hisobga olish kerakki, bu taqqoslashda Porsche Zaporojetsnikidan arzonroq. Urologiyaga kelsak, u yanada achchiqroq. Shuning uchun men uni tuzatmayman.

Konstantin 23.12.17 00:06

Ruslan, men qanday qilib qidirayotganingizni va hech narsa topa olmayotganingizni tushunmayapman (aftidan, siz qidirmayapsiz). Bular C tilining asosiy asoslari (nafaqat MK uchun, balki kompyuterlar uchun ham). Kernighan va Ritchie kitobini o'qing, u erda barcha C mukammal tasvirlangan.
Va hech kim sizning savollaringizga javob bermaydi, bu oddiy narsa.

ANONIM 11.02.18 16:27

Nima uchun 32-bitli ST MKni 8-bitli Atmel bilan solishtirasiz? Aqlsiz taqqoslash. Bu 32-bitli Atmel AT91SAM-ni 8-bitli STM8 bilan solishtirishga teng, hatto Atmel-da 32 ta kuchliroq zaryadsizlantiruvchilar borligini hisobga olsak ham.

Aleksey 13.02.18 12:18

Chunki maqola yozilayotgan vaqtda 8 diapazonli STlar sotuvga chiqarilmagan va mega va STM32 narxi bir xil.

STM32_Dev 19.06.19 13:59

Xo'sh, AVR xuddi shu narsani qilish uchun 4-5 soat tsiklini oladi!!! Shunchaki. Va yana ma'lum bo'lishicha, AVR STM32 dan yaxshiroq ishlab chiqarilgan, uning shishgan soati va STM32 ning ichida AVR kabi EEPROM yo'q.

16 MGts chastotada AVR soati - 1/16000000 = 0,0000000625 s = 62,5 ns * 5 soat = 312,5 ns.
48 MGts chastotada ARM soati - 1/48000000 = 0,0000000208 s = 20,8 ns * 12 soat = 250 ns.

Aftidan, atmega muzeyi o'zining 5 soat tsiklini STM32 ning 12 soat sikliga qaraganda uzunroq hisoblaydi)))

STM32 da eprom yo'qmi? Albatta? STM32L152 - 8kB eprom! Atmega haqida nima deyish mumkin? 512 bayt? Oh juda ko'p !!! U yerda nima yozishni ham bilmayman. O'ylab ko'raylik... mmm... Har biri 4 baytdan iborat 16 ta o'zgaruvchi)) Bu shunchaki kontrollerlar orasida momaqaldiroq))

SIM31 30.06.19 19:29

Iste'mol nuqtai nazaridan siz ham solishtirishingiz mumkin, yangi atmega va attiny juda tejamkor.
Va hamma narsaning o'z foydasi bor. Agar sizga quvvat kerak bo'lsa, Raspbery Pi 4 ni oling va xavotirlanmang, Pythonda yanada ko'proq imkoniyatlar mavjud, hatto to'liq veb-serverni o'rnating, hatto Quake 3D-ni ishga tushiring.
Agar siz ma'lumotlar oqimini qayta ishlashingiz kerak bo'lsa, iltimos, bor ("Mars Rover" "Mars Rover 2" loyihasiga qarang)
Muallifning ko'plab ijobiy tomonlari bor, ammo Arduina barcha tiriklardan ko'ra tirikroq ekanligi hamma narsa ham oddiy emasligini anglatadi.


Ko'p yillar davomida radio havaskorlar PIC va AVR oilalarining sakkiz bitli mikrokontrolörlaridan foydalanishadi. Ular arzon narxlari, batafsil hujjatlar, dasturlash qulayligi va o'rnatish qulayligi tufayli mashhurdir. Biroq, ko'pincha bunday mikrokontrollerning kuchi vazifani hal qilish uchun etarli bo'lmagan holatlar mavjud. Eng oddiy misol - chastota o'lchagich yoki mikrokontrolördagi signal generatori, bu erda maksimal o'lchangan yoki hosil bo'lgan chastota to'g'ridan-to'g'ri ma'lumotlarni qayta ishlash yoki chiqarish tezligiga bog'liq.

Tezlikdan tashqari, sakkiz bitli mikrokontrollerlar boshqa cheklovlarga ega, masalan, ko'pgina AVR modellarida faqat bitta apparat seriyali port mavjud, bu tashqi qurilmadan ma'lumot olishga va bir vaqtning o'zida uni qayta ishlash natijalarini iste'molchiga yuborishga imkon bermaydi. Tezlik va xotiraning katta resurslarini talab qiladigan grafik ko'rsatkichda ma'lumotni ko'rsatish kabi "banal" narsalar haqida gapirmaslik kerak. Bir qator bunday cheklovlarni tahlil qilgandan so'ng, muallif STM32 oilasining mikrokontrolörlariga o'tish g'oyasini ilgari surdi.

Misol uchun, bir xil narx toifasidagi ikkita mikrokontrolderni ko'rib chiqing - STM32F103C6 va ATmega328P.

1-jadval

Mikrokontroller turi

Protsessor hajmi

Qo'rg'oshin balandligi, mm

Soat chastotasi, MGts

FLASH xotira hajmi. KB

Operativ xotira hajmi, KB

USART raqami

16 bitli taymerlar soni

I/U qatorlari soni

Taxminiy narx, rub.

Ularning qiyosiy parametrlari jadvalda keltirilgan. 1. Taqqoslash natijalari hatto biroz hayratlanarli. 32-bitli mikrokontroller sakkiz bitli mikrokontrollerdan deyarli barcha ko'rsatkichlar bo'yicha nafaqat kuchliroq, balki u ham arzonroq. Albatta, uyda 0,5 mm pinli mikrokontrollerni lehimlash unchalik oson emas. Yaxshiyamki, aksariyat hollarda bu talab qilinmaydi - bozorda turli xil ilovalar uchun etarli bo'lgan STM32 oilaviy mikrokontrollerlari bilan ishlab chiqish platalarining ko'p turlari mavjud. Keling, ularni batafsil ko'rib chiqaylik.

STM32F4-DISCOVERY

Ushbu taxtali (1-rasmda ko'rsatilgan) STM mikrokontrollerlarini o'rganayotgan yangi boshlanuvchilar uchun eng qulaydir. Birinchidan, u tashqi qurilmalarning katta to'plamiga ega. Mikrokontrollerdan tashqari platada mikroelektromexanik akselerometr, mikrofon, audio DAC, ikkita USB ulagichi, tugma va to‘rtta LED mavjud.

Mikrokontroller pinlari plataning chap va o'ng chetlarida pin konnektorlarini o'rnatish uchun kontakt maydonchalariga chiqariladi, bu ularga barcha kerakli tashqi qurilmalarni ulashni osonlashtiradi. Doskaga o'rnatilgan STM32F407VGT6 mikrokontrolleri juda yaxshi parametrlarga ega: 1 MB FLASH xotira, 192 KB operativ xotira va 168 MGts takt chastotasi.

Nihoyat, plataga o‘rnatilgan ST-LINK/V2 tuzatuvchisi o‘rnatilgan bo‘lib, undan nafaqat platadagi mikrokontrollerda, balki boshqa platalarda joylashgan bir oila mikrokontrollerlarida ham dasturlarni disk raskadrovka qilish mumkin. Ularga o'tish olinadigan jumper va SWD ulagichi yordamida amalga oshiriladi.

Kengashning narxi taxminan 800 rublni tashkil qiladi, bu juda maqbul deb hisoblanishi mumkin.

STM32F103RBT6 ishlab chiqish kengashi

Keyingi qiziqarli variant - STM32F103RBT6 mikrokontrolleriga ega ishlab chiqish platasi (2-rasm).

Bu avvalgi platada o'rnatilganidan biroz zaifroq - takt chastotasi 72 MGts, FLASH xotirasi 128 KB va RAM 20 KB, ammo periferik qurilmalar juda qiziq. 320x240 pikselli va diagonali 2,8 diagonali bo'lgan TFT sensorli ekran, kompyuter bilan ma'lumot almashish uchun o'rnatilgan USB port, SD xotira kartasi uchun slot, 32768 Gts chastotali kvarts soati, kamera uchun bo'linma mavjud. real vaqtda soat batareyasi va disk raskadrovka dasturlari uchun ST-LINK ulagichi.

Ushbu kengashning narxi ham taxminan 800 rublni tashkil qiladi, ammo shuni ta'kidlash kerakki, unda o'rnatilgan tuzatuvchi yo'q. Dasturlarni yuklab olish uchun alohida ST-LINK tuzatuvchisini sotib olishingiz yoki o‘rniga yuqorida muhokama qilingan STM32F4-DISCOVERY platasidan foydalanishingiz kerak.

Maple Mini

Ushbu kengashning (3-rasm) taniqli Arduino modullari bilan tashqi o'xshashligi hayratlanarli. Va bu tasodif emas.

Maple Mini taxtasi Arduino Nano o'rniga ishlab chiqilgan. Arduino-da o'rnatilgan mikrokontrollerlarning AVR oilasi uchun dasturlash tili va ishlab chiqish muhiti STM oilasiga moslashtirilgan. Maple IDE dasturlash tili va ishlab chiqish muhiti haqida batafsil ma'lumot olish uchun http://leaflabs.com/docs/maple-q uickstart.html saytiga o'ting.

Rivojlanish platasida 72 MGts chastotada ishlaydigan STM32F103CBT6 mikrokontrolleri, 128 KB FLASH xotira va 20 KB RAM mavjud bo'lib, bu shubhasiz har qanday Arduino modulidan ko'proqdir. Rivojlanish muhiti deyarli o'zgarmaganligi bundan ham ko'proq ortiqcha.

Alohida ta'kidlaymizki, miniatyura o'lchamiga qaramay, Maple Mini juda xilma-xil tashqi qurilmalarni taqdim etadi: 34 I/U liniyasi, ikkita SPI va ikkita I2C interfeys kanali, uchta ketma-ket port. Bu uni turli havaskor ishlanmalarda muvaffaqiyatli ishlatish imkonini beradi. Kichik o'lchamlari tufayli Maple Mini to'g'ridan-to'g'ri ishlab chiqilayotgan qurilmaga o'rnatilishi mumkin.

Original Maple Mini platasini ishlab chiquvchilari veb-saytida 35 dollarga sotib olish mumkin. Yetkazib berish yana 5 dollarga tushadi. Xitoyda ishlab chiqarilgan doskaning bir nusxasi ikki baravar qimmatga tushadi.

Dasturiy ta'minot

STM32 oilasining mikrokontrollerlari uchun dasturlarni tayyorlashda foydalanish mumkin bo'lgan ishlab chiqish muhitlarining bir nechta variantlari mavjud:

Tijoriy IAR Embedded Workbench, AtollicTrueSTUDIO, Keil va boshqalar. Ushbu to'liq xususiyatli mahsulotlar ancha qimmat, litsenziya narxi 1000 evrodan boshlanadi, lekin ishlab chiqilayotgan dastur hajmini cheklovchi bepul demo versiyalari ham mavjud; ko'pchilik uchun oddiy loyihalar ular juda etarli;

ARM-GCC kompilyatoriga ega bepul Eclipse ishlatishdan oldin kompilyatorning ahamiyatsiz konfiguratsiyasini talab qiladi. Bugungi kun uchun yagona ortiqcha - bu nafaqat Windows-da, balki Linux-da ham ishlash qobiliyati;

Xuddi shu Eclipse muharririga asoslangan bepul CooCox IDE (CoIDE). ST-LINK orqali dasturlarni yuklaydi va disk raskadrovka qiladi. Oldingi variantdan farqli o'laroq, CoIDE hech qanday maxsus sozlamalarni talab qilmaydi va o'rnatishdan so'ng darhol ishlaydi. Ushbu parametr eng qulay va foydalanishga arziydi.

Har qanday mikrokontroller uchun birinchi dasturning klassik LED miltillashini amalga oshiradigan STM32F4-DISCOVERY platasi uchun misol dasturini yaratish uchun CooCox IDE-dan foydalanamiz. STM32F4-DIS-COVERY platasida to'rtta LED mavjud bo'lib, ular mikrokontrollerning PD12-PD15 pinlariga ulangan. Keling, ularni navbatma-navbat miltillashiga imkon beraylik.

1-qadam. CoIDE ishlab chiqish muhitini ishga tushiring va loyiha yarating. Shaklda ko'rsatilgan ochiladigan ro'yxatdan. 4, STM32F407VG mikrokontrollerni tanlang.

Qadam 2. Rasmda ko'rsatilganidek. 5, loyihada ishlatiladigan komponentlarni tanlang. Ulardan asosiylari GPIO (kirish-chiqarish), C Library (C tilining asosiy funktsiyalari) va M4 Core (protsessor yadro funktsiyalari). Komponentni faollashtirganda, CoIDE avtomatik ravishda kerakli fayllarni loyiha papkasiga ko'chiradi, bu juda qulay.

Qadam 3. Dastur matnini kiritish. Bu juda qisqa va jadvalda keltirilgan. 2.

Ko'rib turganingizdek, hamma narsa oddiy va tushunarli. AVR mikrokontrollerlari uchun dasturlarni yozganlar, ehtimol, tanish dizaynlarni - yo'nalishni (kirish yoki chiqish) ko'rsatuvchi portlarni ishga tushirishni, kerakli harakatlar amalga oshiriladigan asosiy tsiklni ko'rishadi. Umuman olganda, dasturning sintaksisi C tiliga to'liq mos keladi, buning uchun adabiyotlar etarli. Internetda STM32 uchun dasturlash bo'yicha ko'plab maqolalar mavjud. Ko'pgina misollar ishlab chiqish taxtasi bilan ta'minlangan va ulardan namuna sifatida ham foydalanish mumkin.

Ekrandagi "Yuklab olish uchun yuklab olish" tugmasini bosish orqali dastur matnini kiritgandan so'ng, u mikrokontrollerga yuklab olinadi. Kengashdagi LEDlar miltillay boshlaydi. Alohida-alohida, disk raskadrovka imkoniyatlarini ta'kidlash kerak - to'xtash nuqtasi dasturning istalgan joyida o'rnatilishi mumkin, siz o'zgaruvchilar qiymatlarini ko'rib, dasturni bosqichma-bosqich ishga tushirishingiz mumkin.

Albatta, bu misol ideal emas. Masalan, LEDlarning miltillashini boshqarish uchun taymer uzilishlaridan foydalanishingiz mumkin, bu esa boshqa vazifalar uchun asosiy dastur tsiklini bo'shatadi. Xohlaganlar buni mustaqil ravishda aniqlashlari mumkin.

Xulosa

Umuman olganda, birinchi tanishuvdan so'ng, STM32 oilasining mikrokontrollerlari juda yoqimli taassurot qoldirdi. Hammasi unchalik murakkab emasligi ma'lum bo'ldi va ishlab chiqish muhitining qulayligi, disk raskadrovka jarayoni va ko'p sonli standart funktsiyalar hatto DOS xonimdan Windows-ga o'tishni biroz eslatdi - umumiy fikrlar bir xil ko'rinadi, lekin hamma narsa ancha qulay va funktsional.

Ammo havaskor ishlanmalar uchun bu oilaning asosiy kamchiliklari hali ham juda kichik pin qadamidir. Uyda 0,5 mm pinli qadam bilan taxtani loyihalash va lehimlash juda ahamiyatsiz ishdir. Biroq, hozirgi narxlarda, allaqachon o'rnatilgan mikrokontrollerli disk raskadrovka taxtalari har bir radio havaskor uchun ochiqdir.

Hamma narsani STM va 32-bitli arxitekturaga aylantirishga arziydimi? Albatta yo'q. ATtiny etarli bo'lgan vazifalar mavjud. Ammo, masalan, uy qurilishi SDR qabul qilgichidagi spektrni tahlil qilish yoki tarmoq orqali katta hajmdagi ma'lumotlarni qabul qilish va uzatish uchun, xotira etishmasligi yoki ishlashiga yo'l qo'ymaslik uchun darhol kuchli mikrokontrollerdan foydalanish ancha samaraliroqdir. qurilmani takomillashtirish.

Cortex yadrosiga asoslanib, ular mikrokontrollerlardagi qurilmalarning professional va yangi ishlab chiquvchilari orasida faol mashhurlikka erisha boshladilar. Buning bir qancha sabablari bor:
- raqobatchilarga nisbatan past narx;
- ko'p sonli o'rnatilgan interfeyslar;
- dasturlashning qulayligi va yuqori ishonchliligi.
Ammo bitta muhim kamchilik ham bor - barcha STM mikrokontrollerlari DIP paketlarida ishlab chiqarilmaydi, bu ko'pincha yangi boshlanuvchilarni qo'rqitadi, chunki uyda 0,3 mm dan kam izli taxta yasash muammoli. Ushbu holat bozorda ST Microelectronics (Discovery) va uchinchi tomon kompaniyalari (Olimex, Pinboard) tomonidan ishlab chiqarilgan juda ko'p sonli disk raskadrovka platalarining paydo bo'lishiga olib keldi. Men Discovery-ni uchta sababga ko'ra tanladim:
- nisbatan past narx (taxtani 300 rubldan sotib olish mumkin);
- yaxshi ishlov berish (garchi simlar haqida ba'zi shikoyatlar mavjud bo'lsa-da, lekin ular unchalik ahamiyatli emas);
- ko'plab manbalar va misollar ishlab chiqaruvchining veb-saytida joylashtirilgan;
- o'rnatilgan dasturchining mavjudligi (uni alohida sotib olishingiz shart emas).
Birinchi darsning maqsadi yangi ishlab chiquvchiga disk raskadrovka taxtasini tanlashda yordam berish va kelajakda dasturlash asoslarini o'rgatishdir.
Shunday ekan, ketaylik.

STM32F0DISCOVERY

Ushbu plata ilgari 8-bitli mikrokontrollerlardan foydalangan ishlab chiquvchilarni jalb qilish va shu bilan bu joyni to'ldirish uchun 2012 yil fevral oyida chiqarilgan. Men u haqida yomon yoki yaxshi narsa deya olmayman. Oddiy taxta, arzon, boshlash uchun juda yaxshi. Quyidagi xususiyatlarga ega:
- mikrokontroller: STM32F051R8T6 (Cortex M0, 48 MGts, flesh 64 KB, RAM 8 KB);
- taxtadan alohida foydalanish mumkin bo'lgan o'rnatilgan ST-link/V2;
- USB dan yoki tashqi 3/5V manbadan quvvatlanadi;
- 4 ta LED va 2 ta tugma;
- interfeyslar: USART, SPI, I2C, HDMI;
- taymerlar 16 va 32 bit;
- barcha chiqishlar ikkita bitta qatorli taroqqa yo'naltiriladi.
Aslida, bunday taxta allaqachon eskirgan va uni faqat mashg'ulotning boshida olish tavsiya etiladi.

STM32VLDISCOVERY

U avvalgi platadan faqat STM32F100RBT6B protsessorida (Cortex M3, 24 MGts, flesh 128 KB, RAM 8 KB) va periferik taroqlarning joylashuvida farq qiladi. Yuqorida muhokama qilinganidek, u yangi boshlanuvchilar uchun mos keladi. U haqida aytadigan boshqa hech narsa yo'q.

STM32LDISCOVERY

STM32LDISCOVERY - oldingi kengashning munosib evolyutsiyasi. Bu erda nima qiziq:
- mikrokontroller STM32L152RBT6 (Cortex M3, 32 MGts, flesh 128Kb, RAM 8Kb, EEPROM 4Kb)
- interfeyslar: USB, USART, SPI, I2C;
- 8 taymer;
- 24-kanalli 12-bitli ADC;
-12-bitli DAC;
- real vaqt soati;
- LCD kontroller 8x40
- o'rnatilgan ST-link/V2.
Kengashga quyidagilar o'rnatiladi:
- LCD displey 24x8;
- 4 ta LED;
- 2 tugma;
- sensorli klaviatura;
- 2 ta bitta qatorli taroqlar bo'sh o'tkazgichlar bilan.
Men USB haqida alohida aytmoqchiman: boshqaruvchi USB 2.0 to'liq tezlikda, xost va qurilma rejimlarini qo'llab-quvvatlaydi, bu sinfdagi MKda kamdan-kam uchraydi.
Aslida, taxta Cortex-M3 yadrosi bilan ishlashning eng yaxshi variantidir, shuning uchun siz uni xavfsiz qabul qilishingiz mumkin, chunki narx past.

STM32F3DISCOVERY

STM32F3DISCOVERY STM ishlab chiqarish platalarining keyingi avlodiga tegishli va quyidagi xususiyatlarga ega:
- mikrokontroller STM32F303VCT6 (Cortex M4, 72 MGts, flesh 256 KB, RAM 48 KB)
- real vaqt soati;
- o'rnatilgan ST-link/V2;
- 13 taymer;
- 12 kanalli DMA kontrolleri;
- 4 ta ADC;
- 4 ta operativ kuchaytirgich;
- interfeyslar: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 GPIO liniyalari.

- moslashtirilgan USB port;
- bitta korpusda 3 o'qli akselerometr va 3 eksa geomagnit sensori;
- 3 o'qli giroskop;
- 10 ta LED;
- 2 tugma;
- 2 ta ikki qatorli taroq.
Juda qiziqarli taxta, tajriba uchun ko'plab imkoniyatlar. Umuman olganda, bu boradagi fikr yaxshi bo'lib qolmoqda, ammo uning jismoniy holati va pozitsiyasini kuzatishga e'tibor qaratilishi eksperimentlar hajmini sezilarli darajada kamaytiradi, garchi siz kengaytirish taxtasini o'zingiz osongina qilishingiz mumkin.

STM32F4DISCOVERY

Men ushbu kengash bilan eng ko'p ishlash imkoniyatiga ega bo'ldim va bu menga boshqalarga qaraganda ko'proq yoqdi - uning har tomonlama yo'naltirilganligi unga ta'sir qildi.
Bu nima:
- mikrokontroller STM32F407VGT6 (Cortex M4, 168 MGts, flesh 1 MB, RAM 192 KB)
- o'rnatilgan ST-link/V2;
- taymerlar;
- DMA kontroller;
- ADC/DAC;
- interfeyslar: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Kengash quyidagi tashqi qurilmalarni o'z ichiga oladi:
- moslashtirilgan USB port;
- 3 o'qli akselerometr;
- 8 ta LED;
- 2 tugma;
- 2 ta ikki qatorli taroq;
- D toifali kuchaytirgichli audio DAC;
- ko'p yo'nalishli raqamli mikrofon.

Yuqorida yozganimdek, bu doska men uchun asosiy bo'ldi, men ovoz va akselerometr bilan ishlash qobiliyatidan mamnun bo'ldim.

Keyingi darslar shu doska asosida olib boriladi.

Xulosa.
Agar siz STM disk raskadrovka taxtalari bilan ishlashni boshlashga qaror qilsangiz, men sizga STM32F4DISCOVERY-ni olishingizni maslahat beraman, menimcha, u eng katta funksionallikka ega. Keyingi maqolalar maxsus u bilan ishlashga asoslanadi. Yaqin kelajakda quyidagi mavzularda maqolalar yoziladi:
- GPIO, taymerlar, uzilishlar va boshqalar bilan ishlash;
- displeylar, GPS va GSM modullari, harorat sensorlari, RS-232 orqali kompyuter bilan aloqa va boshqalar kabi haqiqiy qurilmalar misollaridan foydalangan holda UART, SPI, I2C va 1 simli interfeyslar bilan ishlash.
Ushbu tsiklning yakuniy maqsadi STM32F4 uchun kengaytirish platasini yaratishdir. Barcha proshivka va elektron sxemalar hamma uchun ochiq bo'ladi.