|
发表于 2011-5-7 00:39:56
|
显示全部楼层
上面两位说的对,3.4.0库里面SysTick关键函数就是SysTick_Config(),SystemCoreClock = 72 000 000 Hz,实际上SysTick_Config()的参数就是计数重装初值,(SystemCoreClock / 1000)这个参数是计时1ms所需要的计数初值,也就是72000。计满72000也就是1ms就进入中断,等待这样的1000次中断之后,灯开始亮和灭。(点灯为例,便于说明问题,精确的1s延时交替亮灭。最重要是动手写,说出来用处不大,下面的代码可以作为工程代码烧到板子上调试。)
/*
**File:main.h
*/
#ifdef __main_h
#define __main_h
#include "stm32f10x.h"
void TimingDelayDecrement(void);
#endif
/*
**File:main.c
*/
#include "main.h"
#define __IO uint32_t nTime;
void Delay( __IO uint_t nTime );
void RCC_Configuration(void);
void GPIO_Configuration(void);
int main(void)
{
SystemInit();
RCC_Configuration();
GPIO_Configuration();
SysTick_Config( SystemCoreClock / 1000 );
if( SysTick_Config( SystemCoreClock / 1000 ))
{
while(1);
}
while (1)
{
GPIO_ResetBits( GPIOB, GPIO_Pin_12 );
Delay( 1000 );
GPIO_SetBits( GPIOB, GPIO_Pin_12 );
Delay( 1000 );
}
}
void Delay( __IO uint32_t nTime )
{
TimingDelay = nTime;
while( TimingDelay !=0 );
}
void TimingDelay_Decrement(void)
{
if( TimingDelay != 0x00 )
{
TimingDelay--;
}
}
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOB, &GPIO_InitStructure );
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
}
}
#endif
/*
**File:stm32f10x_it.c
*/
#include "main.h"
#include "stm32f10x_it.h"
void SysTick_Handler(void)
{
TimingDelay_Decrement();
} |
|