moin moin, mache grade meine ersten Schritte mit dem Arm-cortex-F4. Eine LED blink und die UART gibt ein Echo aus. Das funktioniert aber nur wenn der Interne Oszi in Grundstellung arbeitet. Versuche ich die PLL einzuschalten geht gar nichts mehr. Die Werte für die PLLs: M=16, N=336, P=2, Q=7, APB1=4, APB2=2 Die Umschalter sollten auch richtig stehen. Was kann ich übersehen haben? Hat jemand schon solche Erfahrungen gemacht? Schon mal Danke. Mit Gruß Pieter
Du musst warten bis der PLL sich eingeschwungen hat. Guck in die SetSysClock().
1 | /**
|
2 | * @brief Configures the System clock source, PLL Multiplier and Divider factors,
|
3 | * AHB/APBx prescalers and Flash settings
|
4 | * @Note This function should be called only once the RCC clock configuration
|
5 | * is reset to the default reset state (done in SystemInit() function).
|
6 | * @param None
|
7 | * @retval None
|
8 | */
|
9 | static void SetSysClock(void) |
10 | {
|
11 | /******************************************************************************/
|
12 | /* PLL (clocked by HSE) used as System clock source */
|
13 | /******************************************************************************/
|
14 | __IO uint32_t StartUpCounter = 0, HSEStatus = 0; |
15 | |
16 | /* Enable HSE */
|
17 | RCC->CR |= ((uint32_t)RCC_CR_HSEON); |
18 | |
19 | /* Wait till HSE is ready and if Time out is reached exit */
|
20 | do
|
21 | {
|
22 | HSEStatus = RCC->CR & RCC_CR_HSERDY; |
23 | StartUpCounter++; |
24 | } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); |
25 | |
26 | if ((RCC->CR & RCC_CR_HSERDY) != RESET) |
27 | {
|
28 | HSEStatus = (uint32_t)0x01; |
29 | }
|
30 | else
|
31 | {
|
32 | HSEStatus = (uint32_t)0x00; |
33 | }
|
34 | |
35 | if (HSEStatus == (uint32_t)0x01) |
36 | {
|
37 | /* Enable high performance mode, System frequency up to 168 MHz */
|
38 | RCC->APB1ENR |= RCC_APB1ENR_PWREN; |
39 | PWR->CR |= PWR_CR_PMODE; |
40 | |
41 | /* HCLK = SYSCLK / 1*/
|
42 | RCC->CFGR |= RCC_CFGR_HPRE_DIV1; |
43 | |
44 | /* PCLK2 = HCLK / 2*/
|
45 | RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; |
46 | |
47 | /* PCLK1 = HCLK / 4*/
|
48 | RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; |
49 | |
50 | /* Configure the main PLL */
|
51 | RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | |
52 | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); |
53 | |
54 | /* Enable the main PLL */
|
55 | RCC->CR |= RCC_CR_PLLON; |
56 | |
57 | /* Wait till the main PLL is ready */
|
58 | while((RCC->CR & RCC_CR_PLLRDY) == 0) |
59 | {
|
60 | }
|
61 | |
62 | /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
|
63 | FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; |
64 | |
65 | /* Select the main PLL as system clock source */
|
66 | RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); |
67 | RCC->CFGR |= RCC_CFGR_SW_PLL; |
68 | |
69 | /* Wait till the main PLL is used as system clock source */
|
70 | while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); |
71 | {
|
72 | }
|
73 | }
|
74 | else
|
75 | { /* If HSE fails to start-up, the application will have wrong clock |
76 | configuration. User can add here some code to deal with this error */
|
77 | }
|
78 | |
79 | }
|
Pieter schrieb: > mache grade meine ersten Schritte mit dem Arm-cortex-F4. > Eine LED blink und die UART gibt ein Echo aus. > Das funktioniert aber nur wenn der Interne Oszi in Grundstellung > arbeitet. Hallo Pieter, mit dem internen Oszillator wird normalerweise AUCH die PLL laufen. Prüfe doch das entsprechende Bit im Register ob die nicht schon läuft (wird normalerweise in den entsprechednen Routinen mit gestartet). rgds
moin moin, hätte ev. dazuschreiben sollen, daß ich mit dem mikroPascal rumspiele. Habe mich im HW-Debug mal durchgetippt, sowas wie Thomas beschrieben hat läuft dort auch. Muß mal vergleichen was genau. @Thomas, wenn HSE aus ist, sollte doch in der else genau der selbe Ablauf wie im then stehen, nur eben auf HSI bezogen. Richtig? Mit Gruß Pieter
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.