/** * @brief Restore peripheral config before entering STOP mode. * @param None * @retval None */ static void RestoreConfiguration(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/ /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready and if Time out is reached exit */ HSEStatus = RCC_WaitForHSEStartUp(); if (HSEStatus == (uint32_t)0x01) { /* Enable Prefetch Buffer */ FLASH_SetLatency(FLASH_Latency_1); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK = HCLK */ RCC_PCLKConfig(RCC_HCLK_Div1); /* PLL configuration: = HSE * 6 = 48 MHz */ RCC_PREDIV1Config(RCC_PREDIV1_Div1); RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_CFGR_PLLMULL6); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); } }
void Clock_Setup(void){ FLASH_SetLatency(FLASH_Latency_1); RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLKConfig(RCC_HCLK_Div1); //GPIO clock RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, ENABLE); //SPI clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //I2C clock RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); //USART clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); }
void RCC_Config(void) { RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); //Включим внешний генератор while (SUCCESS != RCC_WaitForHSEStartUp()); //Подождем запуска генератора RCC_PLLCmd(DISABLE); RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_12); //Вход ПЛЛ внешний генератор умножим на 12 RCC_PLLCmd(ENABLE); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Системное тактирование от ПЛЛ RCC_HCLKConfig(RCC_SYSCLK_Div1); //Тактирование AHB с делением 1 RCC_PCLKConfig(RCC_HCLK_Div8); //Тактирование переферии с делением 8 RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div2); //Тактирование АЦП RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK); //Тактируем шину I2C от системного тактирования RCC_USARTCLKConfig(RCC_USART1CLK_PCLK); //Тактируем UART от шини переферии RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA + RCC_AHBPeriph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 + RCC_APB2Periph_USART1 + RCC_APB2Periph_TIM1 + RCC_APB2Periph_TIM15, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); #ifdef MCO_ENABLE GPIOA_Struct_init.GPIO_Pin = GPIO_Pin_8; GPIOA_Struct_init.GPIO_Mode = GPIO_Mode_AF; GPIOA_Struct_init.GPIO_Speed = GPIO_Speed_Level_2; GPIOA_Struct_init.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA,&GPIOA_Struct_init); RCC_MCOConfig(RCC_MCOSource_SYSCLK); while (1); #else RCC_MCOConfig(RCC_MCOSource_NoClock); #endif /*MCO_ENABLE */ };
int main(void) { uint32_t x = 0; uint32_t y = 0; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); if(RCC_WaitForHSEStartUp() == SUCCESS) { RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLKConfig(RCC_HCLK_Div1); RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_8); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); } generator_init(); generator_start(); delay_init(); lcd_init(); lcd_clear(); lcd_dma_start(); for (x=0;x<50;x++) { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } while (lcd_is_busy()); for (x=0;x<patternWidthPages*patternHeightPixels;x++) lcd_buf[x] = patternBitmaps[x]; print(1,0,"PLEASE",6); print(0,7,"STAND_BY",8); while (lcd_is_busy()); lcd_dma_start(); delay_ms(20000); for (x=0;x<patternWidthPages*patternHeightPixels;x++) lcd_buf[x] = patternBitmaps[x]; for (x=9;x>0;x--) { putchar_big(3,3,'0'+x); while (lcd_is_busy()); lcd_dma_start(); delay_ms(3000); } lcd_clear(); print(1,1,"URGENT",6); print(0,6,"MESSAGE!",8); while (lcd_is_busy()); lcd_dma_start(); delay_ms(3000); scroll_text(MESSAGE); delay_ms(3000); lcd_clear(); print(1,1,"THAT'S",6); print(3,3,"ALL",3); print(1,5,"FOLKS!",6); while (lcd_is_busy()); lcd_dma_start(); delay_ms(100000); for (x=0;x<10000;x++) { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } lcd_clear(); while (lcd_is_busy()); lcd_dma_start(); scroll_text(SECRET_MESSAGE); while(1) //Infinite loop! { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } }