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.
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-14.png)
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.
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-15.png)
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.
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-16.png)
Při seznamování s novou periferií pak stačí napsat např. LL_SPI_ a Ctrl+Space vyjmenuje všechny dostupné funkce:
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-11.png)
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.
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-12.png)
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:
![](https://ok2jnj.ok2kld.cz/ok2jnj/wp-content/uploads/2022/01/obrazek-17.png)
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.