Demo na STM32 discovery kit

Radek Lust, Petr Sedláček UREL, FEKT, VUT Brno

xlustr00@stud.feec.vutbr.cz

xsedla31@stud.feec.vutbr.cz

Obsah:

1.      Úvod

2.      Popis kitu

3.      Připojení k PC

4.      Návod k Atollic

5.      Realizace

6.      Závěr

7.      Literatura

 

Úvod

 

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.

 

Popis kitu STM32 VL Discovery

 

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 kituKit 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.

 

Připojení kitu k PC

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.

 

 

Popis Atollic free LiteTrue STUDIO

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.

 

Realizace ukázkového programu

           

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

Popis: Popis: Popis: Popis: NewFile0.bmp

 

Zapojení aplikace na nepájivém poli:

Popis: Popis: Popis: Popis: DSCF7515.JPG

 

 

 

 

Závěr

 

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í.

Literatura

 

[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