STM32L-Discovery хөгжүүлэлтийн самбар дээрх LCD үзүүлэлттэй ажиллах. Масс руу STM32 дээр сургалт Давтамж хуваагч блок

Ерөнхий мэдээлэл

STM32L-Discovery хөгжүүлэлтийн самбар нь шингэн болор дэлгэцтэй (LCD) зургаан 14 сегмент тэмдэгт, 4 хоёр цэг (колон), 4 цэг (DP), 4 судал (Bar). Бүх сегментүүдийг 24 сегментийн COM0, COM1, COM2, COM3 гэсэн бүлэгт нэгтгэдэг. Бүлэг бүр өөрийн гэсэн "нийтлэг утас"-тай.


Дибаг хийх самбар дээр STM32L152RBT6 микроконтроллер суурилуулсан. Микроконтроллер нь монохром LCD үзүүлэлтүүдийг хянадаг LCD хянагчтай.
LCD хянагч:

  1. Шинэчлэх давтамжийг тохируулах боломжийг танд олгоно (фрэймийн хурд - LCD дээрх мэдээллийг шинэчлэх давтамж)
  2. Статик болон мультиплекс хяналтын горимыг дэмждэг
  3. Дэмждэг програм хангамж суурилуулахялгаатай
  4. Олон тооны хяналтын хүчдэлийн түвшинг зөвшөөрдөг (дөрөв хүртэл)
  5. Давхар буферлэлтийг ашигладаг бөгөөд энэ нь LCD_RAM ​​бүртгэл дэх өгөгдлийг харуулах мэдээллийн бүрэн бүтэн байдлыг зөрчихгүйгээр програмыг ажиллуулах явцад хүссэн үедээ шинэчлэх боломжийг олгодог.

LCD хянагчийн санах ойн бүртгэлүүд

STM32L152RB микроконтроллер нь тусгай LCD_RAM ​​регистертэй бөгөөд тэдгээрт хадгалагдсан мэдээлэл нь COM0 - COM3 сегментийн бүлэгт тохирдог. Бүлэг бүр нь 32 битийн хоёр регистртэй тохирч байна. Энэ тооны регистр нь микроконтроллерт LCD дэлгэцийг удирдах боломжийг олгодог c их хэмжээнийхөгжүүлэлтийн самбар дээр суулгасан сегментээс илүү.

176 сегмент бүхий LCD дэлгэцийг удирдахын тулд тус бүр нь 44 сегментийн 4 бүлэг COM0 - COM3, 320 сегмент бүхий LCD дэлгэцийг удирдахад тус бүр нь 40 сегмент бүхий 8 бүлэг COM0 - COM7 ашигладаг.



STM32L-Discovery хөгжүүлэлтийн самбар нь тус бүр 24 сегмент бүхий COM0 - COM3 гэсэн 4 бүлэгт хуваагдсан 96 сегмент бүхий LCD ашигладаг.


STM32L-Discovery хөгжүүлэлтийн самбар дээрх LCD нь бүлэг тус бүрийн хоёр дахь LCD_RAM ​​бүртгэлийн S40, S41 битүүд болон эхний LCD_RAM ​​бүртгэлийн S0-S27 битүүдийг ашиглахаар холбогдсон байна. Ашигласан регистрүүдийн тоог багасгахын тулд S40-S43 битүүдийн мэдээллийг дахин буулгах функцийг ашиглан S28-S31 чөлөөт битүүдэд бичнэ.

Давтамж хуваагч блок

Давтамж хуваагч блок (давтамж үүсгэгч) нь LCD дээр 32 кГц-ээс 1 МГц хүртэлх давтамжийн янз бүрийн фрэймийн хурдыг авах боломжийг олгодог. Дараахь зүйлийг цаг хугацааны дохионы эх үүсвэр болгон ашиглаж болно.
  1. 32 кГц давтамжтай гадаад бага давтамжийн генератор (LSE. Бага хурдны гадаад)
  2. 37 кГц давтамжтай дотоод бага давтамжийн генератор (LSI. Дотор бага хурд)
  3. 2,4,8, 16 давтамж хуваагч, хамгийн их давтамж 1 МГц бүхий гадаад RF генератор. (HSE. Өндөр хурдны гадаад)
Цаг хугацааг нарийн тогтоож, хүчдэлийн зөрүүг багасгах шууд гүйдэл LCD сегментүүдээр дамжуулан цаг хугацааны дохионы эх үүсвэр тогтвортой байх ёстой. LCDCLK цагийн дохиог LCD хянагч руу илгээдэг. Цагийн дохионы давтамжийг LCD_FCR (Frame Control Register) регистрийн PS, DIV битүүдээр тогтоосон хуваах хүчин зүйлсийн дагуу хуваана. Давтамж хуваагч блокийн гаралтын үр дүнд үүссэн давтамжийг дараах томъёогоор тооцоолно.

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

Хүрээний хурдыг дараах томъёогоор тооцоолно.

F Frame =f ck_div *үүрэг

Үүрэг нь үүргийн мөчлөг бол импульсийн үргэлжлэх хугацааг түүний хугацаатай харьцуулсан харьцаа юм. Нэг фрэймийн явцад LCD_RAM[x], LCD_RAM ​​гэх мэт регистрүүдийн мэдээлэл LCD дээр дараалан гарч ирдэг. Хөгжлийн самбар дээр суурилуулсан LCD-ийн хувьд LCD хянагч нь COM0 - COM3 сегментийн 4 бүлгийн мэдээллийг нэг фрэйм ​​дээр гаргах ёстой тул нэг бүлгийн хяналтын импульсийн үргэлжлэх хугацаа нь хүрээний үргэлжлэх хугацааны 1/4 байх болно, өөрөөр хэлбэл. үүрэг=1/4.

LCD удирдлага

LCD дэлгэцийг хянах хоёр арга байдаг - статик хяналтын горим ба мультиплекс хяналтын горим. Статик заалттай бол индикаторын битийн сегмент бүр микроконтроллерийн гаралттай холбогддог. LCD-тэй холбоотойгоор STM32LDiscovery дибаг хийх самбар дээр 6 * 14 = 84 микроконтроллерийн зүү шаардлагатай (хоолон цэг, цэг, зураасаас бусад). Ийм олон тооны тээглүүр ашигласан тул бусад дагалдах хэрэгслийг холбох боломжгүй болно. STM32L152RB микроконтроллер нь 64 зүүтэй. Мультиплекс хяналтын горимд (динамик хяналтын горим) индикаторын цифрүүдийн ижил сегментүүдийг бүлэгт нэгтгэдэг. Хүний нүдэнд мэдрэгддэггүй давтамжтай индикаторын цифрүүдийн сегментүүдийн ээлжлэн гэрэлтүүлгийн улмаас мэдээлэл гарч ирдэг.

Мультиплекс удирдлага нь олон тооны сегментийг удирдах боломжийг олгодог. Элемент тус бүрийг тусад нь хянахын оронд тэдгээрийг мөр, баганаар (COM ба SEG) шийдвэрлэх боломжтой бөгөөд ингэснээр хяналтын хэлхээг хялбарчлах болно. сегмент бүр өөрийн хяналтын шугамыг шаарддаггүй. Сонгосон сегментийг асаахын тулд COM ба SEG боломжит ялгааг түүнд хэрэглэх ёстой. Шалгуур үзүүлэлтийн эхний оронтой ажиллах жишээ (заагч нь "1:"-ийг харуулна):


t 0 үеийн үзүүлэлтийн эхний цифр


t 1 үеийн үзүүлэлтийн эхний цифр


t 2 үеийн үзүүлэлтийн эхний цифр


Сегментүүдийг LCD зүүтэй холбох ерөнхий диаграмм


LCD зүүг микроконтроллерын порттой холбох диаграмм

SEG шугамын хувьд хяналтын хүчдэлийг ашигладаг бөгөөд түүний түвшний тоог хэвийсэн коэффициентээр тодорхойлдог. Хөгжүүлэлтийн самбар дээрх LCD нь үүрэг=1/4, хэвийлт=1/3 бүхий мультиплекс хяналтын горимыг ашигладаг. Үүрэг ба хэвийсэн утгыг DUTY болон BIAS бит дэх LCD_CR (Хяналтын бүртгэл) бүртгэлээр тохируулдаг.

Дасгал хийх

Микроконтроллерийн портуудыг тохируулах

LCD дэлгэцийг удирдахын тулд микроконтроллерийн портуудыг дараах байдлаар тохируулах шаардлагатай.
  1. Гарах руу
  2. AF 11 Alternate функцийг ашиглах
  3. 400 кГц порт руу гаралтын давтамжтай байх
  4. Түлхэх-татах үйлдлийн горимыг ашигла
  5. Татах резистор байхгүй
Порт нь өөр функцийн горимд ажиллаж байх үед портын гаралтын өгөгдлийн буфер нь захын төхөөрөмжөөс ирж буй дохиогоор хянагддаг. CMSIS номын сангийн stm32lxx.h толгой файл нь бүх захын регистрүүдийн тодорхойлолт, түүнчлэн тэдгээрт хандах бүтцийг агуулдаг.

LCD зүү нь микроконтроллерийн GPIOA (PA1-PA3, PA8-PA10, PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3, PC6-PC11) портуудад холбогдсон. LCD дэлгэцийг ажиллуулахын тулд сонгосон портуудад цагийн дохио өгөх шаардлагатай. Микроконтроллерийн GPIO портууд нь RCC (Дахин тохируулах ба Цагны хяналт) системийн AHB автобуснаас цагийг тохируулдаг - цаг, дахин тохируулах систем. Цагийн дохио нь RCC_AHBENR (AHB захын цагийг идэвхжүүлэх бүртгэл) регистрт харгалзах битүүдийг тохируулах замаар хангадаг.

