#include "delay.h"
#include "stm32f10x.h"
static u8 fac_us=0;
static u16 fac_ms=0;
static u16 fac_s=0;
void Delay_Init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //?????????±?? HCLK/8
fac_us=1.0/9000000; //???????±????1/8
fac_ms=(u16)fac_us*1000;
fac_s=(u16)fac_ms*1000;
}
void delay_us(u32 us)
{
u32 temp;
SysTick->LOAD=us*fac_us;
SysTick->VAL=0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //??±??????÷
SysTick->VAL =0X00;
}
void delay_ms(u16 ms)
{
u32 temp;
SysTick->LOAD=ms*fac_ms;
SysTick->VAL =0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
void delay_s(u32 s)
{
u32 temp;
SysTick->LOAD=s*fac_ms;
SysTick->VAL=0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //????????
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
#include"stm32f10x.h"
#include"delay.h"
void GPIO_Configuration(void);
void RCC_Configuration(void);
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
Delay_Init();
while(1)
{
// GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
//delay_ms(250);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
delay_us(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_us(500);
}
}
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); //????RCC?±????????????????×???
RCC_HSEConfig(RCC_HSE_ON);//?????????????????÷(HSE)
HSEStartUpStatus=RCC_WaitForHSEStartUp(); //????HSE????
if(HSEStartUpStatus==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);//???? RCC_GetSYSCLKSource() ??·?????0x08
// - 0x08: PLL used as system clock
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
// RCC_APB2PeriphClockCmd?????ò????????APB(APB2)???§?±??
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ?è??PA2,PA3???????ì??????×??ó·?×???????50MHz*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //???¨GPIO????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//?¨?ù??????????
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???¨?ù????????×÷????
GPIO_Init(GPIOA , &GPIO_InitStructure); //?ù?????¨????????GPIOx???§
}
|