Cómo configurar STM32 con dos velocidades de reloj diferentes

4

Estoy usando STM32F103RE para implementar una operación que consume mucho tiempo. Este dispositivo está conectado a la PC a través de un puerto USB. No soy un experto en la configuración de estas MCU, pero parece que cuando se configura para comunicarse a través de USB, no puede usar la máxima velocidad de procesamiento posible, que es de 72 MHZ.

¿Hay alguna manera de configurar mi STM32F103 con dos frecuencias diferentes (una para la comunicación USB y la otra para el proceso interno a 72MHZ)?

Esto es parte del código de configuración USB:

RCC->APB1ENR |= (1 << 23);                /* Enable clock for USB */

/* Enable USB interrupts */
NVIC->IPR [5] |= 0x00000010;              /* Set priority lower than SVC */

NVIC->ISER[0] |= (1 << (USB_LP_CAN_RX0_IRQChannel & 0x1F));

/* Control USB connecting via SW */
RCC->APB2ENR |= (1 << 5);                 /* Enable clock for GPIOD */
GPIOD->CRL &= ~0x00000F00;                /* Clear port PD2 */
GPIOD->CRL |=  0x00000700;                /* PD2 General purpose output open-drain, max speed 50 MHz */
GPIOD->BRR  = 0x0004;                     /* Reset PD2 (set to low) */

Y esta es mi configuración de reloj smt32_init:

#define __CLOCK_SETUP              1
#define __RCC_CR_VAL               0x01010082
#define __RCC_CFGR_VAL             0x001D8402
#define __HSE                      8000000

Supongo que algún cambio en RCC_CR o RCC_CFGR debería resolver el problema, pero creo que también hay otras configuraciones para que el flash funcione con alta frecuencia.

¿Cómo puedo hacer eso?

    
pregunta Ehsan Khodarahmi

1 respuesta

3

Cuando se trata de programar el STM32, RM0008 Manual de referencia debe ser su compañero constante.

  

Sección 7.2.3 PLL:

     

Si se utiliza la interfaz USB en la aplicación, el PLL debe estar   Programado para salida a 48 o 72 MHz. Esto es necesario para proporcionar un 48 MHz.   USBCLK.

Por lo tanto, no solo es posible, es una de las dos posibles frecuencias que puede elegir al utilizar el USB.

Debería poder configurar el reloj del sistema a 72 MHz con las definiciones y funciones de las bibliotecas de suministros de STM. Pero tu RCC_CFGR se ve bien. Has seleccionado HSE como tu PLLSRC . Y estás configurando el PLLMUL a x9. Entonces, siempre que su HSE sea suministrado por un oscilador de 8 MHz (que parece que es), obtendrá 72 MHz para el SYSCLK. Y tienes USBPRE establecido en 0 , de modo que dividirás el PLL entre 1.5 para obtener tus 48 MHz.

Mirando el árbol del reloj en la página 90, que se parece a todo lo que se requiere.

En cuanto al acceso a flash, debe asegurarse de tener dos estados de espera. Esto se hace escribiendo 010 en el registro FLASH_ACR . Consulte la página 60 para obtener más detalles sobre ese registro.

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas