我们在前两节讲解了单片机启动到时钟树配置的内容,到此为止,单片机已经能开发别的功能并使用了,但这里我插入一个笔者个人觉得很重要的章节来介绍一个内核外设——滴答定时器(System Tick)。
根据cortex-M0+内核手册的介绍,这是一个24位倒计时定时器,它拥有4个可以访问的寄存器,
这个定时器和一般的定时器用法没什么区别,他没有高级定时器的功能,但是由于是内核白送的定时器,所以经常用于单片机的心跳时钟。
值得注意的是,滴答定时器是一个不可修改计数方式的定时器,他只能向下计数,查阅寄存器定义之后,进行如下代码的初始化操作,即可实现1ms定时并开启定时器中断。
开启定时器并打开中断之后,定时器就能正常工作,并且会正常进入其对应的中断服务函数,中断服务函数的名字可以直接在启动文件中找到(还记得第一节讲的中断向量表吗?)。
一般情况下,芯片厂商不会主动提供滴答定时器的中断服务函数接口,也就是xxxxx_it.c文件中不会出现此中断服务函数的名字(CW32的库会提供一个参考stm32 hal库的固件库,但是我觉得写的不符合我的风格索性自己写了一个滴答定时器的文件),任何时候,只需要有这么个同名函数存在于工程文件中,该中断服务函数就能被正常调用并执行,例如这样:
实际上,任何中断服务函数都可以用这种办法来重写一个自己的,只是大部分时候官方都已经提供了良好的固件库,也就不需要我们手动重写了。
这里编写了一个测试函数来测试滴答定时器是否正常工作,实际上是使用延时函数来验证的:
那么结果当然是正常工作辣!
在这里给一些建议,上手一款新的芯片的时候,完全可以直接用滴答定时器点灯来测试和上手。
总结:
滴答定时器是内核外设,芯片手册不会记录它的用法,内核手册才会有它的用法。
滴答定时器可以作为整个程序的心跳时钟,非常常用。
|