STM32-Acerca del bit de bandera de RCC en K5

 

Diagrama de bloques del sistema de reloj STM32

STM32 tiene 4 fuentes de reloj independientes: HSI, HSE, LSI, LSE.
①, HSI es un reloj interno de alta velocidad, oscilador RC, la frecuencia es de 8MHz, la precisión no es alta.
② HSE es un reloj externo de alta velocidad, que se puede conectar a un resonador de cuarzo / cerámica o una fuente de reloj externa. El rango de frecuencia es 4MHz ~ 16MHz .
③ LSI es un reloj interno de baja velocidad, oscilador RC, con una frecuencia de 40 kHz, que proporciona un reloj de baja potencia.  
④, LSE es un reloj externo de baja velocidad, conectado a un cristal de cuarzo con una frecuencia de 32,768 kHz.

En el que el LSI como IWDGCLK (perro guardián independiente) y la fuente de reloj de la fuente de reloj RTC se  utilizan de forma independiente 

Y reloj interno de alta velocidad HSI, reloj externo de alta velocidad HSE, reloj de bucle de bloqueo de fase PLL, estos tres se utilizan como reloj del sistema después de la división de frecuencia o la multiplicación de frecuencia.

PLL es una salida de multiplicación de frecuencia de bucle con bloqueo de fase, y su fuente de entrada de reloj se puede seleccionar como HSI / 2, HSE o HSE / 2 . El multiplicador de frecuencia se puede seleccionar de 2 a 16 veces, pero la frecuencia de salida máxima no debe exceder los 72MHz. Como fuente de reloj del reloj del sistema después de la multiplicación de frecuencias

 

En MDK5, configuramos el reloj del sistema. Primero, necesitamos saber qué símbolos se utilizan para reemplazar el interruptor del reloj del sistema:

RCC_FLAG_HSIRDY: HSI oscillator clock ready
/*高速内部时钟振荡器准备就绪*/
RCC_FLAG_HSERDY: HSE oscillator clock ready   
/*高速外部时钟振荡器准备就绪*/                        
RCC_FLAG_PLLRDY: PLL clock ready
/*锁相环倍频输出准备就绪*/
RCC_FLAG_LSERDY: LSE oscillator clock ready
/*低速外部时钟振荡器准备就绪*/
RCC_FLAG_LSIRDY: LSI oscillator clock ready
/*低速内部时钟振荡器准备就绪*/
RCC_FLAG_PINRST: Pin reset
/*对引脚进行复位*/
RCC_FLAG_PORRST: POR/PDR reset
/*上电或断电复位*/
RCC_FLAG_SFTRST: Software reset
/*软件复位*/
RCC_FLAG_IWDGRST: Independent Watchdog reset
/*独立看门狗复位*/
RCC_FLAG_WWDGRST: Window Watchdog reset
/*窗看门狗复位*/
RCC_FLAG_LPWRRST: Low Power reset
/*低功耗复位*/

 ¿Por qué usar estos símbolos en su lugar, no podemos escribirlos nosotros mismos? En primer lugar, tenemos que saber que esto lo define automáticamente el sistema. Solo necesitamos llamar a estos parámetros. Esta es la definición de ellos que encontré en el archivo de la biblioteca:

#define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)
#define RCC_FLAG_HSERDY                  ((uint8_t)0x31)
#define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)
#define RCC_FLAG_PLLI2SRDY               ((uint8_t)0x3B)

/* Flags in the BDCR register */
#define RCC_FLAG_LSERDY                  ((uint8_t)0x41)

/* Flags in the CSR register */
#define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)
#define RCC_FLAG_BORRST                  ((uint8_t)0x79)
#define RCC_FLAG_PINRST                  ((uint8_t)0x7A)
#define RCC_FLAG_PORRST                  ((uint8_t)0x7B)
#define RCC_FLAG_SFTRST                  ((uint8_t)0x7C)
#define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
#define RCC_FLAG_WWDGRST                 ((uint8_t)0x7E)
#define RCC_FLAG_LPWRRST                 ((uint8_t)0x7F)
int main(void)
{
  	/* 设置系统时钟 */
  	RCC_Configuration();
  	/* 设置 GPIO 端口 */
  	GPIO_Configuration();
	/* 设置 EXIT */
  	EXTI_Configuration();
  	/* 设置 NVIC */
  	NVIC_Configuration();
	/* 设置 USART1 */
	USART_Configuration();

  	/* 检查是否发生过独立看门狗复位 ,是则进入if()内部,否则进入else内部 */
	if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
	{
		printf("\r\n The STM32 has been reset by IWDG  \r\n");	
		/* 清除看门狗复位标志 */
    	RCC_ClearFlag();
	}
  	else
  	{
		printf("\r\n The STM32 has't been reset by IWDG before  \r\n");
		/* 设置 Systick 定时器 */
		SysTick_Configuration();
		/* 设置 IWDG */
		IWDG_Configuration();
  	}
 	while(1);
}

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_39530692/article/details/112318465
Recomendado
Clasificación