Jako vývojové studio jsem si vybral Atollic TrueStudio. Jak ho nainstalovat tu nebudu řešit, neboť je to triviální záležitost a pokud to někomu bude dělat problémy, na internetu je dost nápovědy (Atollic_TrueSTUDIO_STM32_QuickstartGuide.pdf).
Raději se zaměřím na samotný program. I když example (vzorových) kódů je pro STM32xx relativně dost, hodně jich je buď pro verze STM32F4 nebo STM32 VL Discovery v horším případě pro jiné vývojové studio (Keil, IAR, CooCox…).
Hledal jsem nějaké použitelné programy (na anglických stránkách) dokud mě nenapadlo se podívat na české stránky a na webu mcu.cz je hodně dílů o STM32 VL Discovery, ale právě s Atollic TrueStudiem, takže začalo bádání jak modifikovat program, aby běžel na STM32F303 Discovery.
Takže koncepci programu jsem převzal odsud. Zde vidíte postup nastavení vývojového studia i samotný program nefungující pro STM32F3 Discovery.
Program jsem rovnou modifikoval tak, aby modrá led (LED9) stále blikala a LED8 svítila pouze při stisku tlačítka. Samozřejmě je program velmi špatně napsán – měla by se používat pro přerušení pro „okamžitou“ reakci a ne čekat až doběhne delay() . Pro ověření je to však naprosto dostačující. Nyní slíbený kód.
/*
* STM32F303-Discovery – LED and USER_BUTTON
* Petus 2.9.2013
* source: mcu.cz – Mard
*/
/* Includes ——————————————————————*/
#include
#include „stm32f30x.h“
#include „stm32f30x_conf.h“
#include „STM32F3_Discovery.h“
/* Private typedef ———————————————————–*/
/* Private define ————————————————————*/
/* Private macro ————————————————————-*/
/* Private variables ———————————————————*/
/* Private function prototypes ———————————————–*/
void GPIO_Initi(void); // GPIO set
void Delay(__IO uint32_t nTick);
uint32_t timerFlag=0;
int main(void)
{
GPIO_Initi();
while (1)
{
STM_EVAL_LEDOff(LED9); // LED9 off
Delay(0xFF555);
STM_EVAL_LEDOn(LED9); // LED9 on
Delay(0xFF555);
if(0 == STM_EVAL_PBGetState(BUTTON_USER)) //The user button is on
{
STM_EVAL_LEDOn(LED8); // LED8 on
}
else // The user button is off
{
STM_EVAL_LEDOff(LED8); // LED8 off
}
}
}
void GPIO_Initi(void)
{
STM_EVAL_LEDInit(LED8); //initialization LED8
STM_EVAL_LEDOff(LED8); //LED8 off
STM_EVAL_LEDInit(LED9); //initialization LED9
STM_EVAL_LEDOff(LED9); //LED9 off
STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); //initialization user button
}
/**
* @brief Delay
* @param nTick: value delay loop
* @retval : None
*/
void Delay(__IO uint32_t nTick)
{
for(; nTick != 0; nTick–);
}