Estoy usando STM32F103RE para implementar una operación que requiere mucho tiempo. Este dispositivo se conecta a la PC a través de un puerto USB. No soy un experto en configurar 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 forma de configurar mi STM32F103 con dos frecuencias diferentes (una para comunicación USB y otra para procesamiento interno a 72 MHz)?
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 flash funcione con alta frecuencia.
¿Cómo puedo hacer eso?
Cuando se trata de programar el STM32, el Manual de referencia RM0008 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 programarse para una salida de 48 o 72 MHz. Esto es necesario para proporcionar un USBCLK de 48 MHz.
Por lo tanto, no solo es posible, es una de las dos frecuencias posibles que puede elegir al utilizar el USB.
Debería poder configurar el reloj del sistema a 72 MHz utilizando las definiciones y funciones en las bibliotecas de suministros de STM. Pero te RCC_CFGR
ves bien. Ha seleccionado HSE como su PLLSRC
. Y estás configurando el PLLMUL
a x9. Entonces, siempre que su HSE sea alimentado por un oscilador de 8 MHz (que parece que lo es), obtendrá 72 MHz para el SYSCLK. Y ha USBPRE
configurado para 0
que divida el PLL por 1,5 para obtener sus 48 MHz.
Mirando el árbol del reloj en la página 90, parece todo lo que se requiere.
En cuanto al acceso a flash, debe asegurarse de tener dos estados de espera. Eso se hace escribiendo 010
al FLASH_ACR
registro. Consulte la página 60 para obtener más detalles sobre ese registro.
Gustavo Litovsky
Gustavo Litovsky
chris stratton