Skocz do zawartości
ziger

[C][STM32] Konfiguracja początkowa

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.

Udostępnij ten post


Link to post
Share on other sites

W kodzie deklarujesz:

void GPIO_Cofig(void);

Potem wywołujesz a także masz zdefiniowaną funkcję:

GPIO_Config();

Zgubiłeś literkę w deklaracji 🙂

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Poprawione ale niestety nie to było problemem nadal ten sam błąd.

Udostępnij ten post


Link to post
Share on other sites

Na końcu funkcji RCC_Config (linijka przed GPIO_Config) brakuje nawiasu zamykającego }

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

Możesz wkleić pełny komunikat o błędzie? Akurat ta linijka nic nie mówi.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

edytowałem poprzedni post 🙂 Dzięki za pomoc coś się musiał zwiesić CooCox, już wszystko śmiga 🙂

Udostępnij ten post


Link to post
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!

Gość
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...