RCC_AHBENR-г бүртгүүлэх (зураг нь эхний 15 битийг харуулж байна)

GPIOA, GPIOB, GPIOC портуудын хувьд регистрийн 1-ээс 0, 1, 2 битийг тохируулах шаардлагатай.

Дараа нь би бит маск ашиглан регистрт мэдээлэл бичих кодыг 16-тын код ашиглан өгөх болно. Бит маск ашиглах нь илүү тохиромжтой боловч арван зургаатын кодуудтай ажиллах нь регистртэй ажиллахын мөн чанарыг ойлгох боломжийг олгодог.

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_1MODER_MODER1 | GPIO_MODER_1MODER1GP1 | эсвэл GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Микроконтроллерийн портуудыг түлхэх татах горимд шилжүүлэх ёстой. Үүнийг хийхийн тулд та GPIOx_OTYPER регистрийн (GPIO портын гаралтын төрлийн бүртгэл) зүүг хариуцах битүүдэд 1-ийг тохируулах хэрэгтэй.


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_15); эсвэл GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Хоёр сонголт хоёулаа сонгосон зүү дээр нөлөөлдөг. (GPIOA портын хувьд 1-3.8-10.15 зүүг тохируулсан). Хэрэв та бүх портын зүүг түлхэх горимд шилжүүлэх шаардлагатай бол бүртгэлд дараах утгыг бичиж болно.
GPIOA->OTYPER = 0x0;
Порт руу мэдээлэл гаргах давтамжийг тодорхойлохын тулд GPIOx_OSPEEDR (GPIO портын гаралтын хурдны бүртгэл) бүртгэлийг ашигладаг. Бүх регистрийн битүүд нь OSPEDRy бүлэгт хуваагддаг бөгөөд y нь харгалзах портын пин дугаар юм. Энэ ажилд давтамжийг 400 кГц болгож тохируулах ёстой, өөрөөр хэлбэл. зүүг хариуцах бүлэгт утгыг 00 болгож тохируулна уу.


GPIOx_OSPEEDR (GPIO портын гаралтын хурдны бүртгэл) бүртгүүлэх

GPIOA->OSPEEDER &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDRO15 | GPIO_OSPEEDER_OSPEEDR15 | эсвэл GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Хэрэв та портын гаралтын давтамжийг бүх пингийн хувьд 400 кГц болгон тохируулах шаардлагатай бол регистрийн утгыг бичиж болно.
GPIOA->OSPEEDR = 0x0;
Сонгосон тээглүүрүүдийн татах болон доош татах резисторыг идэвхгүй болгохын тулд GPIOx_PUPDR бүртгэлийг (GPIO порт татах/доош татах бүртгэл) ашиглана уу. Бүх регистрийн битүүдийг PUPDRy бүлэгт хуваадаг бөгөөд y нь харгалзах портын пин дугаар юм. Зүүг хариуцдаг бүлгийн татах резисторыг идэвхгүй болгохын тулд утгыг 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_PUPDRP1); эсвэл GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Хэрэв та бүх зүүг татах резисторыг идэвхгүй болгох шаардлагатай бол бүртгэлд утгыг бичиж болно:
GPIOA->PUPDR = 0x0;
Микроконтроллерийн портуудад өөр функцийг ашиглахын тулд бага пин (0-ээс 7) болон GPIOx_AFRH (GPIO өөр функцийн өндөр бүртгэл) -ийг хариуцдаг GPIOx_AFRL (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 захын цагийг идэвхжүүлэх бүртгэл) регистрт цагийг идэвхжүүлэхийн тулд та 9 ба 28 битүүдэд 1-ийг тохируулах ёстой.


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 хянагчийн цагийн эх үүсвэрийг хянадаг
PWR_CR регистрийн 8-р битийг 1 болгож RCC_CSR регистр рүү бичихийг идэвхжүүлнэ.


PWR_CR (PWR тэжээлийн хяналтын бүртгэл) бүртгэх

PWR->CR |= PWR_CR_DBP; эсвэл PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
LCD хянагчийн цагийн эх үүсвэрийг (мөн RTC цагийг ч бас) өөрчлөхийн тулд эхлээд RCC_CSR регистр (Хяналт/төлөв бүртгэл) дэх RTCRST битийг (1-ээс 23-р бит хүртэл тохируулах) тохируулж цагийн эх үүсвэрийг дахин тохируулах хэрэгтэй.


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 */
Генераторыг асаасны дараа тогтворжуулахад тодорхой хугацаа шаардагдана. Генераторын бэлэн байдлыг RCC_CSR регистр дэх LSERDY битийн тоног төхөөрөмжийн тохиргоогоор шалгана.
while(!(RCC->CSR&RCC_CSR_LSERDY));
Гадаад бага давтамжийн генераторыг цагийн эх үүсвэр болгон сонгохдоо RTCSEL бүлэгт RCC_CSR регистрийг 01 болгож тохируулна.
RCC->CSR |= RCC_CSR_RTCSEL_LSE; эсвэл RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
LCD хянагч дээр та суулгах хэрэгтэй хүссэн горимхазайлт. Үүнийг хийхийн тулд LCD_CR бүртгэлд (LCD хяналтын бүртгэл) BIAS бүлэгт 10 утгыг тохируулах шаардлагатай. Битүүдийг суулгахаасаа өмнө "хог"-оос битүүдийг цэвэрлэх шаардлагатай.


LCD_CR (LCD хяналтын бүртгэл) бүртгэх

Битүүдийг дахин тохируулах:
LCD->CR &= ~LCD_CR_BIAS; эсвэл LCD->CR &= ~0x60;
Бит маск ашиглан хазайлт=1/3 горимыг сонгох:
LCD->CR |= LCD_CR_BIAS_1; эсвэл LCD->CR |= 0x40;
Duty=1/4 горимыг тохируулна уу. Үүнийг хийхийн тулд бид эхлээд бүх битүүдийг дахин тохируулна:
LCD->CR &=~LCD_CR_DUTY; эсвэл LCD->CR &= ~0x1C;
LCD_CR бүртгэлийн DUTY бүлэгт 011 утгыг тохируулна уу
горимын үүрэг = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; эсвэл LCD->CR |= 0xС;
Бид зүү дахин хуваарилах функцийг идэвхжүүлдэг. Үүнийг хийхийн тулд LCD_CR регистрийн 1-ээс 7 битийг тохируулна уу:
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*/
Хүссэн тодосгогч түвшинг тохируулахын тулд та CC бүлэгт 010 утгыг тохируулах хэрэгтэй бөгөөд эхлээд хуучин утгуудаас битүүдийг арилгах хэрэгтэй.
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; эсвэл LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Бүх утгыг тохируулсны дараа LCD_FCR бүртгэлийг синхрончлоход хэсэг хугацаа шаардагдана. Бүртгэлийн синхрончлолыг LCD_SR (LCD статусын бүртгэл) бүртгэл дэх техник хангамжийн FCRSF битийг тохируулах замаар шалгана.

LCD_SR (LCD статусын бүртгэл) бүртгэх

While(!(LCD->SR&LCD_SR_FCRSR));
LCD-ийн хүчдэлийн эх үүсвэр болгон бид V lcd үүсгэхийн тулд дотоод өсгөгч хөрвүүлэгчийг сонгоно. Үүнийг хийхийн тулд 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;
Дотоод өсгөгч хөрвүүлэгчийг хүчдэлийн эх үүсвэр болгон суулгасны дараа бэлэн болтол хүлээх хэрэгтэй. Бэлэн байдлыг LCD_SR регистрийн (LCD статусын бүртгэл) RDY битийн тоног төхөөрөмжийн тохиргоогоор шалгана.
while(!(LCD->SR&LCD_SR_RDY));
LCD хянагчийг ажиллуулахыг зөвшөөрсний дараа та бэлэн болтол хүлээх хэрэгтэй. Бэлэн байдлыг LCD_SR бүртгэлийн (LCD статусын бүртгэл) ENS битийн тоног төхөөрөмжийн тохиргоогоор шалгана.
while(!(LCD->SR&LCD_SR_ENS));

LCD дээр зураг үүсгэх

Бүх үзүүлэлтийн сегментийг тус бүр 24 сегменттэй COM0 - COM3 бүлэгт нэгтгэдэг (SEG0-SEG23). Сегментүүдийн талаарх мэдээллийг LCD хянагчийн санах ойн LCD_RAM ​​бүртгэлд хадгалдаг. Утас цахилгаан гүйдлийн хавтанЭнэ нь сегментийн дугаарууд нь LCD_RAM ​​регистрийн битийн дугаартай тохирохгүй байх явдал юм.

LCD дэлгэцийн эхний орон дээр 1-ийг харуулахын тулд та 1B, 1C сегментүүдийг гэрэлтүүлэх хэрэгтэй. 1В сегмент нь COM0 бүлэгт, 1С сегмент нь COM1 бүлэгт хамаарна. Тиймээс тэдгээрийн талаарх мэдээллийг RAM (LCD_RAM0), RAM (LCD_RAM2) регистрүүдэд тус тус бичих ёстой. Сегмент 1В нь LCDSEG22 LCD гаралтыг хариуцдаг бөгөөд түүний талаарх мэдээлэл нь RAM бүртгэлийн SEG40 бит (LCD_RAM1)-д хадгалагддаг. Дахин дүрслэх функцийг ашиглан LCDSEG22 сегментийг RAM бүртгэлийн (LCD_RAM0) SEG28 битэд хуваарилна. 1С сегмент нь LCDSEG1 LCD гаралтыг хариуцдаг бөгөөд энэ тухай мэдээлэл нь RAM бүртгэлийн SEG1 бит (LCD_RAM2) -д хадгалагддаг.

