32-bitni mikrokontroleri i primena - MS1BMP 4 . deo

Preview:

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

32-bitni mikrokontroleri i primena - MS1BMP

4. deo2013

Nenad Jovičić

Razvojni sistem STM32VLDISCOVERY

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.

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.

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.

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

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); }

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

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

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!

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" ……

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.

Opcije projekta

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

Opcije projekta

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

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!

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()

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.

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

SystemInit() funkcija

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

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 ...

Magistrale Poznavanje rasporeda periferija po magistralama je bitno zbog njihove

konfiguracije.

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 );

Recommended