本帖最后由 汉云 于 2017-5-10 22:51 编辑
上一篇其实是LED
闪烁的例程,闪烁就要有延时或是定时 ,这里使用的是定时,使用的是SysTick
,即SysTick_Config
函数;
__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 */
}
SysTick_Config
函数是一个定义在头文件中的__STATIC_INLINE
修饰的函数。配置中断函数为SysTick_Handler();
关于__STATIC_INLINE
的含义可以摆渡一下吧,不再搬运。那么来看一下这个函数。SysTick->LOAD
是重载寄存器,但是在数据手册中,它的名字是SYST_RVR,其值为SystemCoreClock / TICKRATE_HZ, SystemCoreClock就是前面的的函数赋值的内核频率,后面的值为10,即100ms 其他相关寄存器,请注意这个寄存器的基地址与地址偏移。
从工程的头文件来看,其寄存器都是使用宏定义的方式,定义了其基地址。
SysTick->CTRL 即是SYST_CSR寄存器。通过SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;后,寄存器的低三位全部设置为1,即,寄存器的值为0x0007。通过下面寄存器的说明,分别是使能了SysTick、使能了SysTick中断,配置了时钟。
本帖最后由 汉云 于 2017-5-10 22:51 编辑
上一篇其实是LED
闪烁的例程,闪烁就要有延时或是定时 ,这里使用的是定时,使用的是SysTick
,即SysTick_Config
函数;
__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 */
}
SysTick_Config
函数是一个定义在头文件中的__STATIC_INLINE
修饰的函数。配置中断函数为SysTick_Handler();
关于__STATIC_INLINE
的含义可以摆渡一下吧,不再搬运。那么来看一下这个函数。SysTick->LOAD
是重载寄存器,但是在数据手册中,它的名字是SYST_RVR,其值为SystemCoreClock / TICKRATE_HZ, SystemCoreClock就是前面的的函数赋值的内核频率,后面的值为10,即100ms 其他相关寄存器,请注意这个寄存器的基地址与地址偏移。
从工程的头文件来看,其寄存器都是使用宏定义的方式,定义了其基地址。
SysTick->CTRL 即是SYST_CSR寄存器。通过SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;后,寄存器的低三位全部设置为1,即,寄存器的值为0x0007。通过下面寄存器的说明,分别是使能了SysTick、使能了SysTick中断,配置了时钟。