LCD->RAM = 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0х2= 10 */
Санах ойн бүртгэлд утгыг бичихээс өмнө LCD дэлгэц рүү өмнөх өгөгдөл дамжуулалт дууссан эсэхийг шалгах шаардлагатай. Үүнийг хийхийн тулд LCD_SR (LCD статусын бүртгэл) регистрийн UDR (Update display request) битийг шалгана. LCD хянагч нь хоёр гаралтын буфертэй бөгөөд мэдээллийг эхний буферт оруулж, хоёр дахь буферээс LCD руу гаргадаг. UDR битийг эхний буферээс хоёр дахь руу шилжүүлэх үед тохируулж, LCD_RAM ​​бүртгэлийг бичихээс хамгаална:
while(LCD->SR & LCD_SR_UDR);
LCD_RAM ​​бүртгэлд мэдээлэл бичсэний дараа та LCD_SR бүртгэлд (LCD статусын бүртгэл) UDR битийг тохируулах шаардлагатай (1-ээс 2 битийн хооронд тохируулна уу):
LCD->SR |= LCD_SR_UDR; эсвэл LCD->SR |= 0x4; /*0х4 = 100 */

Энэ төхөөрөмжийг тарчилж, судлахын тулд. Хэлэхээс өмнө хийсэн. Ороолтоо цуглуулаад бид явлаа. Өө тиймээ! Бидний ярианы сэдэв хоёр МК-ыг харьцуулах тухай болов. Дээрх нь ATmega328-ийн эсрэг байна. Яагаад яг тэд? Хоёр MK хоёулаа TQFP-32 багцад байна. (Үнэн, ATmega328 нь DIP багцад ирдэг)
Одоо тэдний дотоод байдлыг нарийвчлан авч үзье. Илүү сайн ойлгохын тулд би шаардлагатай бүх өгөгдлийг нэг хүснэгтэд цуглуулсан.

Сонголтууд ATmega328 STM32F030K6T6
Битийн гүн 8 бит 32 бит
Флаш 32кб 32кб
SRAM 1кб 4кб
EEPROM 512б -
Таймер 8 бит 2 ширхэг -
Таймер 16 бит 1 PC 16 ширхэг
PWM 3 суваг 6 суваг
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1 ширхэг (TWI) 1 PC
ADC 8 суваг 10 бит 16 суваг 12 бит
Тэжээл 2,7 - 5,5 2,4 - 3,6
Хурд 0 - 16 МГц Гадаад 4 - 32 МГц-тэй 48 МГц
Үнэ 160 - 170 рубль. 80 - 140 рубль.
Хүснэгтээс харахад STM32 нь AVR-ээс хамаагүй илүү сонирхолтой бөгөөд баялаг юм. Үнэхээр нэг жижиг зүйл байна. STM32 нь EEPROM-гүй боловч AVR-ийг бүрэн устгадаг DMA-тай. Үнэн, AVR Arduino болон хялбар програмчлалаар сайрхдаг. Би маргахгүй ч STM32 нь STM32Cube-тэй бөгөөд энэ нь IAR-д зориулсан код үүсгэж, дагалдах төхөөрөмжүүдийн тохиргоог бүхэлд нь хариуцдаг. Мөн AVR-ийн авс дахь эцсийн хадаас бол RTOS юм. Тийм ээ, та үүнийг AVR дээр суулгаж болно, гэхдээ та үүнийг олох хэрэгтэй, гэхдээ STM32 дээр бид "FREERTOS" хайрцгийг шалгана, тэгээд л болоо. Систем өөрөө шаардлагатай бүх зүйлийг хийх бөгөөд бидний хийх ёстой зүйл бол thread үүсгэж, тэдгээрт код бичих явдал юм. За, энэ бол зөвхөн эхлэгчдэд зориулагдсан юм. Үнэндээ тэнд бүх зүйл арай илүү төвөгтэй байдаг. Товчхондоо, би STM32-д дуртай бөгөөд эцэст нь таныг энэ платформд оруулахын тулд Arduino-г ширээний шургуулга руу шидснээр би эхнээс нь дуустал самбар үүсгэж, түүнтэй хэрхэн ажиллахыг харуулах болно. Өө, би мартчихаж. Бүх STM32 нь SWD дибаглагчтай. Эдгээр нь SWDIO, SWCLK, GND гэсэн гурван утас бөгөөд та Proteus дээрх ATmega328 шиг биш, харин техник хангамжид шууд кодын шугамаар дамжих боломжтой. Үүнийг хийхийн тулд танд ST-LINK бүх нийтийн програмист хэрэгтэй. Хэрэв та Discovery самбар эсвэл тусдаа програмист худалдаж авбал үүнийг ашиглаж болно. Тэгээд одоо үгнээс үйлдлээ.
Схем. Илүү том
Би энэ самбарыг AVR-д зориулсан дибаг хийх самбарынхаа модуль болгон хийсэн. Гэхдээ та өөрийн үзэмжээр самбарыг тарааж давтаж болно (би нийтлэлийн төгсгөлд DipTrace-д зориулсан төслийг нийтлэх болно). Диаграм дээр юу байна. Мөн диаграмм нь AVR-ийн энгийн бэхэлгээг харуулж байна. Хоёр 20p конденсатор бүхий 8 МГц кварц. AVR-ийн нэгэн адил ADC дэмжлэгийн тэжээлийн хэлхээг угсардаг. AVR шиг хэлхээг дахин тохируулна уу. Ганц ялгаа нь BOOT хэлхээ юм. AVR-ээс ялгаатай нь бүх STM32 нь төхөөрөмж дээр ачаалагч төхөөрөмжтэй байдаг. Анхдагч байдлаар энэ нь USART-д холбогдсон байна. Өөрөөр хэлбэл, хэрэв та BOOT0 зүүг тэжээлийн эх үүсвэр рүү дарж, MK-г дахин эхлүүлбэл Flash Loader Demonstrator програмыг ашиглан програмистгүйгээр MK-г асааж болно. Энэ онцлогХэрэв танд бэлэн, ажиллаж байгаа төхөөрөмж байгаа бөгөөд програм хангамжаа шинэчлэх шаардлагатай бол танд зөвхөн USB USART адаптер хэрэгтэй болно. Цахилгаан хангамж нь 3.6 вольтоос ихгүй байгаа тул олон хүмүүс STM32-тэй хутгалдахыг хүсдэггүй. Дэмий. Хэрэв та зүү хүснэгтийг харвал бүх хөл нь үр дагаваргүйгээр 5 вольт хүлээн авах боломжтой гэдгийг анзаарах болно. Үргэлжлүүлье.

Мөн самбар дээр суулгасан нь иймэрхүү харагдаж байна.

Одоо бид ST-LINK-GA программистыг SWD холбогчтой холбож байна.

Одоо бүх зүйл бэлэн болсон тул ST вэбсайтаас хамгийн сүүлийн хувилбарыг татаж аваарай (хуудасны доод талд байгаа холбоос). Суулгаж ажиллуулна уу.

Шинэ төсөл дээр дарна уу. Мөн гарч ирсэн цонхон дээр бид хянагчаа олдог. OK дарна уу.

Жаахан бодсоны эцэст. Програм нь иймэрхүү цонхыг харуулах болно.

Энэ нь тусдаа өгүүллийн сэдэв тул би юу, яагаад тайлбарлахгүй. Одоо жишээ нь миний чамд үзүүлсэн зүйлийг л хий. Бид юу хийх вэ. Бид эхлүүлэх болно үйлдлийн системмөн нэг утсаар бид LED-ийг анивчуулна. Их бууны нэг төрлийн "Heloy Word".))) Үүнийг хийхийн тулд зүүн талын цонхонд "FREERTOS" гэсэн бичээсийн хажууд байгаа нэмэх тэмдэг дээр дарж, доош унах жагсаалтад тэмдэг тавина уу.

Түүнээс гадна гаднах кварцыг сонгонгуут ​​хянагчийн баруун талд өлгөх шаардлагатай хөлийг ногоон өнгөөр ​​тодруулах болно. Таны хийх дараагийн зүйл бол LED өлгөх хөлийг сонгох явдал юм. Би B порт болон зүү 0-г сонгосон. Тэгээд би тармуур олсон. Яагаад гэдгийг нь мэдэхгүй айсандаа эхний дөрвөн тээглүүрийн гаралтын самыг дээш доош харуулав. Тиймээс В портын төөрөгдөл. Энэ асуудал зөвхөн миний самбарт л нөлөөлнө. Гэхдээ юу ч биш, энэ нь МК-г ажиллахад нь саад болоогүй юм. Тиймээс зүүг тохируулна уу. Үнэн хэрэгтээ STM-ийн хувьд бүх зүү нь олон утгыг авах боломжтой боловч хэрэв та салангид оролт/гаралт дээр хүрвэл гаралтын гурван сонголт байж болно. Агаар дахь гаралт, тэжээлийн эх үүсвэр рүү таталттай гаралт, нийтлэг автобус руу татдаг гаралт. Анхдагч байдлаар, STM32CubeMX нь хөлөө агаарт өлгөдөг. За, зүгээр л бид ажлыг шалгаж, STM32-ийн хүчийг харуулах хэрэгтэй. Хөлийг тохируулахын тулд та хулганы зүүн товчийг дараад гарч ирэх цонхноос GPIO_Output-ийг сонгох хэрэгтэй. Хэрэв MK хэтэрхий жижиг бол та дугуйг эргүүлж, томруулж болно.)))

Дараагийн алхам бол MK цагийг тохируулах явдал юм. STM32 нь энэ асуудалд маш тодорхойгүй байгаа нь үнэн юм. AVR-ээс ялгаатай нь STM32 нь оролтод 4-32 МГц давтамжтай кварцтай бөгөөд автобуснууд дээр 48 МГц хүртэл overclock хийх боломжтой. MK дотор маш нарийн төвөгтэй цагны систем байдаг боловч STM32CubeMX бидэнд дахин туслах болно. Цагны тохиргооны таб руу очоод доорх зураг дээрх шиг тохируулна уу.

