SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器
是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置
系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产
生一次中断,以此循环往复。
在使用时,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
接下来,利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁。
1、设置重装载寄存器的值
2、清除当前数值寄存器的值
3、配置控制与状态寄存器
配置头文件:
void PendSV_Handler(void)
{
}
uint32_t g_timer_count;
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
if(g_timer_count>0){
g_timer_count--;
}
}
定时器模块:
void init_timer()
{
SysTick_Config(SystemCoreClock/100000);
}
void delay_us(uint32_t time)
{
g_timer_count=time;
while(g_timer_count!=0){}
}
LED模块:
void LED_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
// while(1)
//return 0;
}
主函数:
int main(void)
{
LED_GPIO_Config();
init_timer();
while(1){
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
delay_us(1000*100);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_us(1000*100);
}