Estoy intentando habilitar el periferial USART1 en el MCU Stm32F103. Mi código se ve así:
#include "stm32f10x.h"
void UARTInit(void);
void GPIOInit(void);
USART_InitTypeDef USART_1;
int main()
{
SystemInit();
GPIOInit();
UARTInit();
USART_SendData(USART1, 0x12);
while (1)
{
}
}
void UARTInit()
{
RCC ->APB2ENR |= RCC_APB2ENR_USART1EN;
USART_StructInit(&USART_1);
USART_Init(USART1, &USART_1);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void GPIOInit()
{
RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN |RCC_APB2ENR_AFIOEN;
GPIOA-> CRH &= ~GPIO_CRH_CNF9;
GPIOA -> CRH |= GPIO_CRH_CNF9_1;
GPIOA -> CRH |= GPIO_CRH_MODE9_1;
GPIOA->CRH &= ~GPIO_CRH_CNF10;
GPIOA->CRH |= GPIO_CRH_CNF10_0;
GPIOA->CRH &= ~GPIO_CRH_MODE10_1;
}
Como puede ver, primero habilito el reloj para USART1 y luego lo inicializo. Antes de ejecutar esto: RCC - > APB2ENR | = RCC_APB2ENR_USART1EN todos los bits en los registros USART se establecen en 0 (vea la primera imagen adjunta). Pero cuando el reloj está habilitado, los bits TC y TXE se establecen en 1, incluso cuando USART aún no está habilitado. (ver segunda pantalla).
Por lo tanto, si tiene alguna idea de por qué sucede esto, le agradeceré mucho su ayuda. Gracias.