František Pospíšil

Na svých stránkách popisuji cesty, kterými jsem došel k zamýšleným cílům. Cíle se občas během cesty změnily.

STM32

STM32CubeIDE

Vývojové prostředí pro práci s procesory STM32 je založeno na Eclipse, což je univerzální platforma určená pro programování v jazyce Java. Ve společnosti STmicroelectronic byla doplněna tak, aby bylo možné vytvářet aplikace pro mikrokontroléry STM32 v jazyce C.

STM32CubeIDE svoje okna uspořádá podle několika perspektiv, které je možné přepínat na pravé straně horní lišty. Když nechám projekt generovat v STM32CubeMX a pak otevřít projekt ve vývojovém prostředí, bude perspektiva připravena pro psaní programu. Různé perspektivy uspořádání oken mohou působit na začátku zmateně, ale čtveřice ikon nastaví uspořádání do původního stavu.

Druhá perspektiva – Debug, je určena pro ladění programu.

Další perspektivu – uspořádání oken na obrazovce můžeme vytvořit sami, podle vlastních požadavků.

Psaní programu v STM32CubeIDE

Na levé straně je adresářová struktura, okno Project Explorer. Při prvních pokusech je zajímavý adresář Core/Src, ve kterém je soubor main.c.

Text, který je připraven v souborech, je rozdělen pomocí poznámek /* USER CODE BEGIN */ a /* USER CODE END */ na prostor, kam mám psát svůj program já a na prostor, kde pracuje STM32CubeMX.

Tohle je velmi důležité, když potřebuji mnohokrát změnit parametry periferií v STM32Cube.

Když píšu jenom do prostoru uživatele, můžu mít zároveň s CubeIDE puštěný i CubeMX a měnit počáteční nastavení periferií a znovu generovat knihovny funkcí s jinými parametry.

Když něco napíšu mimo vyznačený prostor uživatele, STM32Cube to smaže.

V souboru main.c je připraven prostor /* USER CODE BEGIN SysInit */, kde doplníme inicializaci periferií.

Pro část kódu, která má běžet ve smyčce, je připraven prostor ohraničený /* USER CODE BEGIN WHILE */.

Funkce knihoven periferií

Program STM32Cube připraví funkce pro ovládání periferií a schová je někde v adresářové struktuře projektu. Otázkou začátečníka je, které funkce to jsou a co umí.

Klávesová zkratka Ctrl+Space navrhne funkce, proměnné, nebo obecně slova, která by se mohla hodit. Po nainstalování STM32CubeIDE není nastaveno, v jakém prostoru má klávesová zkratka hledat nápovědu.

Je potřeba otevřít Preferences -> C/C++ -> Editor -> Content Assist -> Advanced a označit skoro všechno. Ctrl+Space pak najde nejenom funkce v knihovnách, ale i mnou definované proměnné a funkce.

Při seznamování s novou periferií pak stačí napsat např. LL_SPI_ a Ctrl+Space vyjmenuje všechny dostupné funkce:

Bude tam nějaké LL_SPI_Enable, LL_SPI_StartMasterTransfer, LL_SPI_TransmitData… První pokus lze napsat bez větších vědomostí o fungování periferie. Zároveň je potřeba prostudovat příslušnou kapitolu v referenčním manuálu, případně se podívat, jak jsou napsány jednotlivé funkce.

Když označím text funkce a najedu nad něj myší, klávesa F2 zobrazí popis funkce, pokud je umístěn jako poznámka tam, kde je funkce definována.

Klávesa F3 otevře soubor, ve kterém je funkce definována. Takže je možné si přečíst, co všechno funkce dělá. To obvykle stačí k běžnému použití. Například funkce HAL_GPIO_WritePin provede zápis do registru BSRR. Pomocí klávesy F3 jsem otevřel soubor stm32f4xx_hal_gpio.c a v něm je funkce

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if (PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  }
}

Popis registru BSRR je v referenčním manuálu, správnou kapitolu nalistoval STM32CubeMX:

Občas se stane, že STM32CubeMX vygeneruje v knihovně chybu. Potom je potřeba pečlivě prostudovat text knihovny, referenční manuál, jak podobný problém vyřešil někdo jiný.

Tutoriály na internetu

Z českých doporučuji www.elektromys.eu. Autor se zabývá nízkoúrovňovým programováním, je zaměřen primárně na LL knihovny, které umožňují maximálně využít možnosti procesoru.

Pokud nemám zájem jít do hloubky a chápat práci některého hardware na úrovni registrů, jsou k dispozici vysokoúrovňové HAL knihovny. Ty zařídí většinu práce automaticky, ale zaberou víc místa v paměti a jejich provádění trvá delší dobu. Tutoriál v angličtině je Deepblue mbedded.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *