350 likes | 594 Views
MS1BMP. 32-bitni mikrokontroleri i primena Part 2. - periferije. Autor : Nenad Jovičić. Inicijalizacija periferija. 1) Pre konfigurisanja bilo koje periferije potrebno je dovesti joj takt korišćenjem odgovarajuće funkcije iz CMSIS biblioteke :
E N D
MS1BMP 32-bitni mikrokontroleri i primena Part 2. - periferije Autor: NenadJovičić
Inicijalizacija periferija 1)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 ...
Pirmer Inicijalizacije Primer 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 );
CMSIS-struktura Osnovni konfiguracioni heder fajl za odabranu familiju mikrokontrolera Korisnička aplikacija Cortex-M3 exceptions Peripheral header file Ovaj fajl prilagodjava korisnik Include NVIC and SysTick drivers • Low-level & API funkcije koje čine biblioteku periferijskih drajvera.
Fajlovikojemenjakorisnik • 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" … … • main.c #include "stm32f10x.h“ int main(void) { ... GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_SET); … } • stm32f10x_It.c #include "stm32f10x_it.h" … void EXTI1_IRQHandler(void) { GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_SET); } • stm32f10x_It.h /* Exported functions ----------------------------------------------- */ void NMI_Handler(void); void HardFault_Handler(void); …
Systick tajmer Fleksibilni sistemski tajmer Sastavni deo procesorskog CORTEX-M3 jezgra. 24-bit auto-reload brojač za posebnim prekidom. 2 konfigurabilna izvora takta Pogodan za realizaciju real-time operativnih sistema. U STM32F10x seriji takt za ovu periferiju može bili ili CPU takt ili CPU/8 takt. Ovo se konfiguriše u RCC grupi registara. S obzirom da je deo procesorskog jezgra definicije funkcija koje konfigurišu rad časovnika se nalaze u okviru core_cm3.h fajla koji obezbeđuje ARM. Neke od high level funkcija može da obezbedi i proizvođač mikrokontrolera i one se nalaze u okviru peripheral drajver biblioteke i to u sastavu misc.h fajla.
GPIO - Portovi • 5V tolerantniulazi • Kapacitet po pinu 25mA • 18 MHz učestanost toglovanja • Konfigurabilna izlazna brzina do 50 MHz • Do 16 analognih ulaza • Alternativne funkcije (USARTx, TIMx, I2Cx, SPIx,…) • Svaki pin može da generiše spoljašnji prekid • Jedan pin može da se koristi za buđenje iz STANDBY moda (PA.00) • Jedan pin može da bude Tamper Pin (za watcdog) (PC.13) • Pinovi grupisani u 5 16’bitnih portova (GPIOA..GPIOE) • Mehanizam zaključavanja konfiguracije
Configuration Mode CNF1 CNF0 MOD1 MOD0 Analog Input 0 0 VDD ON/OFF Input Floating (Reset State) 0 1 Pull - UP Pull - Down Output Push-Pull 0 0 01: 10 MHz 10: 2 MHz 11: 50 MHz ON/OFF Output Open-Drain 0 1 VSS VDD AF Push-Pull 1 0 AF Open-Drain 1 1 VSS GPIO Konfiguracije Analog Input To On-chip Peripherals 00 Alternate Function Input OFF ON Input Pull-Up(2) 1 0 Read 0 Input Data Register VDD or VDD_FT(1) Input Pull-Down(2) TTL Schmitt Trigger Input Driver I/O pin Output Driver Write OUTPUT CONTROL Bit Set/Reset Registers VSS Output Data Register Push-Pull or Open Drain Read / Write or disabled From On-chip Peripherals (2) Input Pull-Up and Input Pull-Down are differentiated by the PxODR.y bit field. Alternate Function Output
Izlaznakonfiguracija U Open-Drainmodu: “0” u Output Data registruaktivira N-MOS transistor, dok “1” u Output Data registruostavlja pin u stanjuvisokeimpedanse(P-MOS transistor se nikada ne aktivira). U Push-pullmodu: : “0” u Output Data registruaktivira N-MOS transistor, dok “1” u Output Data registruaktivira P-MOS tranzistor. Schmitt Trigger kolo je uključeno Interni pull-up i pull-down otpornicisuisključeni Stanjekoje je napinu se semplujeiupisuje u Input Dataregistarnasvaki APB2 klok ČitanjemInput Dataregistraočitava se stanjepinakada je konfigurisan u Open-Drain modu ČitanjemInput Dataregistraočitava se stanjepinakada je konfigurisan u Push-pullmodu
Konfiguracijaalternativnefunkcije Izlazni dajver je u Open Drain ili Push-Pull konfiguraciji Schmitt Trigger ulaz je aktiviran Pull-up i pull-down otpornici su deaktivirani Podatak na pinu se sempluje u ulazni registar na svaku ivicu APB2 takta Ako je izlaz u open drain modu očitavanje ulaznog registra daje stanje na pinu Čitanje izlaznog registra u Push-Pull modu daje poslednje upisano stanje u registar
Konfiguracijaanalognogulaza Izlazni bafer je isključen (otkačen) Schmitt Trigger kolo je isključeno zbog smanjenja potrošnje. Pull-up i pull-down otpornici su isključeni Očitavanje ulaznog registra uvek daje “0”
GPIO registri Dva 32-bitna konfiguracionaregistra (GPIOx_CRL, GPIOx_CRH) Dva 32-bitna dataregistra (GPIOx_IDR, GPIOx_ODR) Jedan 32-bitna set/resetregistar (GPIOx_BSRR) Jedan 16-bitni resetregistar (GPIOx_BRR) Jedan 32-bitni lockingregistar (GPIOx_LCKR)
Port input data register (GPIOx_IDR) (x=A..G) Port output data register (GPIOx_ODR) (x=A..G)
Alternativnefunkcije Neophodno je konfigurisati pin shodnoalterativnojfunkcijikoja se koristi. Primer za tajmer module:
Remapiranje alternativnih funkcija - oscilatori • OSC_IN/OSC_OUT pinovi su mapirani na GPIO pinovima PD0/PD1. To se može isključiti odgovarajućim bitovima u AFIO_MAPR registru. • OSC32_IN/OSC32_OUT pinovi su mapirani na GPIO pinovima PC14/PC15. To se može isključiti odgovarajućim bitovima u AFIO_MAPR registru.
Remapiranje alternativnih funkcija – debug interfejs • Normalne pozicije debug pinova: • Optimizacija se vrši setovanjem dogovarajućih SWJ_CFG[1:0] bita u AFIO_MAPR registru.
Interrupt Mask Register Pending Request Register Software Interrupt Event Register Rising Trigger Selection Register Falling Trigger Selection Register Edge Detect Circuit EXTI[15:0] To NVIC Pulse Generator Event Mask Register EXTI Spoljašnji prekidi • Do 19 Interrupt/Events zahteva • Do 80 pinova se može koristiti kao EXTI ulaz. • EXTI linija 16 povezana na PVD izlaz • EXTI linija 17 povezana na RTC Alarm događaj. • EXTI linija 18 povezana na USB Wake-up from suspend događaj • Dva konfiguraciona moda: • Interrupt mode: generisanje prekida • Event mode: generisanje buđenja sistema koji je u SLEEP ili STOP modu. • Nezavisni trigeri (rastuća, opadajuća ili obe ivice) • Status bit svake linije • EXTI periferija je povezana na APB2 da bi se skratilo vreme ragovanja (APB2 je u opštem slučaju brža od APB1 magistrale) • Mogućnost softverskog forsiranja bilo kog prekida/događaja.