STM32 - programová změna FLASH option byte

Sem tam se stane, že je třeba programově změnit FLASH option byte. Dostupných příkladů je ale málo a nejsou zcela transparentní. Zde je jednoduchý a názorný příklad jak v programu změnit FLASH option byte flag. // Příklad vypnutí IWDG ve STOP modu ... __disable_irq(); FLASH_OBProgramInitTypeDef pOBInit; HAL_FLASHEx_OBGetConfig(&pOBInit); if( pOBInit.USERConfig & (1 << 17) ) { // 17 bit = OB_USER_IWDG_STOP memset((void*)&pOBInit,0,sizeof(pOBInit)); pOBInit.OptionType = OPTIONBYTE_USER; pOBInit.USERType = OB_USER_IWDG_STOP; pOBInit.USERConfig = OB_IWDG_STOP_FREEZE; HAL_FLASH_Unlock(); __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR); // Clear the FLASH's pending flags....

MBED-OS/STM32 - úsporné probuzení od UARTů

V některých situacích může být vhodné, před přechodem do úsporného režimu, UART zrušit. Následně překonfigurovat RX pin na InterruptIn a pověsit na něj rise handler. Po vzbuzení přes přerušení na pinu pak zrušít InterruptIn na RX pinu a znova vytvořit UART. Počítejte s tím, že ztratíte nějaký znak. Ale to je vzhledem k času probuzení ze STOP modu normální. Jedná se, myslím, o poměrně efektivní způsob jak se snadno a energeticky nenáročně probouzet ze STOP modu při příchozí komunikaci na UARTech bez ohledu na nastavenou rychlost a typ UARTu....

MBED-OS/STM32 - řízený přechod do úsporného režimu

Pokud pracujete s MBED-OS, často je třeba přejít do usporného režimu na delší dobu než umožňuje běžný (deep) sleep a režimy STANDBY a SHUTDOWN nejsou pro daný účel vhodné. V prvé řadě je zde, pro dosažení nízké spotřeby, vhodné zvolit TICKLESS mod - nejlépe s LPTIM timerem. To ale neumožňuje dosáhnout dlouhých intervalů spánku. Proto může být někdy vhodné mít přechod do úsporného modu a vzbuzení plně pod kontrolou. Před přechodem do úsporných režimů je tedy nutné příslušný LPTIM timer zastavit....

MBED-OS/STM32 - aktivní pull-up/down po resetu

Některé piny mají po resetu aktivní pull-up nebo pull-down. Pokud je na těchto pinech po startu nevypnete, budou zvyšovat spotřebu. A to jak při běhu, tak v úsporných režimech. Zde se zaměřte zejména na piny, které slouží pro debuging (JTAG/SWJ). To znamená piny NJTRST, JTDI, JTMS/SWDIO (pull-up) a TCK/JTCK/SWCLK (pull-down). Pokud piny nepoužíváte, tak je po restartu a případně před přechodem do usporných modů nezapomínejte překonfigurovat. // Příklad pro STM32L462CE ....