Page 5 of 6
Sprawdzenie konfiguracji
W ramach sprawdzenia mo?na sobie stworzy? prosty programik testowy - nie?miertelne miganie diod? LED, w którym skorzystamy z funkcji udost?pnianych przez Standard Peripheral Library. Ca?? zawarto?? pliku z funkcj? main() zast?pujemy wi?c przedstawionym poni?ej kodem, dostosowuj?c definicje portów i pinów do posiadanej przez nas konfiguracji.
#include "stm32f10x.h"
#define LED_GPIO GPIOB #define LED_GPIO_RCC RCC_APB2Periph_GPIOB #define LED_Pin GPIO_Pin_1
int main(void) { volatile uint32_t count, count_max = 3000000; GPIO_InitTypeDef GPIO_InitStructure;
/* LED_GPIO Periph clock enable */ RCC_APB2PeriphClockCmd(LED_GPIO_RCC, ENABLE);
/* Configure LED pin in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = LED_Pin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(LED_GPIO, &GPIO_InitStructure);
while (1) { /* Set */ GPIO_SetBits(LED_GPIO, LED_Pin); /* Delay */ for (count = 0; count < count_max; count++); /* Reset */ GPIO_ResetBits(LED_GPIO, LED_Pin); /* Delay */ for (count = 0; count < count_max; count++); } }
Po skompilowaniu ca?o?ci mo?na j? wgra? do uk?adu i debuggowa? - uruchamiaj?c dost?pne w projekcie predefiniowane skróty do OpenOCD (menu Run > External Tools > External Tool Configurations...) i GDB (menu Run > Degug Configurations... - nale?y wybra? skrót do GDB Hardware Debugging z ko?cówk? "+ load").
Niekiedy mo?e by? konieczne dostosowanie konfiguracji do dost?pnej wersji OpenOCD, konfiguracji sprz?towej lub innych szczegó?ów.
Po wgraniu i uruchomieniu program powinien miga? wybran? diod? z cz?stotliwo?ci? oko?o 1Hz (je?li rdze? pracuje na 72MHz, co jest domy?lnym ustawieniem biblioteki).
Je?li podczas kompilacji pliku core_cm3.c (szczególnie z w??czon? optymalizacj?) kompilator zasygnalizuje b??d assemblera: Error: registers may not be the same -- `strexb r0,r0,[r1]', Error: registers may not be the same -- `strexh r0,r0,[r1]', nale?y w pliku tym (po wy??czeniu atrybutu read-only) zmieni? "=r" na "=&r" w nast?puj?cych funkcjach: uint32_t __STREXB(uint8_t value, uint8_t *addr), uint32_t __STREXH(uint16_t value, uint16_t *addr), uint32_t __STREXW(uint32_t value, uint32_t *addr). Ciekawostk? jest to, ?e ARM w stworzonym przez siebie pliku nie trzyma si? swojej w?asnej dokumentacji... No có?...
Je?li pomimo poprawnej kompilacji projektu w konsoli Eclipse zasypuje nas b??dami typu Semantic Error o tre?ci "... could not be resolved" (gdy otwarty jest problematyczny plik ?ród?owy) nale?y wykona? nast?puj?ce kroki: 1. skompilowa? projekt tak aby powsta? plik wynikowy z rozszerzeniem .elf, 2. zamkn?? wszystkie zak?adki edytora, 3. zamkn?? i otworzy? projekt, 4. od?wie?y? zawarto?? folderu projektu (menu File > Refresh) - powinien pojawi? si? "folder" Binaries, 5. odbudowa? indeks projektu (menu kontekstowe projektu > Index > Rebuild).
|