STM32F4 - Registro de restablecimiento de RCC

1

No puedo entender cuál es el trabajo de la función RCC_xxPeriphResetCmd() en el controlador stm32f4xx-rcc. de hecho, lo que no me doy cuenta es lo que le sucede a un periférico cuando lo restablecemos (al establecer su bit relativo en el RCC AHBx (o APBx) registro de restablecimiento de periféricos )

por ejemplo para AHB1 Peripheral:

el registro es:

La función del controlador

y stm32f4xx-rcc es:

void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    RCC->AHB1RSTR |= RCC_AHB1Periph;
  }
  else
  {
    RCC->AHB1RSTR &= ~RCC_AHB1Periph;
  }
}
    
pregunta Amin

1 respuesta

3

Los Registros de restablecimiento de periféricos deben hacer que todo el conjunto de registros y el estado interno del periférico se restablezcan a los valores predeterminados de encendido. Esto significa que no solo los registros que están expuestos al usuario, sino también cualquier registro interno, contadores o indicadores deben configurarse como lo estarían cuando el dispositivo se encienda inicialmente. Sin embargo, esto no se especifica claramente en la hoja de datos o el manual de referencia, lo cual es desafortunado.

Algunas de las descripciones de los periféricos en la hoja de datos hacen referencia a cosas que suceden cuando se activa el restablecimiento del periférico, y esto da una idea de la profundidad de la restauración del periférico. Aquí hay un ejemplo del STM32F4xx manual de referencia :

  

Registro de bloqueo de configuración de puerto GPIO (GPIOx_LCKR)   (x = A..I / J / K)   Este registro se utiliza para bloquear la configuración de los bits de puerto cuando una secuencia de escritura correcta   Se aplica al bit 16 (LCKK). El valor de los bits [15: 0] se utiliza para bloquear la configuración de   GPIO. Durante la secuencia de escritura, el valor de LCKR [15: 0] no debe cambiar. Cuando el   La secuencia LOCK se ha aplicado en un bit de puerto, el valor de este bit de puerto ya no puede ser   modificado hasta el próximo MCU o reinicio periférico.

Esto deja claro que el restablecimiento de periféricos puede lograr cosas que el programa de usuario no puede hacer de otra manera.

A tu comentario:

  

según entiendo, ¿dices que la unidad RCC restablece un periférico a su valor predeterminado dándole un poco de reloj?

La sincronización de un periférico es lo que permite que ese periférico funcione. Generalmente, todos los dispositivos periféricos requieren un reloj para controlar sus operaciones internas y garantizar la sincronicidad con el resto de la MCU. Esto es completamente independiente de la operación de restablecimiento, aunque el Reinicio y el Controlador del reloj manejan ambas funciones.

Sería lógico suponer que el reinicio periférico activa el mismo circuito que el reinicio de encendido, lo que significa que el reinicio periférico será efectivo incluso si el RCC desactiva el reloj del periférico. Sin embargo, esto es tampoco está documentado en cualquier lugar que pueda encontrar, y es posible que algunos aspectos del comportamiento de restablecimiento sean sincrónicos y no funcionen si el periférico no recibe un reloj.

    
respondido por el ajb

Lea otras preguntas en las etiquetas