Skocz do zawartości

[C][STM32] Konfiguracja początkowa


Pomocna odpowiedź

Napisano
#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.

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

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

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

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...