Demo na STM32 discovery kit
Radek Lust, Petr Sedláček UREL, FEKT, VUT Brno
Obsah:
1. Úvod
2. Popis kitu
5. Realizace
6. Závěr
7. Literatura
V tomto projektu bude cílem představení kitu STM32 VL Discovery s 32 – bitovým procesorem ARM 32F100RBT6B. Dále také instalací, připojením tohoto kitu k PC a zprovoznění jeho vývojového prostředí Atollic True STUDIO STM32 Lite. Ověření funkčnosti kitu bude realizováno zkušebním programem.
Tento kit je osazen 32 bitovým ARM MCU z řady Value Line. Výhody jsou malá pořizovací cena (cca 320 ,- Kč), zastupuje programátor i debugger. Skládá se ze dvou částí, horní část nazývaná ST – Link obsahuje ARM čip STM32F103C8T6 a spodní část Value Line je mirkořadič typu STM32F100RBT6. Po delších stranách kitu je 2 x 28 pinů. Dalších 6 pinů je umístěno na kratší straně naproti konektoru USB viz obrázek kitu. Kit obsahuje 4 LED, z toho 2 LED slouží pro ST-Link část. Jedna jako signalizace napájení přes konektor USB, druhá signalizace komunikace přes SWD. Další dvě uživatelské LED (modrá a zelená) jsou součástí Value Line mcu. Procesor obsahuje 128 kB Flash, 8kB RAM. Kit je navržen na napájení s USB, nebo externího zdroje s napětím 5 V nebo 3,3 V. Na čipu je také 12 – bitový dvoukanálový DAC . Kit obsahuje primární oscilátor o frekvenci 8 MHz, která ovšem může být násobena na vyšší hodnoty [5]. Více lze zjistit v datasheetu použitého procesoru [6].
Dostupný software ke kitu
Firma ST doporučuje 3 následující možnosti software.
● Atollic, TrueSTUDIO® (including the free LiteTrueSTUDIO®)
● IAR, Embedded Workbench® for ARM
● Keil, MDK-ARMTM
IAR i Keil je spíše prostředí vhodné pro zkušenější programátory, nejvhodnějším prostředím pro začátečníky je od firmy Atollic, TrueSTUDIO. I u free verze zde není limitovaná délka kódu, není zde limitovaná doba používání, je zde přímá podpora pro ST – Link a VL Discovery kit. Prostředí je založeno na Eclipse. Jediné omezení je možné ladění programů pouze přes ST-Link.
Kit lze připojit k PC pomocí kabelu USB. Kit má konektor B mini USB. Po připojení k PC by se měl kit zobrazit jako vyměnitelný disk USB, na kterém najdeme 3 odkazy na informace o STM procesorech. Také by měla na kitu svítit červená LED vedle USB konektoru, jde o indikaci napájení přes USB kabel.
Další program, který by měl být nainstalován je ST-Link Utility. Pomocí tohoto programu lze aktualizovat firmware programátoru, či ověřit funkčnost spojení s PC. Slouží tedy ke komunikaci ARM mcu pomocí debuggeru ST –Link. ST-Link není potřeba k používání Atollic, pouze z jeho pomoci lépe ověříme funkčnost kitu po připojení k PC. ST-Link Utility lze v archivu stáhnout na stránce výrobce [1]. Po jeho nainstalování pomocí výběru z menu Target - > Connect by měla začít blikat druhá LED vedle USB konektoru na VL Discovery kitu. Jde o indikaci komunikace přes SWD s VL mcu. Okno by se mělo změnit na následující:
Spodní okno vypisuje binární obraz FLASH paměti VL mcu.
Pro snadný vývoj aplikací je zdarma k dispozici free verze programu Atollic TrueSTUDIO®/STM32 Lite. Toto prostředí lze stáhnout z webových stránek [2]. Program byl testován na systému Windows 7 Professional a nebyly shledány žádné problémy. Během instalace budete vyzváni k bezplatné registraci a na Vámi vyplněný email bude do 10 minut doručen registrační kód potřebný k úspěšnému dokončení instalace programu. Po instalaci je důležité si zvolit složku pracovního prostoru a to tak, aby cesta k němu neobsahovala žádné mezery ani diakritiku. Atollic TrueSTUDIO obsahuje kromě základního editoru také debugger. Při spuštění debuggeru se Vám objeví žádost o povolení přístupu přes Firewall, přístup je nutné POVOLIT. Nyní je vhodné si stáhnout tutoriál k tomuto programu například z webové adresy [3]. Jde o 32 stránkový dokument, který Vás provede se základním ovládáním programu a jeho funkcemi IDE TrueSTUDIO.
Náš projekt přeložíme volbou v menu Project -> Build Project. Pokud překladač nenalezl žádné chyby, můžeme přejít do režimu Debug do kterého vstoupíme volbou Debug v nabídce Run, nebo stiskem klávesy F11. Pokud vše správně proběhne, zobrazí se Vám následující obrazovka:
Zelenou šipkou (Resume – F8 ) nahrajeme náš program přímo do procesoru. Krom možnosti přímého nahrání programu do čipu lze v tomto režimu program krokovat, nastavovat breakpointy a jinak online kontrolovat činnost čipu.
Funkce
Jakožto ukázkový program jsme zvolili kombinaci A/D převodníku propojeného vnějším propojením s D/A převodníkem, přičemž získaná data jsou zobrazována na připojeném LCD zobrazovači. D/A převodník je nastaven tak, aby generoval pilový průběh s nízkým kmitočtem (z důvodu viditelné změny napětí na LCD), zatímco A/D převodník zobrazuje aktuální hodnotu napětí na LCD, průchod nulou je navíc signalizován bliknutím modré LED.
PROGRAM
Celý program je prakticky tvořen pěti základními funkcemi. Základem je pochopitelně funkce main. Na této funkci není prakticky nic zajímavého, jedná se pouze o inicializační posloupnost, následuje volání příslušných funkcí a přepočet získaných dat z A/D převodníku v nekonečné smyčce. Prakticky nejkomplikovanější částí programu je správná inicializace D/A a A/D převodníku. Obě tyto funkce jsou popsány v komentářích dále přiloženého kódu.
Inicializace D/A převodníku:
void DAC_Inicializace(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //přivedení hodin na modul brány A (=aktivace brány)
/* DAC Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); //přivedení hodni na modul D/A převodníku (=aktivace převodníku)
GPIO_InitTypeDef GPIO_InitStructure; //vytvoření struktury pro práci s porty
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //pin 4 je zvolen pin 4 jako výstup
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //připojení pinu 4 k D/A převodníku
GPIO_Init(GPIOA, &GPIO_InitStructure); //přenesení nastavených parametrů na port A
DAC_InitTypeDef DAC_InitStructure; //vytvoření struktury DA převodníku
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; //deaktivace triggeru (manuální spouštění)
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; //deaktivace interního generátoru funkcí
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; //připojení výstupního bufferu pro zajištění pevného napětí
DAC_Init(DAC_Channel_1, &DAC_InitStructure); //zavedení nastavené struktury pro 1 kanál DA převodníku
DAC_Cmd(DAC_Channel_1, ENABLE); //aktivace kanálu
}
Inicializace A/D převodníku:
void ADC_Inicializace(void)
{
ADC_InitTypeDef ADC_InitStructure; //zavedení struktury A/D převodníku
GPIO_InitTypeDef GPIO_InitStructure; //zavedení struktury pro i/o brány
//* ADCCLK = PCLK2/1 = 24/2 = 12MHz*/
RCC_ADCCLKConfig(RCC_PCLK2_Div2); //nastavení frekvence A/D odpovídá 12MHz
//nastavení příslušného portu
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //přivedení hodin na modul brány C (=aktivace brány)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //nastavení struktury A/D převodníku aktivace pin4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //nastavení kmitočtu vnitřních hodin
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //nastavení režimu na analogový
GPIO_Init(GPIOC, &GPIO_InitStructure); //přenesení nastavené konstrukce na bránu C
/* povolime hodiny do A/D prevodniku */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //přivedení hodin na modul A/D převodníku (=aktivace modulu)
//ADC_DeInit(ADC1);
/* ADC1 Configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //režim nezávislého převodu
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //deaktivace kontinuálního měření
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //vypnout externí spouštění
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //zarovnání dat nevyšší vpravo
ADC_InitStructure.ADC_NbrOfChannel = 1; //volba kanálu
ADC_Init( ADC1, &ADC_InitStructure ); //přenesení struktury do A/D převodníku
/* ADC1 Regular Channel 14 */
ADC_RegularChannelConfig( ADC1, ADC_Channel_14, 1, ADC_SampleTime_239Cycles5);
/* Enable ADC1 external trigger conversion */
ADC_ExternalTrigConvCmd( ADC1, ENABLE );
ADC_Cmd(ADC1, ENABLE);
/* SEKVENCE KALIBROVÁNÍ a/d PŘEVODNÍKU */
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
}
Zbývající 2 funkce jsou: zápis dat do D/A převodníku (opět se jedná a o velice primitivní funkci) a poslední funkcí je vyčítání z A/D převodníku což jsou v praxi pouze 3 příkazy. Pro ovládání LCD displeje s řadičem jsme využili hotovou knihovnou ze serveru [4]. Displej a kit byly zapojeny podle následující tabulky (s ohledem na jednoduchost zapojení není uvedeno schéma):
tabulka zapojení |
|||||
PŘIPOJENÍ LCD |
PIN |
|
|
|
|
1 |
Vss |
-> |
GND |
||
2 |
Vdd |
-> |
+V5 |
||
3 |
Vo |
-> |
připojeno na 0,8 V zdroj |
||
4 |
RS |
-> |
kit -RC6 |
||
5 |
R/W |
-> |
GND |
||
6 |
E |
-> |
kit -RC7 |
||
7 |
DB0 |
-> |
GND |
||
8 |
DB1 |
-> |
GND |
||
9 |
DB2 |
-> |
GND |
||
10 |
DB3 |
-> |
GND |
||
11 |
DB4 |
-> |
kit -PC0 |
||
12 |
DB5 |
-> |
kit -PC1 |
||
13 |
DB6 |
-> |
kit -PC2 |
||
14 |
DB7 |
-> |
kit -PC3 |
||
15 |
A |
-> |
NEZAPOJENO |
||
16 |
K |
-> |
NEZAPOJENO |
||
KIT |
RA4 (VÝSTUP D/A) |
-> |
PC4 ( VSTUP A/D) |
||
Celkově program využívá množství knihoven, které jsou k dispozici v adresáři s projektem. Většina z těchto knihoven je dostupná (vše krom LCD.h + LCD.c) ve vývojovém prostředí Atollic TrueSTUDIO. V případě, že by byly do nového projektu přeneseny pouze zdrojové kódy knihovny LCD a soubor main.c, je velmi pravděpodobné že v poslední verzi nebude možné projekt bez úpravy přeložit neboť poslední verze Atollic TrueSTUDIO má jinak pojmenovanou knihovnu STM32_Discovery a změna se týká i názvů funkcí. Tento problém však nenastane, pokud je projekt distribuován jako celek a je do Atollic TrueSTUDIO řádně importován.
Ukázka generovaného signálu
Zapojení aplikace na nepájivém poli:
V tomto projektu je představen vývojový kit od firmy STMicroelektronics STM32 Discovery. Jsou zde popsány jeho funkce, různé vývojové programy i návod připojení kitu k PC a jeho oživení. Jako vývojové prostředí byl zvolen program Atollic TrueSTUDIO. V rámci projektu byl vytvořen program demonstrující činnost A/D a D/A převodníků použitého procesoru. Jako zobrazovací prvek měřeného napětí byl použit LCD displej a pro kontrolu byl do obvodu zapojen i multimetr. Dle výše uvedeného foto je patrné, že zařízení pracuje správně. Tento program není napsán zcela optimálně, avšak pro demonstrační účely zcela dostačující. Pro praktické užití by bylo vhodnější využít k obsluze převodníků přerušení. Celý projekt je možné stáhnout na tomto odkazu zde ke stáhnutí.
[1]
Stránky výrobce - http://www.st.com
[2] Stránky vývojového prostředí Atollic - http:// http://www.atollic.com
[3] Tutoriál k Atollic - http://www.atollic.com/download/Atollic_TrueSTUDIO_STM32_QuickstartGuide.pdf
[4] Server MCU - http://www.mcu.cz
[5] Datasheet kitu - http://www.st.com/stonline/products/literature/um/17217.pdf
[6] Datasheet procesoru na kitu - http://www.st.com/stonline/products/literature/rm/16188.pdf