Skocz do zawartości

[C][STM32] Konfiguracja początkowa


ziger

Pomocna odpowiedź

#include "stm32f10x_conf.h"



void RCC_Config(void);
void GPIO_Cofig(void);
void NVIC_Config(void);
int main(void)
{
RCC_Config();
GPIO_Config();
NVIC_Config();
/*Tu nalezy umiescic ewentualne dalsze funkcje konfigurujace system*/
GPIO_ResetBits(GPIOC, GPIO_Pin_8 | GPIO_Pin_9);

   while(1)
   {
   	/*Tu nalezy umiescic glowny kod programu*/
   };
   return 0;
}

void RCC_Config(void)
//konfigurowanie sygnalow taktujacych
{
//zmienna opisujaca rezultat uruchomienia HSE
ErrorStatus HSEStartUpStatus;
//reset ustawien RCC
RCC_DeInit();

//wlacz HSE
RCC_HSEConfig(RCC_HSE_ON);

//odczekaj na gotowosc HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)
{
	//ustaw zwloke dla pamieci FLASH
	//zaleznie od taktowania rdzenia
	//0 gdy <24MHZ; 1 gdy 24-48 Mhz; 2 gdy >48Mhz
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
	FLASH_SetLatency(FLASH_Latency_1);

	//ustaw HCLK=SYSCLK
	RCC_HCLKConfig(RCC_SYSCLK_Div1);

	//ustaw PCLK2=HCLK
	RCC_PCLK2Config(RCC_HCLK_Div1);

	//ustaw PLCK1=HCLK
	RCC_PCLK1Config(RCC_HCLK_Div1);

	//ustaw PLLCLK= HSE*9 czyli 8Mhz * 3 = 24 Mhz
	RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_3);

	//wlacz PLL
	RCCPLLCmd(ENABLE);

	//odczekaj na poprawne uruchomienie PLL
	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

	//ustaw PLL jako zrodlo sygnalu zegarowego
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

	//odczekaj az PLL bedzie sygnalem zegarowym systemu
	while(RCC_GetSYSCLKSource() != 0x08);

	/* Tu nalezy umiescic kod zwiazany z konfiguracja
	 * sygnalow zegarowych potrzebnych w programie peryferiow*/

	//wlacz taktowanie portu GPIOC
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}else{}

}