Тэгээд л болоо. Дээд талд байгаа арааны дүрс дээр дарна уу.

Ийм цонх гарч ирнэ.

Тэгээд энд хэлэхээ мартчихаж. IAR-г өөртөө татаж аваад суулгаарай. Үүнийг албан тушаалтнаас татаж авах боломжтой боловч кодын хэмжээг багасгаж, эсвэл torrent дээрээс олж болно. Эсвэл илүү их мөнгөтэй бол лиценз худалдаж авч болно. Олон хүмүүс CodeVisionAVR-ийн тусламжтайгаар замыг дагах болно гэж би бодож байна. Ерөнхийдөө би үүнийг таны үзэмжээр үлдээх болно. Надад 7.40 хувилбар байна. Cube руу буцаж орцгооё. Цонхонд төслийг нэрлээрэй, гэхдээ зөвхөн латин хэл дээр IAR нь зам дээрх орос үсгүүдэд дургүй. Мөн төслийг хаана хадгалахыг зааж өгнө үү. IDE цонхонд та EWARM-ийг сонгох хэрэгтэй (мөн энэ нь анхдагчаар). OK дарна уу. Програм нь бодож, дараа нь иймэрхүү цонхыг харуулдаг. Бла бла бла. Ерөнхийдөө, төслийг нээх (танканд байгаа хүмүүсийн хувьд дунд товчлуур) дээр дарна уу.

Цонх алга болж, оронд нь IAR болон манай төсөл эхлэх болно. Зүүн талд Aplication->User руу ороод main.c-г ажиллуул. Энэхүү багц код нь STM32CubeMX бидэнд зориулж бүтээсэн зүйл юм.

Тэгээд одоо энэ аймшгийг яах вэ? Гэхдээ үүний тулд бидэнд бүхэл бүтэн цуврал нийтлэл хэрэгтэй байна))) Тэгээд одоо бид энэ кодыг л оллоо.

Энэ бол бидний цорын ганц урсгал юм. Бие дотор for гогцоо(;;) бид цорын ганц 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 анивчсаныг сайхан өнгөрүүлээрэй.

Тэгээд л болоо. Микроконтроллеруудыг ChipResistor дэлгүүрээс хамгийн хямд үнээр, нэг бүрийг нь 78 рублиэр худалдаж авах боломжтой. За тэгээд хямдруулна гэвэл жижиг бөөний худалдаа бас бий. 35 ширхэгээс аль хэдийн 50 рубль байна.
DipTrace-д зориулсан төсөл.
Тэгээд мэдээж видео.


зочин 12/31/15 10:35

Саяхан би ATMEGA16 дээр давтамж хэмжигч, гадна 8 битийн тоолуурыг 74 логик дээр хиймээр санагдлаа, энэ нь хангалттай хурдан байсангүй. Миний толгой ассемблер дээр бичиж чадахгүй, гадаад тоолуурыг 16 битээр хаших нь маш их зовлон юм. өгзөг.AVR бол өнгөрсөн зуун, хямд хянагч биш. Зохиогчийг нь дэмжинэ, AVR бол Шат өнгөрлөө, би бас stm32f100 чип дээр CP2103 USB адаптер чип худалдаж авсан, удахгүй бүгд AVR-аас татгалзах болно.

Алексей 31.12.15 12:26

Би санал нийлэхгүй байна. Гэсэн хэдий ч Arduino хөгжсөөр байгаа бөгөөд олон хүн үүнтэй холбоотой байдаг бөгөөд сүүлийнх нь эргээд AVR дээр ажилладаг. STM-д орох нь дараагийн түвшинд очсонтой адил юм. Тэгж яривал цэцэрлэгээс сургууль хүртэл.

НЭРГҮЙ 12.02.16 10:44

AVR болон STM32 нь хоорондоо өрсөлддөггүй процессорууд юм. Таны хавтан хамгийн чухал параметрийг агуулдаггүй - энэ бол одоогийн хэрэглээ юм !! Тэднийг хараад та нулимс дуслуулж болно. Atmega 328 - – Идэвхтэй горим: 0.2 мА – Унтраах горим: 0.1 мкА – Эрчим хүч хэмнэх горим: 0.75 мкА (32 кГц RTC орно) STM32F030K6T6 48 МГц - Идэвхтэй горим: дагалдах төхөөрөмжүүд 23.3 мГц асаалттай: 23.3 mA зогсолт: 23.3 мкм. 0.048 мА STM32 нь цахилгаан эрчим хүчийг хайр найргүй хэрэглэдэг - ойролцоогоор AVR-ээс 100 дахин их. Та STM32 төхөөрөмжийг батарейгаас тэжээх боломжгүй. Гэхдээ AVR нь хэдэн сарын турш ажиллах болно. Тиймээс AVR-аас татгалзахад хэцүү байдаг. Бүгдэд нь амжилт хүсье.

Алексей 12/02/16 10:54

Мөн хэн ч биднийг AVR-аас татгалзахыг санал болгодоггүй. Би зүгээр л захын ялгааг харуулж байна. Би AVR номын сангаа хадгалсаар байгаа бөгөөд ATMega8A-г үндсэн MCU болгон хадгалсаар байна.

Сергей 24/02/16 18:02

Миний бодлоор шинэ STM32-г тэтгэвэрт гарсан AVR-тай харьцуулах нь хачирхалтай юм. Хэрэв та STM32-г ATMEL хянагчтай харьцуулахыг хүсвэл ATSAM гэр бүлтэй харьцуулж, AVR биш.

Андрей 24.02.16 18:06

Энэ тэтгэвэр авагч хэн бэ? AVR амьд байгаа бөгөөд хэр удаан амьдрахыг хэн мэдэх билээ. Хүснэгтээс харахад миний бодлоор харьцуулалт нь архитектурын хувьд биш харин захын талаар илүү их байдаг.

Алексей 24.02.16 19:04

За эхэлж байна. Одоо AMD болон Intel-ийн талаар ярилцъя.

Сергей 24/02/16 22:02

Хаб дээр нэг "мэргэжилтэн" AVR нь стандарт LCD-г холбох зэрэгцээ автобусгүй гэж бичсэн боловч STM32 ...

Алексей 24.02.16 22:36

Стандарт LCD нь юу гэсэн үг вэ? Энэ нь FSMC-тэй холбоотой юу? Тиймээс энэ нь зөвхөн дэлгэцийн хувьд биш, мөн санах ойд зориулагдсан юм. Зүгээр л зэрэгцээ автобус. AVR-д бас байдаг, жишээ нь Mega8515. SRAM-г түгжээний бүртгэлээр дамжуулан холбож болно.

Сергец 25/02/16 06:24

Алексей, би юу яриад байна вэ?! Та миний мессежүүдийн утгыг ойлгохыг ч хичээхгүй байх шиг байна.

Алексей 25/02/16 09:38

За, өөр өөр компанийн хоёр ижил микроконтроллерыг харьцуулах нь ямар учиртай юм бэ? Аль аль нь ARM цөм дээр байдаг. Хэрэв та үнэхээр сонголттой бол AVR-ийг STM8-тай харьцуулах хэрэгтэй. Дараа нь би захын ойролцоо, хэлбэр хүчин зүйл, үнэ зэргийг анхаарч үзсэн. Бас өөр архитектур.

Адлан 03.06.16 17:40

Сайн уу. Туслаач, хэн чадах вэ. Суулгасан Хамгийн сүүлийн үеийн хувилбарКуба 4.15, F1 номын сан 1.4.0. EWARM дээр үүсгэсэн хоосон төсөл хөрвүүлээгүй - зуу гаруй алдаа байна. Энэ юу байж болох вэ? Баярлалаа [имэйлээр хамгаалагдсан]

Алексей 06/03/16 20:48

Адлан, таны хийх ёстой хамгийн эхний зүйл бол эмхэтгэхгүй төсөл байршуулах явдал юм.

Баримт бичиг 07/18/16 21:51

"AVR нь Arduino болон энгийн програмчлалаар сайрхдаг нь үнэн." Тэр юугаараа сайрхаж чадах вэ? ;D

Алексей 19/07/16 11:41

Энэ бол тэнэг харьцуулалт. Нэгдүгээрт, STM нь Arduino-ийн нуклео хэмээх аналогтой. Хөтөлбөрүүдийг шууд хөтөчөөр дамжуулан онлайн IDE-д бичдэг. Гэхдээ чулуун давуу тал нь биечлэн, дараа нь. Үндсэн үйлдлийн давтамж нь 72 МГц, AVR ийм хурдыг мөрөөдөж ч чадахгүй байв. Мэдээжийн хэрэг, хэрэв та LED-ийг анивчвал ямар ч ялгаа байхгүй, гэхдээ хэрэв та тэнхлэг болон олон тооны дагалдах хэрэгслийг эхлүүлбэл AVR алга болно. Битийн багтаамж, 32 нь 8-аас хол байна. STM дээрх захын төхөөрөмжүүд нь 3 I2C, 3 SPI, 6 UART, USB, CAN, Ethernet-г агуулж болно. Бараг бүх зүйл дахин зураглах, өөрөөр хэлбэл мк-ийн бусад хөл рүү шилжүүлэх чадвартай байдаг. Мөн DMA байдаг бөгөөд энэ нь захын төхөөрөмжтэй ажиллах бие даасан сопроцессор юм. Тиймээс AVR тасалдал нь хажуугаар нь сандарч тамхи татдаг. Тоног төхөөрөмжийн SDIO байдаг бүрэн хэмжээний ажил CD карттай, AVR дахь суга таяг ISP биш. Ерөнхийдөө энд маш олон зүйл байдаг, гэхдээ AVR цэцэрлэгийн хамгийн том чулуу бол дуу чимээний дархлаа юм. Цахилгаан мотороос ойролцоох кабелиар AVR-ийг унтраах нь тийм ч хэцүү биш боловч STM-ийг туршиж үзэх хэрэгтэй. Тиймээс би Arduino-г шоолохыг зөвлөхгүй.

