Verkkokauppa Kotisivut Tuoteluettelo Ota yhteyttä Kirjaudu Ostoskori Kassalle
Verkkokauppa » Artikkelit » ARM » STM32 Oma tili  
Tuoteryhmät
3D-TULOSTUS
AKUT/PARISTOT->
ANTENNIT->
ARDUINO->
AUDIO/VIDEO->
ELEKTRONIIKAN KOMPONENTIT->
HÄLYTIN/VALVONTA
JUOTTAMINEN->
JÄÄHDYTYS->
KAAPELIT/JOHDOT->
KAAPELITARVIKKEET->
KIRJAT
LEDIT->
LIITTIMET->
MEKANIIKKA->
MUISTIKORTIT
PALVELUT
PROTOILU->
PUHELIMET->
RAKENNUSSARJAT
RASPBERRY PI->
SEKALAISET
SÄHKÖMEKANIIKKA->
SÄHKÖTARVIKKEET->
TEHOLÄHTEET->
TIETOKONEET->
TIETOLIIKENNE->
TV/RADIO/VCR/CD->
TYÖKALUT->
* POISTETUT TUOTTEET *
* TARJOUSERÄT *
Pikahaku lisää
 
Etsi tuote hakusanalla
Tarkka haku
Uutuudet lisää
14-napainen FFC kaapeli 150mm
14-napainen FFC kaapeli 150mm
2,73€
Klikkaa tästä tuoteuutuudet
Tarjoukset lisää
CAT5e VERKKOKAAPELI SUOJAAMATON 7m
CAT5e VERKKOKAAPELI SUOJAAMATON 7m
3,22€ 2,00€
Valmistajat
Artikkelit lisää
Arduino (7)
ARM -> (6)
  TI TivaC/Stellaris (2)
  STM32 (4)
Banana Pi
Laitehuolto (1)
Ohjelmoitavat logiikat (1)
Rakennussarjat (1)
Raspberry Pi (3)
Tekniikat (1)
Yleistä (1)
Lisätiedot
Vinkit
Uutisotsikot
Toimitusehdot
Tietosuoja
Käyttöehdot
Ota yhteyttä
Löydä meidät
Noutomyymälä
Varoitus Uusi verkkokauppa www.partco.fi avattu!
STM32F0 ja ohjelmoinnin alkeet

ARM CORTEX-M prosessorit ovat ARMv6 Thumb -käskykannan toteuttavia 16/32-bittisiä prosessoreita jotka on suunnattu rooleihin joissa perinteisesti on käytetty mm. 8-bittisiä mikrokontrollereita. CORTEX-M lastuilta löytyy tuttuja toimintalohkoja sulautettuihin sovelluksiin.

Kokeilulaudalla oleva STM32F051 toteuttaa ARM CORTEX-M0 standardin valmistajakohtaisilla lisäominaisuuksilla. Kaunista tässä CORTEX-M määrittelyssä on se, että siirtyminen toisen valmistajan toteutukseen M-sarjassa ei juurikaan vaikuta ohjelman lähdekooditasolla. Periaatteessa yhteensopivuus binääritasollakin on olemassa.

Uuteen arkkitehtuuriin tutustuminen lähtee käytännössä sen ohjelmointiympäristön käyttöönotosta, ohjelmointilaitteesta, alustusrutiineista sekä GPIO-pinnien heiluttelusta. STM32F0DISCOVERY kokeilukortilla on muutama ledi ja kytkin joilla pääsee hyvin alkuun. 

Tässä muutama hyvä löydös koskien GPIO ohjelmointia:

Hertaville Understanding the STM32F0′s GPIO part 1

Hertaville Understanding the STM32F0′s GPIO part 2

Hertaville External Interrupts on the STM32F0

Edelläolevissa blogeissa käydään läpi rekisteritason ohjelmointirajapintoja. CORTEX-M standardi pitää sisällään myös CMSIS-ohjelmointirajapinnan. Tämä piilottaa paremmin arkkitehtuurin versio- ja valmistajakohtaiset erot.

Tärkein oivallus koskien laitelohkoja (GPIO, UART, ADC, DAC ....) on se että ennen niiden käyttöä niille tarvitsee määritellä kellolähde ja käynnistää se. Oletuksena kaikki toimintalohkot ovat unitilassa. Toinen tärkeä seikka on missä kelloväylässä lohko sijaisee (AHB1, APB1, APB2). Näissä on piirisarjakohtaisia eroja.

Nopeassa väylässä kuten GPIOB:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

vai hitaassa väylässä kuten AD-muunnin ADC1:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

Koska kaikki on ns. memory mapattua, ei erillisiä IO-käskyjä ole. Nämä ohjausrekisterit ovat monasti myös 32-bittisiä. Esim. prosessorin pinnit PC9 ja PC8 näkyvät bitteinä GPIOC:n määrittämässä muistiosoitteessa. Tämän osoitteen sisältöä muuttamalla lähdöksi määritelty IO-pinni tottelee kyseiseen rekisteriin kirjoitettuja arvoja.

// hieman makroja mm. bittiaritmetiikkaa

#define LED_GREEN_TOGGLE (GPIOC->ODR ^= (1 << 9))
#define LED_GREEN_ON (GPIOC->ODR |= (1 << 9))
#define LED_GREEN_OFF (GPIOC->ODR &= (1 << 9))

#define LED_BLUE_TOGGLE (GPIOC->ODR ^= (1 << 8))
#define LED_BLUE_ON (GPIOC->ODR |= (1 << 8))
#define LED_BLUE_OFF (GPIOC->ODR &= (1 << 8))

#define PC_PORT   GPIOC
#define PC_CLK    RCC_AHBPeriph_GPIOC

#define PC8_PIN   GPIO_Pin_8
#define PC8_ON (PC_PORT->BSRR = PC8_PIN)
#define PC8_OFF (PC_PORT->BRR = PC8_PIN)

void initGPIO(void) { // alustetaan GPIOC:n pinnit PC8 ja PC9 push-pull -lähdöiksi ilman nousuaikarajoitteita
  GPIO_InitTypeDef  GPIO_InitStructure; // struktuuri io-pinnien määrittämiseen
  RCC_AHBPeriphClockCmd(PC_CLK, ENABLE);  // aktivoidaan GPIOC-lohkon kello (STM32F0)
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // push-pull
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // no pull-ups or pull-downs
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = PC8_PIN;
  GPIO_Init(PC_PORT, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = PC9_PIN;
  GPIO_Init(PC_PORT, &GPIO_InitStructure);

  // otetaan vielä kokeeksi MCU-pääkello ulos pinnistä MC0 (=PA8)

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_0); // tällä kerrotaan vaihtoehtoinen toiminto kys. pinnille
  RCC_MCOConfig(RCC_MCOSource_SYSCLK);  // systeemin pääkello MCO-pinniin
}

 

 

Tämä artikkeli on julkaistu 06.10.2012.
Takaisin Kirjoita arvostelu
Ostoskori lisää
0 tuotetta
Kielet
Suomi English

Elgood Oy / Partco - Malminkaari 10, 00700 Helsinki - p. 0207 981 130 - www.elgood.fi - myynti@elgood.fi
Powered by osCommerce