新闻中心

EEPW首页>模拟技术>牛人业话> 从滴答时钟了解STM32库操作

从滴答时钟了解STM32库操作

作者:areak 时间:2014-05-04 来源:电子产品世界 收藏

  SysTick->CTRL |= CTRL_TICKINT_Set;这句话就是用来配置寄存器的语句, SysTick是系统定义的一个结构体如下,SysTick->CTRL即为滴答时钟的控制寄存器。

本文引用地址://m.amcfsurvey.com/article/246289.htm

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*/

__Iuint32_t CALIB; /*!< Offset: 0x 00C (R/ )SysTick Calibration Register*/

} SysTick_Type; //声明一个SysTick_Type型的结构体。

#define SysTick((SysTick_Type*)SysTick_BASE) /*!< SysTick configuration struct */

#define SysTick_BASE(SCS_BASE +0x0010UL) /*!< SysTick Base Address*/

#define SCS_BASE(0xE000E000UL) /*!< System Control Space Base Address*/

  定义一个SysTick_Type类型的结构体实例SysTick,而从根本上来说这是一个地址,就是芯片内部分配给滴答时钟的实际地址0xE000E000UL+0x0010UL。

  CTRL_TICKINT_Set是一个宏定义,定义如下

/* CTRL TICKINT Mask */

#define CTRL_TICKINT_Set((u32)0x00000002)

#define CTRL_TICKINT_Reset((u32)0xFFFFFFFD)

  至此,SysTick->CTRL |= CTRL_TICKINT_Set;这句话的意义已经很清晰了,就是给地址0xE000E000+0x0010 +0x000赋一个0x00000002的值,对应滴答时钟的CTRL寄存器的第2位置1。即为开启中断的意思。

  上面讲的是用查询的方式,下面再说下中断触发。只需调用下面这个函数即可完成中断的设置。

  SysTick_Config(uint32_t ticks);具体实现如下:

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)return (1);

SysTick->LOAD= ticks - 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);

}

  函数的参数为ticks,是要装入寄存器SysTick->LOAD的计数值,如果系统时钟为72M,把ticks赋值为SystemFrequency/10000,表示计数到720个时钟周期产生一次中断,而一个时钟周期的时间为(1/72)us,所以720x(1/72)=10us,也就实现了定时10us的功能。

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);为SysTick中断设置优先级。将寄存器SysTick->VAL的值清0。然后使能中断,使能SysTick,时钟源选择为AHB时钟。当定时时间到时,进入中断函数

void SysTick_Handler(void)

{

//具体函数实现由用户编写。

}

  通过对这样一个简单的操作,我们可以初步了解到的使用方法,其实开发人员没必要深究内部是如何处理实现的,只需要了解已经封装好的,进行调用即可,因此可以大大降低开发周期,提高开发效率,更多的功能留给读者自行研究开发。

c语言相关文章:c语言教程


尘埃粒子计数器相关文章:尘埃粒子计数器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