STM32F407标准库学习笔记-SYSTICK

SYSTICK定时器与内核紧密相连,请参考ARM公司的手册,他的中断使能在自己的模块中,中断优先级和标志位在SCB中。

  • 寄存器定义core_cm4.h
typedef struct
{
  __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
  __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */
  __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */
  __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */
} SysTick_Type;
控制及状态寄存器:计数标志、时钟源、异常(中断)使能、计时器使能(开始)
重装载数值寄存器:倒计时起始值,24位有效,因为是减到0后再减1后重装,所以写入值要在目标值上减1
当前值寄存器:存有倒计数的当前值,和计数标志位有联动关系,具体见权威手册
校准寄存器:校准计时用,部分厂家会去掉此功能,读取值位零,较少使用
SysTick_Config(uint32_t ticks)
设置优先级为15(异常中的最低),使能计时器,使能计时器中断,时钟源是SYSCLK
虽然设置优先级时调用了NVIC相关函数,但是systick优先级设置在SCB模块中,只是该函数会根据中断向量号选择设置NVIC还是SCB,实际上与NVIC寄存器无关。
  • misc.c
SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)

更换systick时钟源的函数

  • 有关中断标志位的疑惑
    一般而言,中断出发后,在服务函数的最后需要清除中断标志位,保证下次中断正常,比如在使用EXTI时,EXTI->PR唤起中断后,需要写1完成清零,但是systick的相关中断不需要这一步即可正常运行,似乎默认硬件自动清零;它的中断标志位在SCB->ICSR中,在参考手册、内核手册、权威指南中均没有自动复位的描述,甚至留有写1清零位,但似乎并不需要使用。

  • 使用流程
    只要使用SysTick_Config函数、编写服务函数即可
    如果不适用默认的配置,可以仿照库函数自行配置,或者参考权威指南内的步骤建议
    在使用OS时,会被用作为OS提供时基,就不能实现其他功能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值