[STM32] Código confuso de comunicación en serie (comprenda la fuente del reloj del sistema)

Cuando se utiliza stm32f407 para comunicarse con el host de la computadora a través del puerto serie, el asistente del puerto serie imprime caracteres confusos. La solución de problemas principal se basa en los siguientes aspectos:

  • Compruebe si la configuración del protocolo de transmisión es coherente (velocidad en baudios, bits de datos, bits de parada, bits de paridad)
  • Compruebe si la frecuencia del oscilador de cristal externo de la MCU es consistente con la configuración de la función de biblioteca

Finalmente, se encontró que la frecuencia del oscilador de cristal externo no era consistente con la función de la biblioteca.

1. Análisis del reloj

1. Comprenda la fuente del reloj

Lo que queremos verificar es si la fuente de reloj del bus APB2 está configurada normalmente, porque el puerto serie USART1 que estamos usando actualmente está conectado al bus APB2 (bus de alta velocidad), según la siguiente figura, hay tres fuentes de reloj. :

  • HSI: Reloj interno de alta velocidad, oscilador RC, frecuencia 16MHz
  • HSE: reloj externo de alta velocidad, conectado a una fuente de reloj externa, el rango de frecuencia es de 4 MHz ~ 26 MHz
  • PLL: salida multiplicadora de frecuencia de bucle bloqueado en fase, su fuente de entrada de reloj se puede seleccionar como HSI/M, HSE/M (esencialmente todavía controlado por HSE o HSI)

Como resultado, la fuente de reloj seleccionada es PLLCLK . (Si quieres saber más, puedes consultar la última parte)

2. Calcular el reloj del sistema.

Ahora que sabemos que PLLCLK está seleccionado como fuente de reloj, podemos calcular el valor del reloj del sistema a lo largo de esta ruta. La frecuencia del reloj periférico del puntual atómico stm32f407 HSE = 8 M

① Ingrese a HSE

② Después de dividir por M, el resultado es HSE / M = 8 / M

③ ④ ⑤ ⑥ Después de N multiplicación, la salida del VCO es (HSE / M ) * N

⑦ Divida P nuevamente para obtener  SYSCLK = (HSE / M ) * N / P

2. Resuelva el problema de la inconsistencia entre la frecuencia del oscilador de cristal externo y la función de la biblioteca.

Como se puede ver en lo anterior , la frecuencia de reloj del sistema seleccionada SYSCLK = (HSE/M) * N/P, el archivo de configuración esperado SYSCLK = 144 MHz y los parámetros restantes también se especifican.

De hecho, el HSE depende de la situación específica de la placa de desarrollo. El HSE de stm32f4 es de 8 MHz, pero la frecuencia configurada en el archivo de configuración es de 25 M. Para no afectar el SYSCLK original, necesitamos modificar HSE y PLL_M.

  • HSE = 8M = 8000000
  • PLL_M = ( HSE/SYSCLK) * N/P = 8

1. Modificar HSE

La encarnación de HSE en el programa es la definición de macro HSE_VALUE, que se define en el archivo stm32f4xx.h.

Aquí hay dos métodos de modificación, puedes elegir cualquiera.

2. Modificar PLL_M

El número de división de frecuencia M se refleja en el programa como la definición de macro PLL_M, que se define en el archivo system_stm32f4xx.c.

 

3. ¿Por qué se puede determinar que la fuente del reloj es PLLCLK en lugar de HSE?

stm32 llamará a la función SystemInit cuando se inicie, que incluye la fuente de reloj para inicializar los periféricos. Esta función está definida en system_stm32f4xx.c. Directamente encontramos la función SetSysClock, que es la operación de borrar los bits del registro de control.

Entramos en la función SetSysClock, primero habilitamos el HSE y esperamos a que el reloj esté listo. El oscilador de cristal HSE es inestable cuando se enciende por primera vez y necesita esperar 6 ciclos de reloj del oscilador de cristal.

El PLL está habilitado y espera a que el reloj esté listo. El PLL está bloqueado al principio y debe esperar a que se desbloquee.

Una vez que todo esté listo, configure el PLL como reloj del sistema. 

 

Artículo de referencia:

Qué hacer si se produce una comunicación confusa durante el experimento de comunicación en serie - Electronics Enthusiasts Network (elecfans.com)

Supongo que te gusta

Origin blog.csdn.net/challenglistic/article/details/132404489
Recomendado
Clasificación