
本帖最后由 wambob 于 2015-1-8 12:09 编辑 最近要用到系统滴答来做扫描键盘,看了一些资料. 系统滴答就是一个24位的倒计时定时器,而且能够自动装置。 提到计数器,想必都知道,系统滴答也不例外,也是个计数器.而且是倒计数,当为0时,会出现一个标志位:COUNTFLAG. 可以查询这个标志.用来延时. 系统CM0.H里的定义: __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = ticks - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */ } 1.根据定义,可以写个延时函数 Systick.c #include "systick.h" void Delay_Nms(int16_tNms) { Syytem->LOAD=(int32_t)Nms*9000; //装载初值 SysTick->CTRL|=0x01; //开始计时 while(!(SysTick->CTRL&(1<<16))); SysTick->CTRL=0X00000000; SysTick->VAL=0X00000000; } systick.h #ifndef _SYSTICK_H #define _SYSTICK_H #include "stm32f0xx_conf.h" void Delay_Nms(uint16_t Nms); #endif 2.扫描键盘用中断的方法 程序调用core_cm0.c里的SysTick_Config的函数 if(SysTick_Config(SystemCoreClock/100) //配置滴答频率 1秒/100= 10MS { KeyScan(void); } SystemCoreClock 在 system_stm32f0xx.c 中定义为 uint32_t SystemCoreClock =48000000; |
必须的,刚学习,自己的体会