Home Articles ARM Przyk?ady dla STM32 + STM32F10x Standard Peripherals Library
Przyk?ady dla STM32 + STM32F10x Standard Peripherals Library
User Rating: / 47
PoorBest 
Written by Freddie Chopin   
Wednesday, 11 January 2012 21:35
Article Index
Przyk?ady dla STM32 + STM32F10x Standard Peripherals Library
Wspólny pocz?tek
Sposób 1
Sposób 2
Sprawdzenie konfiguracji
Outro
All Pages

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



Last Updated on Monday, 15 October 2012 22:24