View
103
Download
0
Category
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