STM32单片机Systick函数的使用方法

控制/MCU

1879人已加入

描述

在“嵌入式学习006_Systick使用(一)”中,详细介绍了Systick中寄存器的使用方法,用到了很多函数,实际上到了3.5版本的标准固件库中,移除了相关驱动函数,用户必须调用CMSIS.h中定义的函数,其中CMSIS只提供了一个Systick设置的函数,替代了STM32原来有的所有的驱动函数,这样做的目的,可能是简化Systick 的设置,可是降低了用户对SysTick的可控性。

在CMSIS中提供的函数是SysTick_Config(uint32_t ticks); 该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。

 

其中这个函数定义在Core_cm3.h中 ,源代码如下所示:

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

{

if (ticks 》 SysTick_LOAD_RELOAD_Msk)return (1);

SysTick-》LOAD= (ticks & SysTick_LOAD_RELOAD_Msk) - 1;

NVIC_SetPriority (SysTick_IRQn, (1《《__NVIC_PRIO_BITS) - 1);

SysTick-》VAL= 0;

SysTick-》CTRL= SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk|

SysTick_CTRL_ENABLE_Msk;

return (0);}

从上面的函数中可以看出,这个函数把Systick的初值,中断优先级,使能中断,开启定时器都完成了。大大简化了程序。

其中ticks 代表的是初值。例如系统时钟是72Mhz 那么要产生1ms的时基,那么我们可以这样去写。

SysTick_Config(SystemCoreClock/1000);当然也可以写成:SysTick_Config(72000);

了解了这些,我们可以用它来做一个简单的延时函数delay_ms(u16 time);

代码如下:

void delay_ms(u16 time)

{

nTime=time ;/nTime 是个全局变量 可设 extern u16 nTime;/

while(nTime);

}

在中断函数中直接加入nTime--;

在主函数 初始化过程中 加入SysTick_Config(72000);

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分