22
32-bitni mikrokontroleri i primena - MS1BMP 4. deo 2013 Nenad Jovičić

32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

  • Upload
    naoko

  • View
    103

  • Download
    0

Embed Size (px)

DESCRIPTION

32-bitni mikrokontroleri i primena - MS1BMP 4 . deo. 2013 Nenad Jovičić. Razvojni sistem STM32VLDISCOVERY. Programiranje i debagovanje. Kratkosponicima na konektoru CN3 se određuje da li je ST-link povezan na ovu pločicu ili neki posljašnji mikrokontroler. - PowerPoint PPT Presentation

Citation preview

Page 1: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

32-bitni mikrokontroleri i primena - MS1BMP

4. deo2013

Nenad Jovičić

Page 2: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Razvojni sistem STM32VLDISCOVERY

Page 3: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Programiranje i debagovanjeKratkosponicima

na konektoru CN3 se određuje da li je ST-link povezan na ovu pločicu ili neki posljašnji mikrokontroler.

Više podataka o razvojnom sistemu se može naći u dokumentu UM0919.

Page 4: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Memorija i butovanje programaNeposredno pre

reseta na osnovu stanja na pinovima BOOT1 i BOOT2 određuje se zona iz koje se startuje izvršavanje programa.

Page 5: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

CMSIS - Cortex Microcontroller Software Interface StandardRazvijen u težnji da se standardizuje pristup

hervderskim resursima Cortex mikrokontrolera i obezbedi portabilnost softvera među različitim proizvođačima.

CMSIS omogućava razvoj ponovo iskoristljivih (reusable) komponenti softvera za sisteme bazirane na ARM Cortex-M.

Sistemi bazirani na ARM Cortex-M tehnologiji imaju veliki broj zajedničkih komponenti hardvera pa i Hardware Abstraction Layer (HAL) može biti veoma sličan.

Page 6: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

CMSIS - komponente Core Peripheral Access Layer

Ova CMSIS komponenta definiše adrese i metode pristupa zajedničkim komponentama i funkcionalnostima (osnovni registri, NVIC, debug podsistem, posebnim registrima) koje se nalaze na svakom Cortex-M sistemu. Ovu komponentu obezbeđuje ARM.

Middleware Access Layer Ova komponenta definiše set zajedničkih API funkcija za pristup periferijama.

Ovaj sloj je definisan od strane ARM i prilagođen od strane proizvođača prema specifičnostima.

Device Peripheral Access Layer Ovaj sloj definiše adrese registara

kao i specifične pristupne funkcije. CMSIS podržavaju C-kompajleri:

ARM RealView (armcc) IAR EWARM (iccarm) GNU Copmiler Collection (gcc)

U novije vreme deo CMSIS-a je postao i DSP middleware

Page 7: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Prvi projekat U okviru workspace-a MS1BMP2013.eww nalazi se projekat GPIO.pew. U glavnom programu se u beskonačnoj petlji neizmenično uključuju i isključuju diode

LED3 i LED4 sa čekanjem implementiranim korišćenjem dummy petlje.

void Delay(__IO uint32_t nCount){ for(; nCount != 0; nCount--);}

while (1) { /* Turn on LD3 and LD4 */ STM32vldiscovery_LEDOn(LED3); STM32vldiscovery_LEDOn(LED4); /* Insert delay */ Delay(0xAFFFF); /* Turn off LD3 and LD4 */ STM32vldiscovery_LEDOff(LED3); STM32vldiscovery_LEDOff(LED4); /* Insert delay */ Delay(0xAFFFF); }

Page 8: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

CMSIS Struktura projekta

Osnovni konfiguracioni heder fajl za odabranu familiju mikrokontrolera

Low-level & API funkcije koje čine biblioteku periferijskih drajvera.

NVIC i SysTick drivers

Peripheral header file Ovaj fajl prilagodjava korisnik

Cortex-M3 prekidi i izuzetci

Page 9: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

CMSIS - fajlovi Fajlovi koje definiše isključivo ARM: core_cm3.c - Core Peripheral Access Layer Source File

Ovaj fajl sadži implementaciju CMSIS intrinsic funkcija koje su

za razliku od intrinsic funkcija u oviru C kompajlera nezavisne od vrste kompajlera 

core_cm3.h - Core Peripheral Access Layer Header File Ovaj fajl sadrži definicije registara periferija jezgra i funkcije za

pristup tim registrima, kao i deklaraciju intrinsic funkcija  CMSIS layer Device Peripheral Access Layer čine sledeći

fajlovi: system_stm32f10x.c - Device Peripheral Access Layer Source File

Ovaj fajl sadži definiciju funkcije SystemInit koja vrši inicijalizaciju dela mikrokontrolera zaduženog za generisanje klok signala i koja se poziva u okviru startup koda

 system_stm32f10x.h - Device Peripheral Access Layer Header File Ovaj fajl sadži deklaraciju funkcije SystemInit 

stm32f10x.h - Device Peripheral Access Layer Header File  Ovaj fajl sadrži definiciju registara periferija mikrokontrolera

kao i definiciju bitova u okviru svakog definisanog registra, bazne adrese registara i numeraciju vektora prekida

Page 10: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

CMSIS - fajlovi stm32f10x_conf.h - Device Peripheral Access Layer

Configuration Header File Ovaj fajl sadrži kontroliše korišćenje periferijskih biblioteka

koje definiše isključivo proizvođač mikrokontrolera. misc.h , misc.c

