#include "stm32f10x.h"
#include "led.h"
#include "tim.h"
u32 TimingDelay;
ErrorStatus HSEStartUpStatus; // 變量定義
void SysTick_Init(void);
void Delay_ms(__IO u32 nCount);
int main(void)
{
GPIO_Configuration(); //配置GPIO
SysTick_Init();
EXTI_Configuration(); //配置EXTI
NVIC_Configuration(); //配置NVIC
TIM_Configuration();
while (1) ; //無限循環(huán)
}
/******************************************************************************
* 函數(shù)名 :MySystemInit
* 描述 :配置不同的系統(tǒng)時鐘
* 輸入 : 無
* 輸出 : 無
* 返回 : 無
******************************************************************************/
void MySystemInit()
{
RCC_DeInit(); //將RCC寄存器設為默認值
RCC_HSEConfig(RCC_HSE_ON); //打開外部高速時鐘
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速時鐘工作
if(HSEStartUpStatus == SUCCESS)
{
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz
RCC_PLLCmd(ENABLE); //使能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL就緒
{
}
RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2
FLASH_SetLatency(FLASH_Latency_2); //設置FLASH存儲器延時時鐘周期數(shù)
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能FLASH預取指緩存
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //設置PLL作為系統(tǒng)時鐘源
while(RCC_GetSYSCLKSource() != 0x08) //等待PLL成為系統(tǒng)時鐘源有效
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO, ENABLE); //使能PA,PB,PC,PF,AFIO時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
}
void SysTick_Init(void)
{
/* SystemCoreClock / 1000 1ms中斷一次
* SystemCoreClock / 100000 10us中斷一次
* SystemCoreClock / 1000000 1us中斷一次*/
//if (SysTick_Config(72000)
if (SysTick_Config(SystemCoreClock / 1000)) // 1ms中斷一次
{
while (1);
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; // 關閉滴答定時器
}
void Delay_ms(__IO u32 nTime)
{
TimingDelay = nTime;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 使能滴答定時器
while(TimingDelay != 0);
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; // 關閉滴答定時器
} |