зочин 08/11/16 23:27

MICROCHIP нь AVR-ыг шингээсэн!))))))))))))

Алексей 12/08/16 08:35

Таван жилийн өмнөх шиг бид мэдээнээс хоцорсон.

Владимир 17/08/16 22:56

Алексей! 2016 оны 1-р сард Microchip Atmel-ийг 3.56 тэрбум доллараар худалдаж авсан.Ямар 5 жил вэ?

Алексей 18/08/16 10:30

Энэ нь де-юре боловч де-факто 2008 оноос хойш үргэлжилж байна. Тэгэхээр би 5 жил биш 8 жилийн өмнө үнэхээр алдаа гаргасан.)))

Владимир 18/08/16 23:53

Алексей! Би stm32 руу шилжиж эхлэв! Автономит горимд хэрэглээний хувьд тэрээр бүх зүйлийг цаглахгүй байхыг зөвлөж байна, тэгвэл хэрэглээний гүйдэл буурах болно.

Олег 11.09.16 22:31

STM дээрх мэдээллийн хуудаснаас би AVR-тай адил CLK системийн цагийн хэрэглээний графикийг олж чадаагүй бөгөөд тэнд байгаа хавтангуудын дагуу STM32 нь хэвийн горим болон Сул зогсолтын горимд хоёуланд нь шууд алддаг. Тиймээ, энэ STM32 нь 72 МГц-ийн цагтай байдаггүй - ердөө 48 max, тэгээд л 32 битийн 8 beatnik AVR-тэй байсан ч гэсэн энэ нь илүү дээр болсон бөгөөд дашрамд хэлэхэд, үйлдвэрлэгч өгөгдлийн хуудсанд хэдэн ширхэг болохыг бичээгүй байна. STM32 машины циклийн цагийн циклүүд нь AVR-ийн хувьд 1-ийн эсрэг 2 цагийн мөчлөгтэй тэнцэх юм бол 48/2 = 24 бодит МГц - AVR-ийн 20 МГц-тэй бараг ижил байна гэж бодоорой. Тэгэхээр та бүхний яриад байгаа STM32-ийн гайхамшиг хаана байна вэ гэдэг асуулт гарч ирнэ.

НЭРГҮЙ 11.09.16 23:03
Алексей 11/10/16 00:23

Би маргахыг ч хүсэхгүй байна. Intel эсвэл AMD аль нь дээр вэ? Эсвэл Жигули эсвэл Волга уу? STM нь USB, CAN, Ethernet, SDIO болон AVR-ийн зөвхөн мөрөөдөж чадах бусад нэмэлт төхөөрөмжүүдтэй. Эцэст нь санах ойд шууд нэвтрэх боломжтой бие даасан сопроцессорын хувьд DMA байдаг бөгөөд үүний өмнө бүх AVR нь хажуугийн утааг тасалдуулж байдаг. Жишээлбэл, эхний цувралууд нь 3 UART, 2 SPI, 3 I2C-тэй. Портуудын дахин зураглал байгаа бөгөөд та самбарыг хэрхэн задлах талаар санаа зовох шаардлагагүй болно. Хэрэв та AVR-тэй ажиллах дуртай бол хэн таныг зовоож байгаа бол түүнийгээ ажиллуулаарай. Өнөөдрийг хүртэл би жижиг төслүүдэд зориулж мега найм хийж, гомдоллодоггүй. Тийм ээ, AVR-ыг асаагуурын хажууд нааж, хөндлөнгийн нөлөөгөөр толгойгоо хэрхэн цохиж байгааг хараарай. AVR нь EMI хамгаалалтгүй. Тиймээс AVR ийм нөхцөлд үхдэг тул PIK-ийг үргэлж машины дохиололд суурилуулсан. Яах гэж маргах вэ, үхсэн тоо.

Корнет 27.11.16 21:22

Дашрамд хэлэхэд STM32 дээр Arduino аль хэдийн байгаа. Энэ бол Amperka болон JS-ийн бүх төрлийн Espruino юм) Түүнээс гадна, хэрэв микрочипийг Атмел авсан бол тэдгээрийг шургаарай.

Алексей 27.11.16 21:44

Espruino нэр нь тухайн үеийн хамгийн алдартай хобби платформ болох Arduino-г элэглэсэн боловч Espruino сонгодог хувилбартай нийцэхгүй байна. Arduino Unoмеханик ч, программч ч биш.(Амперкагаас иш татсан)
Би бас Nucleo самбартай бөгөөд энэ нь самбарын геометрээс бусад тохиолдолд Arduino-тай ямар ч холбоогүй юм)))
Ерөнхийдөө би одоогийн даалгаварт тохирсон MK ашигладаг.

Андрей 20/12/16 22:50

Хэн илүү төлөх дуртай вэ: энэ нь үнэ цэнэтэй attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2.1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT time control for dead+ -сувгийн PWM горим ) -4/ADC-2/72MHz CPU/=2.3$.Миний бодлоор AVR ашиглан RLC хэлхээнд эсэргүүцэл хэмжигч хийх нь бараг боломжгүй юмуу 10 чулуутай.Гэхдээ та үүнийг хийж болно. STM болон FFT (DMA тусалдаг). Би үүнийг ямар нэгэн байдлаар Mega10 (нарийвчлал 1 герц) дээр давтамж хэмжигч хийж үзсэн - энэ нь хангалттай хурдан биш байсан (эсвэл шилжилтийн бүртгэлтэй гадаад 32 бит тоолуур суурилуулах - хэмжээсүүд нь хаанаас ирдэг) ) Би жилийн өмнө AVR-аас татгалзсан, AVR бол чинээлэг хүмүүст зориулагдсан юм.

Андрей 20/12/16 22:53

ANONYMOUS бичжээ - “Мөн энд STM32-ийн орос хэл дээрх тайлбараас өөр нэг ишлэл байна - “...
мөч
хүлээн авч байна
тасалддаг
өмнө
эхэлсэн
гүйцэтгэл
эхлээд
багууд
зохицуулагч
тасалддаг
зарцуулагдаж байна
зөвхөн
арван хоёр
мөчлөг
цаг
дохио"

Энэ үнэн. Гэхдээ 32 битийн хоёр тоог avr-аар үржүүлээрэй - тодорхой 8-10 цагийн мөчлөг!

Алексей 20/12/16 23:31

Тийм ээ, би энэ халивар эхэлсэнд харамсаж байна.))))

Александр 21/12/16 00:27

Би сэтгэгдлийг уншаад санав.
Хоёр хүүхэд хамгаалагдсан хязгаарлагдмал орчинд
Нэг дудук!
Хоёрдугаарт, дуугарах!
Эхлээд Дудука! (интонац нь илүү аймшигтай)
Хоёрдугаарт, BIBIKA! (Илүү илэрхий аялгуутай)
Анхны ДУДУКА! (Аль хэдийн хашгирч байна)
Хоёр дахь BIBIKA!!! (Бараг уйлах)
....
Энэ тулаан дууслаа, хоёулаа зогсож, уйлж байна, нэг нь нөгөөгөөсөө чанга.)))

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 автобусны нэг

Игорь 08.06.17 22:33

Тиймээс зөөврийн компьютерийг суулгагдсан системд нэн даруй нэгтгэцгээе, тэдгээр нь STM-ээс хэдэн зуу дахин сайн, тэнд зүгээр л маш олон нэмэлт төхөөрөмжүүд байдаг, Wi-Fi, bluetooth байдаг, тэр байтугай програмистууд ч хэрэггүй, тэр даруй дэлгэцтэй байна. програм бичээд шууд ажиллуулах гар, программист болон дибаг хийгч шаардлагагүй.
Энэ нь хааяа хагас метрийн гүнтэй хоёр нүх ухахын тулд зуслангийн байшиндаа экскаватор худалдаж авахтай адил юм.
STM-ийг термостат, цаг, жинд оруулах нь миний бодлоор энэ нь хэвийн зүйл биш юм. Дашрамд хэлэхэд тийм ээ, яах вэ тогтворгүй санах ой, тиймээс би термостат хийж, температурыг тохируулж, дараа нь гэрэл унтарч, тохиргоо алдагдах болно. Гэхдээ цаашид ажиллуулахын тулд нэг удаа тохируулах ёстой суулгагдсан системд утгууд нь үүрд хадгалагдах ёстой.

Алексей 09.06.17 08:25

Жишээлбэл, STM32F030F4P6 чип-дип нь 48 рубль, шууд аналог ATtiny2313 нь 98 рубльтэй байдаг. Тэдний аль нэг нь термостат барихад хангалттай байх болно гэж би бодож байна. Мөн STM-ийн санах ойн нөхөн олговор нь ямар ч температур мэдрэгчтэй байж болно. Тийм ээ, ядаж ижил DS18B20 дээр. Зөөврийн компьютерын хувьд аливаа төлбөр хүлээн авах терминал нь үйлдлийн систем, дэлгэц бүхий компьютер суурилуулсан байдаг. Тиймээс ийм системүүд хүртэл байдаг. MK сонгохдоо юуны түрүүнд хямд үнэтэйг нь сонгох хэрэгтэй. Хэрэв энэ хобби бол гагнуурын ажилд төвөг учруулахгүйн тулд та Arduino худалдаж авах боломжтой бөгөөд системийг үйлдвэрлэж, хэдэн зуугаар нь үйлдвэрлэхээр төлөвлөж байгаа бол пенни бүр нь чухал юм. Үнэ нь 48 байхад MK-д 50 рубль хэтрүүлэн төлөх нь боломжгүй тансаг байдал юм.

Руслан 17.06.17 21:46

Алексей, та яагаад IAR програмчлалын орчинг сонгосон бэ?
Шинэхэн хүмүүст аль орчинг сонгох нь дээр вэ (ингэснээр маш олон зөвлөмжүүд байдаг Atmel Studio)?

Алексей 17.06.17 22:07
Руслан 17.06.17 22:56
Хэрэв би "муу" харагдаагүй бол яаж хийхийг харах эсвэл унших холбоосыг надад өгөөч!
Илүү сайн, видео хий, би олон эхлэгчдэд (зөвхөн биш) үүнийг үзэх сонирхолтой байх болно гэж бодож байна!
Урьдчилан баярлалаа!
Алексей 05.08.17 10:19
Руслан 22.11.17 12:17

Би үүнийг хэлэх гэсэн юм https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 минут!!!

Руслан 22.11.17 12:18

Алексей, "тооцоолол"-той хэрхэн ажиллахаа надад хэлээч, тэгэхгүй бол ийм мэдээлэл хаана ч байхгүй бөгөөд таны видеонуудад "Бяцхан хүүхдүүдэд зориулсан C" байдаггүй, гэхдээ надад үнэхээр хэрэгтэй байна!
Би AVR-тай тоглож байхдаа тоолох гэх мэт гайхамшгийг хэзээ ч харж байгаагүй, гэхдээ одоо би STM-г сонирхож байгаа бөгөөд тэд маш олон байна! Мөн тэдэнтэй хэрхэн ажиллах талаар мэдээлэл алга байна!
Бодит кодын жишээ энд байна:


StatusCode MIFARE_Read(байт блокAddr, байт * буфер, байт * буферийн хэмжээ);

StatusCode дугаар хаана байна:


enum StatusCode: байт (
STATUS_OK , // Амжилттай
STATUS_ERROR , // Харилцааны алдаа
STATUS_COLLISION , // Мөргөлдөөн илэрсэн
STATUS_TIMEOUT , // Харилцааны завсарлага.
STATUS_NO_ROOM , // Буфер хангалттай том биш байна.
БАЙДАЛ_ДОТООД_АЛДАА , // Дотоод алдаакодонд. Ийм байх ёсгүй ;-)
STATUS_INVALID , // Буруу аргумент.
STATUS_CRC_WRONG , // CRC_A таарахгүй байна
STATUS_MIFARE_NACK = 0xff // MIFARE PICC NAK-тай хариу өгсөн.
};

Энэ бол Arduino номын сангаас (C++), гэхдээ Кэйл үүнийг харааж зүхэж байна!
Тооллогын функцийн өгөөжийг хэрхэн зөв бичих вэ?

Руслан 22.11.17 12:29

Функцийн аргументуудын аль нэгийг тооллого хэрхэн зарлах вэ:


хүчингүй болсон PCD_WriteRegister(PCD_Register reg, байт утга);

PCD_Register жагсаалтад орсон газар:


enum PCD_Register: байт (
// Хуудас 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 нь тооллого боловч кодын хаана ч зарлаагүй бөгөөд хаанаас ирснийг би ойлгохгүй байна!
Би интернетээс маш олон хуудас уншсан бөгөөд эдгээр тооллогыг тодорхойлолтоор сольж болно гэсэн мэдээллийг олж мэдсэн боловч би тэдэнтэй хэрхэн ажиллахыг мэдэхийг хүсч байна!!!

Руслан 11.11.22 12:35

Би таны хариултыг тэсэн ядан хүлээж байна!
Магадгүй тэдэнтэй хэрхэн ажиллах талаар видео хийж, бусдад ашиг тустай байх болно, ийм видео байдаггүй (ядаж би олсонгүй) учир нь видео маш хэрэгтэй байх болно гэж бодож байна!

Дмитрий 11.11.28 22:02

"энгийн програмчлал"

Програмчлалын хянагчдад зориулсан сонирхолтой эрхтэн. Ерөнхийдөө 32-битийг 8-биттэй хэрхэн харьцуулах боломжтой байсан нь тодорхойгүй байна. Зарпорожецтэй Porsche Cayenne шиг.

Алексей 29/11/17 10:24

Та харьцуулж болно, та чадна. Энэ харьцуулалтад Порше нь Запорожецээс хямд гэдгийг та анхаарч үзэх хэрэгтэй. Урологийн хувьд энэ нь илүү хурц юм. Тиймээс би үүнийг засахгүй.

Константин 12/23/17 00:06

Руслан, би чамайг яаж хайгаад юу ч олохгүй байгааг ойлгохгүй байна (чи хайхгүй байгаа бололтой). Эдгээр нь Си хэлний үндсэн ойлголтууд юм (Зөвхөн MK-д төдийгүй компьютерт). Керниган, Ричи нарын номыг уншаарай, тэнд бүх С-г маш сайн дүрсэлсэн байдаг.
Таны асуултанд хэн ч хариулахгүй, энэ бол энгийн зүйл юм.

НЭРГҮЙ 11.02.18 16:27

Та яагаад 32 битийн ST MK-г 8 битийн Atmel-тай харьцуулж байгаа юм бэ? Тэнэг харьцуулалт. Энэ нь 32 битийн Atmel AT91SAM-ыг 8 битийн STM8-тэй харьцуулахтай тэнцэх бөгөөд Atmel нь бүр илүү хүчирхэг 32 цэнэглэгчтэй гэж тооцвол.

Алексей 13/02/18 12:18

Учир нь энэ нийтлэлийг бичиж байх үед 8 зурвасын ST худалдаанд гараагүй бөгөөд мега болон STM32 ижил үнэтэй байна.

STM32_Dev 06/19/19 13:59

За, AVR нь ижил зүйлийг хийхэд 4-5 цагийн цикл зарцуулдаг!!! Зүгээр л. Эндээс харахад AVR нь STM32-аас илүү сайн хийгдсэн, хийлдэг цагтай бөгөөд STM32 нь AVR шиг EEPROM-гүй байдаг.

16 МГц давтамжтай AVR цаг - 1/16000000 = 0,0000000625 сек = 62,5 нс * 5 цаг = 312,5 нс.
48 МГц давтамжтай ARM цаг - 1/48000000 = 0.0000000208 сек = 20.8 нс * 12 цаг = 250 нс.

Музей атмега нь STM32-ийн 12 цагийн циклээс 5 цагийн циклээ уртаар тооцдог юм шиг санагддаг)))

STM32-д eprom байхгүй юу? Мэдээж? STM32L152 - 8кБ eprom! Атмега яах вэ? 512 байт? Өө маш олон!!! Би тэнд юу бичихээ ч мэдэхгүй байна. Бодцгооё... ммм... 16 хувьсагч тус бүр 4 байт)) За, хянагч нарын дунд аадар бороо орж байна))

SIM31 06/30/19 19:29

Хэрэглээний хувьд та мөн харьцуулж болно, шинэ атмега, аттини нь маш хэмнэлттэй.
Мөн бүх зүйл өөрийн гэсэн хэрэглээтэй байдаг. Хэрэв танд эрчим хүч хэрэгтэй бол Raspbery Pi 4 аваад санаа зоволтгүй, Python-д бүр илүү олон боломжууд бий, бүр бүрэн хэмжээний вэб сервер тохируулах, тэр ч байтугай Quake 3D ажиллуулах боломжтой.
Хэрэв та өгөгдлийн урсгалыг боловсруулах шаардлагатай бол "Марс Ровер" "Mars Rover 2" төслийг үзнэ үү)
Зохиогч олон эерэг талуудтай боловч Ардуина бүх амьд хүнээс илүү амьд байгаа нь бүх зүйл тийм ч энгийн биш гэсэн үг юм.


Олон жилийн турш радио сонирхогчид PIC болон AVR гэр бүлийн найман битийн микроконтроллеруудыг ашиглаж ирсэн. Тэд хямд үнэ, нарийвчилсан баримт бичиг, програмчлалын хялбар байдал, суулгахад хялбар зэргээс шалтгаалан алдартай. Гэсэн хэдий ч ийм микроконтроллерийн хүч нь даалгаврыг шийдвэрлэхэд хангалтгүй байх тохиолдол ихэвчлэн байдаг. Хамгийн энгийн жишээ бол микроконтроллер дээрх давтамж хэмжигч эсвэл дохио үүсгэгч бөгөөд хамгийн их хэмжсэн эсвэл үүсгэсэн давтамж нь мэдээллийг боловсруулах эсвэл гаргах хурдаас шууд хамаардаг.

Хурднаас гадна найман битийн микроконтроллерууд нь бусад хязгаарлалттай байдаг, жишээлбэл, олон AVR загварууд нь зөвхөн нэг техник хангамжийн цуваа порттой байдаг бөгөөд энэ нь гадны төхөөрөмжөөс мэдээлэл хүлээн авч, боловсруулалтын үр дүнг хэрэглэгчдэд нэгэн зэрэг илгээх боломжийг олгодоггүй. График үзүүлэлт дээр мэдээллийг харуулах гэх мэт хурд, санах ойн асар их нөөц шаарддаг ийм "учирхай" зүйлсийг дурдахгүй өнгөрч болохгүй. Ийм хэд хэдэн хязгаарлалтыг шинжилсний дараа зохиогч STM32 гэр бүлийн микроконтроллер руу шилжих санааг гаргаж ирэв.

Жишээлбэл, ижил үнийн категорийн хоёр микроконтроллерыг авч үзье - STM32F103C6 ба ATmega328P.

Хүснэгт 1

Микроконтроллерийн төрөл

Процессорын хэмжээ

Тугалганы давирхай, мм

Цагийн давтамж, МГц

Флаш санах ойн хэмжээ. KB

RAM-ийн хэмжээ, KB

USART дугаар

16 битийн таймерын тоо

Оролт/гаралтын шугамын тоо

