STM32F07xx单片机Systick配置

#include "main.h"

typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;
/*----------------------------------------------------------------------------
 * SystemCoreClockConfigure: configure SystemCoreClock using HSI
 *----------------------------------------------------------------------------*/
void SystemCoreClockConfigure(void)
{
    
    
  RCC->CR |= ((uint32_t)RCC_CR_HSION);                     // Enable HSI
	
	RCC->CR &= ~((uint32_t)RCC_CR_HSEON);                    // Disable HSE
	
  while ((RCC->CR & RCC_CR_HSIRDY) == 0);                  // Wait for HSI Ready

  RCC->CFGR = RCC_CFGR_SW_HSI;                             // HSI is system clock
  while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI);  // Wait for HSI used as system clock

  FLASH->ACR  = FLASH_ACR_PRFTBE;                          // Enable Prefetch Buffer
  FLASH->ACR |= FLASH_ACR_LATENCY;                         // Flash 1 wait state

  RCC->CFGR |= RCC_CFGR_HPRE_DIV1;                         // HCLK = SYSCLK
  RCC->CFGR |= RCC_CFGR_PPRE_DIV1;                         // PCLK = HCLK

  RCC->CR &= ~RCC_CR_PLLON;                                // Disable PLL

  //  PLL configuration:  = HSI/2 * 12 = 48 MHz
  RCC->CFGR &= ~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMUL);
  RCC->CFGR |=  (RCC_CFGR_PLLSRC_HSI_DIV2 | RCC_CFGR_PLLMUL12);

  RCC->CR |= RCC_CR_PLLON;                                 // Enable PLL
  while((RCC->CR & RCC_CR_PLLRDY) == 0) __NOP();           // Wait till PLL is ready

  RCC->CFGR &= ~RCC_CFGR_SW;                               // Select PLL as system clock source
  RCC->CFGR |=  RCC_CFGR_SW_PLL;
  while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);  // Wait till PLL is system clock src
}

void delay_us(u16 us)
{
    
    
	SysTick->LOAD = us*8; 				//设置时间
	SysTick->VAL = 0x00;        	//清空计数器
	SysTick->CTRL = 0x01;      		//开始倒数
	
	while((SysTick->CTRL & 0x10000) == 0);

	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器
}

void delay_ms(u16 ms)
{
    
    
	SysTick->LOAD = 1000*8; 			//设置时间为1ms   
	SysTick->VAL = 0x00;        	//清空计数器
	SysTick->CTRL = 0x01;      		//开始倒数
	
	while(ms)
	{
    
    
		while((SysTick->CTRL & 0x10000) == 0);
		ms--;
	}
	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器
}

void GPIO_test(void)
{
    
                    
   GPIO_InitTypeDef GPIO_InitStructure;
	
	 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC , ENABLE);
	
   //Latch Pin
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
   GPIO_Init(GPIOC, &GPIO_InitStructure);		
}

int main(void)
{
    
    
  SystemCoreClockConfigure();
//	SystemCoreClockUpdate();
	USART_Config(115200);
	GPIO_test();
  while (1)
  {
    
    
		 GPIO_SetBits(GPIOC,GPIO_Pin_6);
     delay_ms(2000);
		
		 GPIO_ResetBits(GPIOC,GPIO_Pin_6);
     delay_ms(2000);
  }
}





猜你喜欢

转载自blog.csdn.net/qq_37449342/article/details/103204904