Sto cercando di capire come programmare processori arm, nello specifico il 32f100rb della stm32 discovry.
Come compilatore ho deciso di usare keil, e qui iniziano i problemi, per ora sono riuscito a far funzionare gli esempi interni di keil (quelli della cartella stm32) e quelli presi dall kit di librerie ufficiali della stm. Poi da quelli ufficiali sono anche riuscito a modificarli senza problemi, es. provando a generare un PWM su di uno led della scheda, e fin qui tutto ok.
Il problema sorge quando voglio creare un progetto su keil da zero: dopo aver selezionato il micro, aggiungo lo startup e system_stm32f10x.c(preso da un esmpio delle librerie), e nel main.c(creato da zero) ci includo stm32f10x.h, fin qui tutto ok se provo a compilare con il main vuoto è ok. Però cosi facendo non ho nessuna libreira e dovrei programmare esclusivamente modificando i singoli registri. Quindi ho provato ad includere "stm32f10x_gpio.h", il file lo trova e sembra ok, anche scrivendo delle funzioni sembra riconoscerle, ma quando compilo mi da un errore "npt.axf: Error: L6218E: Undefined symbol GPIO_Init (referred from main.o).".
Questo è il main:
- Codice: Seleziona tutto
#include <stm32f10x.h>
#include <C:\Users\Silvio\Desktop\STM ARM\Progetti keil\new project test\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_gpio.h>
#include <C:\Users\Silvio\Desktop\STM ARM\Progetti keil\new project test\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_rcc.h>
void init_GPIO(void){
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOD Periph clock enable */
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* Configure PD0 and PD2 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
int main(){
init_GPIO();
}
Se qualcuno fosse in grado di illuminarmi...
Grazie in anticipo
P.S. Cercando in giro mi sembra di aver capito che il problema protebbe essere legato al fatto che non ho devinot la funzione "GPIO_Init", ma non saprei