Ойролцоогоор үнэ, урэх.

Тэдний харьцуулсан параметрүүдийг хүснэгтэд үзүүлэв. 1. Харьцуулалтын үр дүн нь бүр гайхмаар. 32 битийн микроконтроллер нь найман битийн микроконтроллерээс бараг бүх талаараа илүү хүчирхэг төдийгүй хямд юм. Мэдээжийн хэрэг, гэртээ 0.5 мм-ийн зүү бүхий микроконтроллер гагнах нь тийм ч хялбар биш юм. Аз болоход ихэнх тохиолдолд үүнийг хийх шаардлагагүй - зах зээл дээр STM32 гэр бүлийн микроконтроллер бүхий олон төрлийн хөгжүүлэлтийн самбарууд байдаг бөгөөд энэ нь янз бүрийн хэрэглээнд хангалттай юм. Тэднийг илүү нарийвчлан авч үзье.

STM32F4-НЭЭЛТ

Энэхүү самбар (1-р зурагт үзүүлсэн) нь STM микроконтроллеруудыг судалж буй эхлэгчдэд хамгийн тохиромжтой байж магадгүй юм. Нэгдүгээрт, энэ нь олон тооны захын төхөөрөмжтэй. Уг самбар нь микроконтроллероос гадна микро цахилгаан механик акселерометр, микрофон, аудио DAC, хоёр USB холбогч, товчлуур, дөрвөн LED агуулсан.

Микроконтроллерийн тээглүүрүүдийг самбарын зүүн ба баруун ирмэгт холбогчийг холбох зориулалттай контакт дэвсгэр дээр гаргаж авдаг бөгөөд энэ нь шаардлагатай бүх гадаад төхөөрөмжийг холбоход хялбар болгодог. Самбар дээр суурилуулсан STM32F407VGT6 микроконтроллер нь маш сайн үзүүлэлттэй: 1 MB FLASH санах ой, 192 KB RAM, 168 МГц давтамжтай.

Эцэст нь уг самбар нь суурилуулсан ST-LINK/V2 дибаглагчаар тоноглогдсон бөгөөд энэ нь зөвхөн самбар дээрх микроконтроллер дээр төдийгүй бусад самбар дээр байрладаг ижил гэр бүлийн микроконтроллерууд дээр програмуудыг дибаг хийхэд ашиглаж болно. Тэдгээрт шилжих нь зөөврийн холбогч болон SWD холбогч ашиглан хийгддэг.

Самбарын үнэ 800 орчим рубль бөгөөд энэ нь нэлээд хүлээн зөвшөөрөгдөхүйц гэж үзэж болно.

STM32F103RBT6 Хөгжлийн Зөвлөл

Дараагийн сонирхолтой сонголт бол STM32F103RBT6 микроконтроллер бүхий хөгжүүлэлтийн самбар юм (Зураг 2).

Энэ нь өмнөх самбар дээр суулгаснаас арай сул байна - 72 МГц цагийн давтамж, 128 КБ FLASH санах ой, 20 КБ RAM, гэхдээ захын төхөөрөмжүүд нь маш сонирхолтой юм. 320x240 пикселийн нягтралтай, 2.8 диагональ бүхий TFT мэдрэгчтэй дэлгэц, компьютертэй мэдээлэл солилцох USB порт, SD санах ойн картны үүр, 32768 Гц давтамжтай кварц цаг, дэлгэцийн тасалгаатай. бодит цагийн цагийн батерей болон дибаг хийх программуудад зориулсан ST-LINK холбогч.

Энэ хавтангийн үнэ мөн ойролцоогоор 800 рубль байдаг боловч энэ нь суурилуулсан дибаглагчгүй гэдгийг тэмдэглэх нь зүйтэй. Програм татаж авахын тулд та тусдаа ST-LINK дибаглагч худалдаж авах эсвэл дээр дурдсан STM32F4-DISCOVERY самбарыг ашиглах ёстой.

Maple Mini

Энэхүү самбарын гаднах ижил төстэй байдал (Зураг 3) нь алдартай Arduino модулиудтай гайхалтай харагдаж байна. Мөн энэ нь санамсаргүй тохиолдол биш юм.

Maple Mini хавтанг Arduino Nano-г орлуулахаар зохион бүтээсэн. Arduino-д суулгасан AVR гэр бүлийн микроконтроллеруудын програмчлалын хэл, хөгжүүлэлтийн орчин нь STM гэр бүлд тохируулагдсан. http://leaflabs.com/docs/maple-q uickstart.html хаягаар орж Maple IDE програмчлалын хэл болон хөгжүүлэлтийн орчны талаарх дэлгэрэнгүй мэдээллийг авна уу.

Энэхүү хөгжүүлэлтийн самбар нь 72 МГц давтамжтайгаар ажилладаг STM32F103CBT6 микроконтроллер, 128 KB FLASH санах ой, 20 KB RAM-тай бөгөөд энэ нь ямар ч Arduino модулиас хамаагүй илүү юм. Мөн хөгжүүлэлтийн орчин бараг өөрчлөгдөөгүй хэвээр байгаа нь бүр ч илүү давуу тал юм.

Бяцхан хэмжээтэй хэдий ч Maple Mini нь 34 оролт / гаралтын шугам, хоёр SPI, хоёр I2C интерфэйсийн суваг, гурван цуваа порт зэрэг маш олон төрлийн дагалдах хэрэгслүүдээр хангадаг болохыг бид тус тусад нь тэмдэглэж байна. Энэ нь янз бүрийн сонирхогчдын хөгжилд амжилттай ашиглах боломжийг олгодог. Жижиг хэмжээтэй тул Maple Mini-г боловсруулж буй төхөөрөмжид шууд суулгаж болно.

Жинхэнэ Maple Mini самбарыг хөгжүүлэгчдийн вэбсайтаас 35 доллараар худалдаж авах боломжтой. Хүргэлтийн зардал дахиад 5 доллар болно. Хятадад үйлдвэрлэсэн хавтангийн хуулбар нь хагас дахин үнэтэй болно.

Програм хангамж

STM32 гэр бүлийн микроконтроллеруудад зориулсан программуудыг бэлтгэхэд ашиглаж болох хөгжүүлэлтийн орчны хэд хэдэн сонголт байдаг:

Арилжааны IAR Embedded Workbench, AtollicTrueSTUDIO, Keil гэх мэт. Эдгээр бүрэн хэмжээний бүтээгдэхүүнүүд нь нэлээд үнэтэй бөгөөд лицензийн үнэ нь 1000 еврогоос эхэлдэг, гэхдээ хөгжүүлж буй програмын эзлэхүүнийг хязгаарласан үнэгүй демо хувилбарууд байдаг; ихэнх нь энгийн төслүүд нь хангалттай;

ARM-GCC хөрвүүлэгчтэй үнэ төлбөргүй Eclipse-ийг ашиглахын өмнө хөрвүүлэгчийн энгийн тохиргоог хийх шаардлагатай. Өнөөдрийн цорын ганц давуу тал бол зөвхөн Windows дээр төдийгүй Линукс дээр ажиллах чадвар юм;

Үнэгүй CooCox IDE (CoIDE) нь ижил Eclipse засварлагч дээр суурилсан. ST-LINK-ээр программуудыг ачаалж, дибаг хийдэг. Өмнөх сонголтоос ялгаатай нь CoIDE нь тусгай тохиргоо шаарддаггүй бөгөөд суулгасны дараа шууд ажилладаг. Энэ сонголт нь хамгийн тохиромжтой бөгөөд ашиглахад тохиромжтой.

Ямар ч микроконтроллерийн анхны програмын сонгодог LED анивчдаг STM32F4-DISCOVERY самбарт зориулсан жишээ программыг CooCox IDE ашиглан бүтээцгээе. STM32F4-DIS-COVERY самбар дээр дөрвөн LED байдаг бөгөөд тэдгээр нь микроконтроллерийн PD12-PD15 шонтой холбогдсон байна. Тэднийг ээлжлэн анивчуулъя.

Алхам 1. CoIDE хөгжүүлэлтийн орчинг ажиллуулж, төсөл үүсгэ. Зурагт үзүүлсэн унадаг жагсаалтаас. 4, STM32F407VG микроконтроллерыг сонгоно уу.

Алхам 2. Зурагт үзүүлсэн шиг. 5, төсөлд хэрэглэгдэх бүрэлдэхүүн хэсгүүдийг сонго. Гол нь GPIO (оролт-гаралт), C Library (Си хэлний үндсэн функцууд) болон M4 Core (процессорын үндсэн функцууд) юм. Бүрэлдэхүүн хэсгийг идэвхжүүлэх үед CoIDE нь шаардлагатай файлуудыг төслийн хавтас руу автоматаар хуулдаг бөгөөд энэ нь маш тохиромжтой.

Алхам 3. Програмын текст оруулах. Энэ нь нэлээд богино бөгөөд хүснэгтэд өгсөн болно. 2.

Таны харж байгаагаар бүх зүйл энгийн бөгөөд ойлгомжтой байдаг. AVR микроконтроллеруудад зориулсан програм бичсэн хүмүүс магадгүй танил загваруудыг харах болно - чиглэлийг харуулсан портуудыг эхлүүлэх (оролт эсвэл гаралт), шаардлагатай үйлдлүүдийг гүйцэтгэдэг гол гогцоо. Ерөнхийдөө програмын синтакс нь Си хэлтэй бүрэн нийцдэг бөгөөд үүнд зориулсан уран зохиол хангалттай байдаг. Мөн Интернет дээр STM32 програмчлалын талаар маш олон нийтлэл байдаг. Олон жишээг хөгжүүлэлтийн самбарт хавсаргасан бөгөөд тэдгээрийг дээж болгон ашиглаж болно.

