Ich bin sehr neu in STM32-Projekten und schreibe zum ersten Mal ein Programm mit STM32. Früher habe ich mit AVR programmiert und jetzt sollte ich zu STM32 übergehen. Ich habe ein Board mit STM32F427VG ohne externes XTAL. Ich habe den folgenden Code geschrieben, um eine einfache LED blinken zu lassen:
#include "stm32f4xx_conf.h"
#include "stm32f4xx.h"
int main(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitDef; //Where GPIO_InitDef is variable to work with struct
GPIO_InitDef.GPIO_Pin = GPIO_Pin_4 ;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitDef);
GPIO_SetBits(GPIOA, GPIO_Pin_4);
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
int i;
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_4);
for (i = 0; i < 500000; i++);
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
for (i = 0; i < 500000; i++);
}
}
Ich benutze Embitz, um meinen Code zu kompilieren. Um die interne Uhr zu konfigurieren, verwende ich die folgende Konfiguration:
Dann drücke ich auf Ausführen und dann auf Generieren. Dann kopiere ich die generierte system_stm32f4xx
Datei und ersetze sie durch die Standarddatei system_stm32f4xx
im Projekt.
Allerdings kann ich keine Änderung an der LED feststellen.
Ich weiß, dass ich in STM32-Projekten sehr neu bin, daher ist diese Frage höchstwahrscheinlich für jeden sehr einfach. Danke falls mir jemand hilft das Problem zu finden.
Sie müssen mehr tun, als die stm32f4xx-Datei zu ersetzen. Siehe http://clockspeeds.blogspot.com/2013/01/stm32f4-discovery-clock-frequency.html . Insbesondere müssen Sie an der Datei startup_stm32f4xx.c arbeiten.
Von dieser Seite:
> STEP 3: In stm32f4xx.h file ensure HSE (external clock) value is 8 MHz
>
>
> #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
> #endif /* HSE_VALUE */
>
>
> STEP 4: In startup_stm32f4xx.c file change comment on SystemInit()
> function
>
>
> /*----------Function
> prototypes-----------------------------------------------*/ extern int
> main(void); /*!< The entry point for the application. */
> //extern void SystemInit(void); /*!< Setup the microcontroller
> system(CMSIS) */ void Default_Reset_Handler(void); /*!< Default
> reset handler */ static void Default_Handler(void);
> /*!< Default exception handler */
>
> to
>
> /*----------Function
> prototypes-----------------------------------------------*/ extern int
> main(void); /*!< The entry point for the application. */
> extern void SystemInit(void); /*!< Setup the microcontroller
> system(CMSIS) */ void Default_Reset_Handler(void); /*!< Default
> reset handler */ static void Default_Handler(void);
> /*!< Default exception handler */
>
> STEP 5: On the same file down under there will be a function
>
> void Default_Reset_Handler(void)
>
> after assembly code towards the end add a line of code calling
> SystemInit() BEFORE calling main() ie, change to
>
> SystemInit(); main();
>
> That`s it! now in main function we can add
>
> RCC_HSEConfig(RCC_HSE_ON); while(!RCC_WaitForHSEStartUp()) { }
Sie müssen die CubeMX-Software verwenden, die für die Hardwarecodegenerierung für die STM32-MCU-Familie entwickelt wurde. Sie können die Systemuhr, gpio, spi, Ethernet usw. mit seiner GUI einfach einstellen.
Jan Koch
Dekan Franken
AbelTom
Systeminit
call oder ähnlichem initialisieren, dann müssen Sie den Systick-Handler handhaben, sonst können Sie bis Weihnachten warten und nichts wird passieren. :)