Hallo, ich habe bemerkt dass bei einem STM32F303K8 auf einem Nucleo-Board das setzen/rücksetzen des LED-Pins PB3 bei höheren Taktfrequenzen nicht mehr funktioniert. Bis 56 Mhz klappt es, wenn ich dann auf 60 Mhz oder darüber gehe funktioniert es nicht mehr. Verwendet wird der interne Oszillator (8 Mhz) zusammen mit der PLL (HSI/2 * Faktor). Beschränkungen für die GPIOs habe ich im Datenblatt nicht finden können. Habe ich da noch etwas übersehen? Ich habe das Problem so weit isoliert dass es nun aus diesem kurzen Programm besteht (Keil-Compiler). Wenn ich den Takt mit RCC->CFGR = 0x00340002; auf 60 Mhz oder höher setze wird der Pin nicht mehr geändert. #include "stm32f3xx.h" #define TOGGLE_LED GPIOB->ODR ^= 0x8 //PB3 int main(void){ //configure clock for system //PLL as clock (0x2) and factor for PLL RCC->CFGR = 0x00300002; //0x00300002 Faktor 14 = 56 Mhz RCC->CR |= RCC_CR_PLLON; //enable PLL //configure port B RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //enable clock GPIOB->MODER &= ~(GPIO_MODER_MODER3_Msk);//reset bits GPIOB->MODER |= 1 << GPIO_MODER_MODER3_Pos; //set as output while(1){ TOGGLE_LED; } }
:
Bearbeitet durch User
Ich fürchte eher dass dein Mikrocontroller abstürzt, weil: a) du die PLL zu früh benutzt. Du musst erst warten, bis sie bereit ist. b) Außerdem musst du Waitstates einstellen, weil der Flash Speicher nicht so schnell ist. Siehe http://stefanfrings.de/stm32/stm32f3.html#takt
Das liegt wohl eher an der Takteinstellung an sich: Erst Teilerfaktoren etc. einstellen, dann PLL einschalten, auf PLLRDY warten, und erst DANACH auf PLL mit den SW Bits umschalten. S. RM. Außerdem LATENCY im FLASH_ACR nicht vergessen.
Mit diesen Zeilen funktioniert das jetzt auch bis hin zu 64 Mhz: FLASH->ACR |= FLASH_ACR_LATENCY_1; RCC->CFGR |= RCC_CFGR_PLLMUL16; RCC->CR |= RCC_CR_PLLON; while (!(RCC->CR & RCC_CR_PLLRDY)); //wait for PLL RCC->CFGR |= RCC_CFGR_SW_1; //switch to PLL Vielen Dank an euch beide.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.