Програмын текстийг оруулсны дараа "Flash to flash" дэлгэцийн товчлуур дээр дарж микроконтроллер руу татагдана. Самбар дээрх LED нь анивчиж эхэлдэг. Дибаг хийх чадварыг тусад нь тэмдэглэх нь зүйтэй - завсарлагааны цэгийг програмын аль ч хэсэгт тохируулж болно, та хувьсагчийн утгыг харж програмыг алхам алхмаар ажиллуулж болно.

Мэдээжийн хэрэг, энэ жишээ тийм ч тохиромжтой биш юм. Жишээлбэл, та LED-ийн анивчсан байдлыг хянахын тулд таймер тасалдлыг ашиглаж болох бөгөөд энэ нь бусад ажлуудын үндсэн програмын давталтыг чөлөөлдөг. Хүссэн хүмүүс үүнийг өөрөө шийдэж чадна.

Дүгнэлт

Ерөнхийдөө анхны танилцсаны дараа STM32 гэр бүлийн микроконтроллерууд маш таатай сэтгэгдэл үлдээсэн. Бүх зүйл тийм ч төвөгтэй биш байсан бөгөөд хөгжүүлэлтийн орчны тав тухтай байдал, дибаг хийх процесс, олон тооны стандарт функцууд нь хатагтай DOS-ээс Windows руу шилжих шилжилтийг бага зэрэг сануулсан - ерөнхий санаанууд нь адилхан боловч бүх зүйл илүү тохиромжтой, ажиллагаатай.

Гэхдээ энэ гэр бүлийн сонирхогчдын бүтээн байгуулалтын гол сул тал бол хэтэрхий жижиг зүү давирхай хэвээр байна. Гэртээ 0.5 мм-ийн зүү бүхий хавтанг зохион бүтээх, гагнах нь маш энгийн ажил биш юм. Гэхдээ одоогийн үнээр аль хэдийн суурилуулсан микроконтроллер бүхий дибаг хийх самбар нь радио сонирхогч бүрт хүртээмжтэй байдаг.

Бүх зүйлийг STM болон 32 битийн архитектур руу хөрвүүлэх нь үнэ цэнэтэй юу? Мэдээж үгүй. ATtiny хангалттай ажлууд байдаг. Гэхдээ жишээлбэл, гар хийцийн SDR хүлээн авагчийн спектрийг шинжлэх эсвэл сүлжээгээр их хэмжээний мэдээлэл хүлээн авах, дамжуулахын тулд санах ой, гүйцэтгэлийн дутагдалд орохгүйн тулд хүчирхэг микроконтроллерыг нэн даруй ашиглах нь илүү үр дүнтэй байдаг. төхөөрөмжийг сайжруулах.

Cortex цөм дээр үндэслэн тэд микроконтроллер дээрх төхөөрөмжүүдийн мэргэжлийн болон шинэхэн хөгжүүлэгчдийн дунд идэвхтэй нэр хүндтэй болж эхлэв. Үүнд хэд хэдэн шалтгаан бий:
- өрсөлдөгчидтэй харьцуулахад хямд үнэ;
- олон тооны суурилуулсан интерфейс;
- програмчлалын хялбар байдал, өндөр найдвартай байдал.
Гэхдээ бас нэг чухал сул тал бий - бүх STM микроконтроллеруудыг DIP багцад үйлдвэрлэдэггүй бөгөөд энэ нь ихэвчлэн эхлэгчдийг айлгадаг, учир нь гэртээ 0.3 мм-ээс бага замтай самбар хийх нь асуудалтай байдаг. Энэхүү нөхцөл байдал нь ST Microelectronics (Discovery) болон гуравдагч талын компаниудын (Olimex, Pinboard) үйлдвэрлэсэн самбаруудын аль алинд нь асар олон тооны дибаг хийх самбаруудыг зах зээлд гаргахад хүргэсэн. Би Discovery-г гурван шалтгаанаар сонгосон:
- харьцангуй бага үнэ (самбарыг 300 рубльээс худалдаж авч болно);
- сайн хийц (хэдийгээр утастай холбоотой гомдол байдаг боловч тэдгээр нь тийм ч чухал биш);
- олон эх сурвалж, жишээг үйлдвэрлэгчийн вэбсайтад байрлуулсан;
- суурилуулсан програмист байгаа эсэх (та үүнийг тусад нь худалдаж авах шаардлагагүй).
Эхний хичээлийн зорилго нь шинэхэн хөгжүүлэгчдэд дибаг хийх самбар сонгоход нь туслах, ирээдүйд програмчлалын үндсийг заах явдал юм.
За, явцгаая.

STM32F0DISCOVERY

Өмнө нь 8 битийн микроконтроллер ашиглаж байсан хөгжүүлэгчдийг татах зорилгоор энэхүү самбарыг 2012 оны 2-р сард гаргасан бөгөөд ингэснээр энэ орон зайг дүүргэх болно. Би түүний талаар муу эсвэл сайн зүйл хэлж чадахгүй. Хямд үнэтэй энгийн самбар нь эхлэхэд тохиромжтой. Дараах шинж чанаруудтай.
- микроконтроллер: STM32F051R8T6 (Cortex M0, 48 МГц, флаш 64 KB, RAM 8 KB);
- суурилуулсан ST-link/V2, хавтангаас тусад нь ашиглах боломжтой;
- USB эсвэл гадаад 3/5V эх үүсвэрээс тэжээгддэг;
- 4 LED ба 2 товчлуур;
- интерфэйсүүд: USART, SPI, I2C, HDMI;
- таймер 16 ба 32 бит;
- бүх гаралтыг хоёр нэг эгнээний сам руу чиглүүлдэг.
Үнэндээ ийм самбар нь аль хэдийн хуучирсан тул зөвхөн сургалтын эхэн үед л авахыг зөвлөж байна.

STM32VLDISCOVERY

Энэ нь өмнөх самбараас зөвхөн STM32F100RBT6B процессор (Cortex M3, 24 MHz, флаш 128 KB, RAM 8 KB) болон захын самнуудын зохион байгуулалтаар ялгаатай. Дээр дурдсантай адил энэ нь эхлэн хөгжүүлэгчдэд тохиромжтой. Түүний тухай өөр хэлэх зүйл алга.

STM32LDISCOVERY

STM32LDISCOVERY бол өмнөх самбарын зохистой хувьсал юм. Үүний сонирхолтой нь энд байна:
- микроконтроллер STM32L152RBT6 (Cortex M3, 32 MHz, флаш 128Kb, RAM 8Kb, EEPROM 4Kb)
- интерфэйсүүд: USB, USART, SPI, I2C;
- 8 таймер;
- 24 сувгийн 12 битийн ADC;
-12 битийн DAC;
- бодит цагийн цаг;
- LCD хянагч 8x40
- суурилуулсан ST-link/V2.
Самбар дээр дараахь зүйлийг суурилуулсан болно.
- LCD дэлгэц 24x8;
- 4 LED;
- 2 товчлуур;
- мэдрэгчтэй гар;
- Чөлөөт утастай нэг эгнээтэй 2 сам.
Би USB-ийн талаар тусад нь хэлмээр байна: хянагч нь USB 2.0 бүрэн хурд, хост болон төхөөрөмжийн горимуудыг дэмждэг бөгөөд энэ ангийн MK-д ховор тохиолддог.
Үнэн хэрэгтээ самбар нь Cortex-M3 цөмтэй ажиллахад хамгийн сайн сонголт тул үнэ нь бага тул та үүнийг аюулгүйгээр авч болно.

STM32F3DISCOVERY

STM32F3DISCOVERY нь STM-ийн дараагийн үеийн хөгжүүлэлтийн самбарт хамаарах бөгөөд дараах шинж чанаруудтай.
- микроконтроллер STM32F303VCT6 (Cortex M4, 72 МГц, флаш 256 КБ, RAM 48 КБ)
- бодит цагийн цаг;
- суурилуулсан ST-link/V2;
- 13 таймер;
- 12 сувгийн DMA хянагч;
- 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 MB, RAM 192 KB)
- суурилуулсан ST-link/V2;
- таймер;
- DMA хянагч;
- ADC/DAC;
- интерфэйсүүд: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Самбар нь дараах нэмэлт төхөөрөмжүүдийг агуулна.
- тусгай USB порт;
- 3 тэнхлэгт акселерометр;
- 8 LED;
- 2 товчлуур;
- 2 давхар эгнээний сам;
- D ангиллын өсгөгчтэй аудио DAC;
- бүх чиглэлтэй дижитал микрофон.

Би дээр бичсэнчлэн энэ самбар нь миний хувьд гол самбар болсон бөгөөд дуу чимээ, хурдатгал хэмжигчтэй ажиллах чадвардаа сэтгэл хангалуун байсан.

Цаашдын хичээлүүд энэ самбар дээр суурилна.

Дүгнэлт.
Хэрэв та STM дибаг хийх самбартай ажиллаж эхлэхээр шийдсэн бол би танд STM32F4DISCOVERY-г авахыг зөвлөж байна, миний бодлоор энэ нь хамгийн их ажиллагаатай. Цаашдын нийтлэлүүд нь үүнтэй ажиллахад тусгайлан тулгуурлах болно. Ойрын ирээдүйд дараах сэдвээр нийтлэл бичих болно.
- GPIO, таймер, тасалдал гэх мэттэй ажиллах;
- дэлгэц, GPS, GSM модулиуд, температур мэдрэгч, RS-232-ээр дамжуулан компьютертэй харилцах гэх мэт бодит төхөөрөмжүүдийн жишээг ашиглан UART, SPI, I2C, 1 утастай интерфейстэй ажиллах.
Энэ мөчлөгийн эцсийн зорилго нь STM32F4-ийн өргөтгөлийн самбарыг бий болгох явдал юм. Бүх програм хангамж болон хэлхээний диаграммууд олон нийтэд нээлттэй байх болно.