¿Por qué no funciona este código de inicialización de reloj - STM32F205 [cerrado]

-3
#include <stm32f2xx_gpio.h>
#include <stm32f2xx_rcc.h>
#include <stm32f2xx_flash.h>
#include <stm32f2xx_exti.h> 
#include <stm32f2xx.h>
#include <stm32f2xx_syscfg.h>
#include <misc.h>

void SetupClock()
{
RCC->CR |= 1 << 16;

while ((RCC->CR & 1 << 17) == RESET) {}

//RCC->PLLCFGR |= 1 << 17;
RCC->PLLCFGR = 0x5401E06;

RCC->CFGR &= ~(1 << 4 | 1 << 5 | 1 << 6 | 1 << 7 | 1 << 11 | 1 << 14 | 1 << 13);
RCC->CFGR |= 1 << 10 | 1 << 12;
RCC->CFGR |= 1 << 15;

FLASH->ACR &= ~(1 << 2);
FLASH->ACR |= 1 << 0 | 1 << 1;

RCC->CR |= 1 << 24;

while ((RCC->CR & 1 << 25) == RESET) {}

RCC->CFGR &= ~(1 << 0);
RCC->CFGR |= 1 << 1;

while (((RCC->CFGR & 1 << 2) != RESET) && ((RCC->CFGR & 1 << 3) != SET)) { }
}

int main()
{
SetupClock();

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

for (;;)
{
  GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_SET);
  asm("nop");
  < ... >
  asm("nop");
  GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);
  asm("nop");
  < ... >
  asm("nop");
}
}

El código se escribe de acuerdo con el manual pero la frecuencia está desactivada.

    
pregunta user61143

1 respuesta

0

Este código funciona:

void SetupClock()
{
RCC->CR |= 1 << 16;

while ((RCC->CR & 1 << 17) == RESET) {}

//RCC->PLLCFGR |= 1 << 17;
RCC->PLLCFGR = 0x5401E06;

RCC->CFGR &= ~(1 << 4 | 1 << 5 | 1 << 6 | 1 << 7 | 1 << 11 | 1 << 14 | 1 << 13);
RCC->CFGR |= 1 << 10 | 1 << 12;
RCC->CFGR |= 1 << 15;

FLASH->ACR &= ~(1 << 2);
FLASH->ACR |= 1 << 0 | 1 << 1 | 1 << 8 | 1 << 9 | 1 << 10;

RCC->CR |= 1 << 24;

while ((RCC->CR & 1 << 25) == RESET) {}

RCC->CFGR &= ~(1 << 0);
RCC->CFGR |= 1 << 1;

while (((RCC->CFGR & 1 << 2) != RESET) && ((RCC->CFGR & 1 << 3) != SET)) { }
}

Con

SetSysClock();

Comentó en el archivo de inicio.

    
respondido por el user61143

Lea otras preguntas en las etiquetas