void GPIO_Config(void)
//konfigurowanie portow GPIO
{
GPIO_InitTypeDef GPIO_InitStructure;
/*Tu nalezy umiescic kod zwiazany z konfiguracja portow GPIO potrzebnych w programie*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void NVIC_Config(void)
//Konfigurowanie kontrolera przerwan NVIC
{
#ifdef  VECT_TAB_RAM
//Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else VECT_TAB_FLASH
// W przeciwnym przypadku ustaw na 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}

Witam. Powyżej mam konfigurację sygnałów taktujących w STM32F100RB. Przy kompilacji tego kodu występuje taki błąd:

GCC HOME: E:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin
compile:
   [mkdir] Skipping E:\CooCox\CoIDE\workspace\serwo\serwo\Debug\bin because it already exists.
   [mkdir] Skipping E:\CooCox\CoIDE\workspace\serwo\serwo\Debug\obj because it already exists.
      [cc] Starting dependency analysis for 11 files.
      [cc] Parsing ..\..\..\cmsis_boot\stm32f10x.h
      [cc] Parsing ..\..\..\cmsis\core_cm3.h
      [cc] Parsing ..\..\..\cmsis\core_cmInstr.h
      [cc] Parsing ..\..\..\cmsis\core_cmFunc.h
      [cc] Parsing ..\..\..\syscalls\syscalls.c
      [cc] 11 files are up to date.
      [cc] 0 files to be recompiled from dependency analysis.
      [cc] 1 total files to be compiled.
      [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -g -O0 -c -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -DSTM32F100RB -DSTM32F10X_MD_VL -IE:\CooCox\CoIDE\workspace\serwo\cmsis_boot -IE:\CooCox\CoIDE\workspace\serwo\cmsis -IE:\CooCox\CoIDE\workspace\serwo\stm_lib -IE:\CooCox\CoIDE\workspace\serwo -IE:\CooCox\CoIDE\workspace -IE:\CooCox\CoIDE\workspace\serwo\stm_lib\inc E:\CooCox\CoIDE\workspace\serwo\main.c
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c: In function 'main':
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c:11:2: warning: implicit declaration of function 'GPIO_Config' [-Wimplicit-function-declaration]
      [cc]   GPIO_Config();
      [cc]   ^
      [cc]    ^
      [cc]    RCCPLLCmd(ENABLE);
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c:58:3: warning: implicit declaration of function 'RCCPLLCmd' [-Wimplicit-function-declaration]
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c: In function 'RCC_Config':
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c: At top level:
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c:78:6: warning: conflicting types for 'GPIO_Config'
      [cc]  void GPIO_Config(void)
      [cc]       ^
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c:11:2: note: previous implicit declaration of 'GPIO_Config' was here
      [cc]   GPIO_Config();
      [cc]   ^
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c: In function 'NVIC_Config':
      [cc] E:\CooCox\CoIDE\workspace\serwo\main.c:95:7: warning: extra tokens at end of #else directive
      [cc]  #else VECT_TAB_FLASH
      [cc]        ^
      [cc] Starting link
      [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g -nostartfiles -Wl,-Map=serwo.map -O0 -Wl,--gc-sections -LE:\CooCox\CoIDE\configuration\ProgramData\serwo -Wl,-TE:\CooCox\CoIDE\configuration\ProgramData\serwo/arm-gcc-link.ld -g -o serwo.elf ..\obj\stm32f10x_rtc.o ..\obj\stm32f10x_tim.o ..\obj\startup_stm32f10x_md_vl.o ..\obj\system_stm32f10x.o ..\obj\stm32f10x_pwr.o ..\obj\startup_stm32f10x_md.o ..\obj\stm32f10x_gpio.o ..\obj\main.o ..\obj\stm32f10x_rcc.o ..\obj\syscalls.o ..\obj\stm32f10x_flash.o ..\obj\misc.o
      [cc] ..\obj\startup_stm32f10x_md.o:(.co_stack+0x0): multiple definition of `pulStack'
      [cc] ..\obj\startup_stm32f10x_md.o:(.isr_vector+0x0): multiple definition of `g_pfnVectors'
      [cc] ..\obj\startup_stm32f10x_md.o: In function `Default_Reset_Handler':
      [cc] e:/program files (x86)/gnu tools arm embedded/4.9 2014q4/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: Warning: size of symbol `g_pfnVectors' changed from 292 in ..\obj\startup_stm32f10x_md_vl.o to 268 in ..\obj\startup_stm32f10x_md.o
      [cc] ..\obj\startup_stm32f10x_md_vl.o:(.co_stack+0x0): first defined here
      [cc] ..\obj\startup_stm32f10x_md_vl.o:(.isr_vector+0x0): first defined here
      [cc] E
      [cc] :\CooCox\CoIDE\workspace\serwo\cmsis_boot\startup/startup_stm32f10x_md.c:186: multiple definition of `Default_Reset_Handler'
      [cc] ..\obj\startup_stm32f10x_md_vl.o:E:\CooCox\CoIDE\workspace\serwo\cmsis_boot\startup/startup_stm32f10x_md_vl.c:186: first defined here
      [cc] ..\obj\main.o: In function `RCC_Config':
      [cc] E:\CooCox\CoIDE\workspace\serwo/main.c:58: undefined reference to `RCCPLLCmd'
      [cc] collect2.exe: error: ld returned 1 exit status

BUILD FAILED
Total time: 1 second

Prosiłbym o pomoc bo bez tego ani rusz dalej.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

}else{}

}

Pierwszy nawias zamyka If potem mam else zamknięty, a ten linijke niżej nawias zamyka funkcje. Faktycznie trochę nie przejrzyście ale funkcja jest zamknięta.

Link do komentarza
Share on other sites

Faktycznie, nawiasy są ok - wcięcia potrafią zmylić.

Na początku masz deklarację:

void GPIO_Cofig(void);

Jest w niej literówka, brakuje "n"

void GPIO_Config(void);

Sorki, to już było. popatrzę dalej.

[ Dodano: 29-09-2015, 10:44 ]

Jeszcze RCCPLLCmd, zgubiło podkreślenie:

RCC_PLLCmd

Link do komentarza
Share on other sites

Faktycznie zgubiłem podkreślenie, naprawione ale ten sam błąd cały czas

[cc] collect2.exe: error: ld returned 1 exit status

Dodam że używam środowiska CooCox. Ten kod mam przepisany z książki dla zestawu ZL27ARM lecz pozmieniałem maksymalne wartości sygnałów taktujących dla swojej płytki(STM32f100RB).

Dobra nie mam pytań wczoraj późna godzina była i nie myślałem trzeźwo 🙂 Wystarczyło stworzyć nowy projekt i przekopiowałem kod i build succesful 🙂 Dzięki za wyłapanie błędów.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.