Ovi fajlovi definišu specifičnosti kontrole prekida, sistemskog takta i reset-a. Formu propisuje ARM, ali ga neznatno redefiniše svaki proizvođač.

stm32f10x_PPP.x Ovi fajlovi pšredstavljaju drajvere za odgovarajuće periferije i

razlikuju se od proizvođača do proizvođača.

Specifičnosti različitih razvojnih okruženja se definišu sledećim fajlom:

startup_stm32f10x_md_vl.s - STM32F10x Medium Density Value Line Devices vector table

Ovaj fajl sadrži vektor tabelu i Reset_Handler ISR u kojoj se vrši setovanje SP, inicijalizacija dela mikrokontrolera zaduženog za generisanje klok signala i pozicioniranje PC na labelu __iar_program_start gde se nalazi kod za inicijalizaciju promenljivih, nakon čega se poziva main funkcija

 Napomena: Ovaj fajl se po pravilu razlikuje od okruženja do okruženja!

Page 11: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Fajlovi koje menja korisnik

stm32f10x_It.h/* Exported functions

----------------------------------------------- */void NMI_Handler(void);void HardFault_Handler(void);…

stm32f10x_It.c#include "stm32f10x_it.h"

…void EXTI1_IRQHandler(void){GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_SET);}

main_X.c#include "stm32f10x.h“int main(void){...GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_SET);…}

stm32f10x_conf.h/* Includes

------------------------------------------------------------------*//* Uncomment the line below to enable peripheral header

file inclusion *//* #include "stm32f10x_adc.h" *//* #include "stm32f10x_bkp.h" */#include "stm32f10x_gpio.h" ……

Page 12: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Korišćenje CMSIS-aPočev od verzije IAR

6.20 CMSIS Core je sastavni deo kompjalera i uključuje se kroz opcije projekta.

Iz tog razloga unutar projektnog direktnorijuma nema fajlova core_3m.c i core_3m.h.

Na sličan način vrši se i kontrola korišćenja DSP biblioteka.

Page 13: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Opcije projekta

Konretan mikrokontroler se definiše preko globalnog simbola što utiče na deklaracije u glavnom heder fajlu

Page 14: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Opcije projekta

Korišćenje periferijskih biblioteka se kontroliše globalnim simbolom koji povezuje konfiguracione heder fajl.

Page 15: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Periferijske biblioteke

U konfiguracionom fajlu se uključuju biblioteke vendor-specific periferija koje obezbeđuje proizvođač mikrokontrolera.U tim hederima se nalaze deklaracije registara, ali i prototipovi specifičnih funkcija za pristup toj periferiji.

Korišćenje funkcija zahteva uključivanje i odgovarajućih source fajlova u projekat!

Page 16: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Provera parametara inicijalizacije

Parametri funkcije su logički izrazi definisani obično u heder fajlovima odgovarajuće periferijske biblioteke

Poželjno je obezbediti kontrolu inicijalizacije periferija i proizvođači to čine preko funkcija za proveru parametara assert_param()

Page 17: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Kontrola provere parametaraFunkcije i logički uslovi za proveru parametara su deo proizvođačkih biblioteka i kao takvi se ne menjaju, a globalna kontrola provere se vrši definisanjem globalnog simbola USE_FULL_ASSERT

Na kraju korisnik ima mogućnost da u definiše sopstvenu funkciju koja se poziva u slučaju da neki parametar nije prošao runtime proveru.

Page 18: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Generisanje taktaSistemski takt:

Klok HSI oscillatora Klok HSE oscillatora Klok PLL - a

Dodatni taktovi:

40kHz low speed interni RC oscilator koji se može koristiti za WDT ili RTC

32.768Khz low speed eksterni kristal koji se može koristitii za RTC

Page 19: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

SystemInit() funkcija

Kroz SystemInit() funkciju proizvođač obezbeđuje jednostavnu konfiguraciju takta.

Page 20: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Inicijalizacija periferija1) Pre konfigurisanja bilo koje periferije potrebno je dovesti joj takt

korišćenjem odgovarajuće funkcije iz CMSIS biblioteke: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx , ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx , ENABLE);

2) PPP_DeInit(..) Funkcije se mogu koristiti da se resursi bilo koje periferije postave u inicijalna stanja:

PPP_DeInit(PPPx);3) Inicijalizacija periferija se uvek izvodi korišćenjem struktura

karakterističnih za te periferije: PPP_InitStucture.memberX = valX; PPP_InitStructure.memberY = valY; PPP_Init(PPPx, &PPP_InitStructure);

4) Nakon osnovne inicijalizacije neke periferije se dalje konfigurišu zadavajući odgovarajuće komande kroz funkcije koje su u sledećem formatu:PPP_Cmd(..) function: PPP_Cmd(PPPx, ENABLE); Ovo se na primer koristi za komunikacione periferije kao što su UART, SPI, I2C ...

Page 21: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Magistrale Poznavanje rasporeda periferija po magistralama je bitno zbog njihove

konfiguracije.

Page 22: 32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Pirmer InicijalizacijePrimer konfiguracije UART1-a:

/* Enable USART1 Clock */ RCC_APB2PeriphClockCmd( USART1, ENABLE );

/* set all UART1’s peripheral registers to their reset values */USART_DeInit( USART1 ) ;

/* USART1 configuration ------------------------------------------------------*/ /* USART1 configured as follow: - BaudRate = 19200 baud - Word Length = 8 Bits - One Stop Bit - Even parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure USART1 */ USART_Init( USART1, &USART_InitStructure); /* Enable USART1 */ USART_Cmd( USART1, ENABLE );