Estoy desarrollando un pequeño robot utilizando la placa de descubrimiento STM32L152C. Actualmente estoy intentando configurar la placa utilizando el STM32CubeMX. Nunca he trabajado en este nivel muy bajo (mi experiencia es mucho más sobre algoritmos), por lo tanto, comencé a hacer cosas simples, como enviar pocos caracteres al puerto UART. La placa no tiene un oscilador externo. Por lo tanto, estoy usando el oscilador RC interno.
Después de hacer esto, escribí un software muy fácil que envía continuamente un carácter al puerto UART:
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
unsigned char msg = '@';
while (1)
{
HAL_UART_Transmit(&huart2,&msg,1,1);
}
}
Usando un osciloscopio de 100 MHz esto es lo que obtengo del pin:
Elcarácterqueestoyenviandoesclaramentevisible,peroparecequelasalidaesalgoasícomoinestable.HepresionadoelbotónAUTOenelalcancemuchasveces,peronadacambia.
PenséquetalvezpodríaserunproblemaconelosciladorRC.Despuésdeconfigurarlafrecuenciadelreloja4.194MHz(elmáximo)conelconfiguradorSTM32,medíelreloj,perolasalidanoesloqueesperaría.
Estoesloqueobtengo:
Primero,notéquelaondanoestan"cuadrada", y también la frecuencia es ligeramente diferente: 4.202 MHz en lugar de 4.194 MHz.
Me gustaría entender mejor por qué obtengo esta salida.
Con respecto a la forma, ya que el osciloscopio es de 100 MHz y el reloj tiene una frecuencia de ~ 4 MHz, supongo que la herramienta de medición no es el problema. Con respecto a la frecuencia, diría que el problema está en la precisión del propio oscilador RC. ¿Pueden estos ser la causa del problema que estoy recibiendo en la UART?