#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) ; //无限循环
}
/******************************************************************************
* 函数名 :MySystemInit
* 描述 :配置不同的系统时钟
* 输入 : 无
* 输出 : 无
* 返回 : 无
******************************************************************************/
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存储器延时时钟周期数
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能FLASH预取指缓存
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置PLL作为系统时钟源
while(RCC_GetSYSCLKSource() != 0x08) //等待PLL成为系统时钟源有效
{
}
}
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; // 关闭滴答定时器
} |