历史上的今天
今天是:2024年12月24日(星期二)
2018年12月24日 | STM32的系统滴答定时器(Systick)
2018-12-24 来源:eefocus
1.systick时钟来源

2.SysTick库函数

3.源码
/**
*@}
*/
/** @defgroup SysTick_clock_source
*@{
*/
#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
((SOURCE) == SysTick_CLKSource_HCLK_Div8))
/**
*@brief Configures the SysTick clocksource.
*@param SysTick_CLKSource: specifies theSysTick clock source.
* This parameter can be one ofthe following values:
* @argSysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clocksource.
* @arg SysTick_CLKSource_HCLK:AHB clock selected as SysTick clock source.
*@retval None
*/
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
/* Check the parameters */
assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
{
SysTick->CTRL |= SysTick_CLKSource_HCLK;
}
else
{
SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
}
}
/*################################## SysTick function ############################################ */
#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0)
/**
*@brief Initialize and start the SysTickcounter and its interrupt.
*
*@param ticks number of ticks between two interrupts
*@return 1 = failed, 0 = successful
*
*Initialise the system tick timer and its interrupt and start the
*system tick timer / counter in free running mode to generate
*periodical interrupts.
*/
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority forCortex-M0 System Interrupts */
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 */
}
#endif
#ifdefSYSCLK_FREQ_HSE
uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*! #elif defined SYSCLK_FREQ_24MHz uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ #elif defined SYSCLK_FREQ_36MHz uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*! #elif defined SYSCLK_FREQ_48MHz uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*! #elif defined SYSCLK_FREQ_56MHz uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*! #elif defined SYSCLK_FREQ_72MHz uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*! #else /*!< HSI Selected as System Clock source */ uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ #endif /////////////////////////////// /* Configure the SysTick */ SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);//8000000/1000=>1ms /** *This is the timer interrupt service routine. * */ void SysTick_Handler(void) { /* enter interrupt */ rt_interrupt_enter(); rt_tick_increase(); /* leave interrupt */ rt_interrupt_leave(); }
史海拾趣
|
小弟现在在启动系统的时候出现shell不能正常运行的情况,感觉是没有shell fdIn = ioGlobalStdGet (STD_IN); fdOut = ioGlobalStdGet (STD_OUT); fdErr = ioGlobalStdGet (STD_ERR); #endif /* SHEL ...… 查看全部问答> |
|
小弟最近调试GPS模块,通过单片机串口已经能够接收GPS模块发来的信息了,但是在接收$GPMRC消息的时候,总是有时间信息,后面的定位信息总是V,看手册说V是无法定位,只有A后面才是有效数据,但是总是收不到A,为什么还能收到时间呢?… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 3D智能控制技术,小身材大容量的秘密 过去,人们不得不在洗衣机占位和洗衣效率之间做出选择,要么牺牲精致装修的效果,选择庞然大物;要么牺牲洗衣效率,忍受多次洗衣的繁琐。现在,为了调 ...… 查看全部问答> |
|
这个从PCB到程序都是本楼主一人完成,现晒晒原理哈,这个老好了,重来就不误报呵呵 这个报警器可不是一般的报警器它可控制电磁阀。直接就关了煤气,等人回来后再把电磁阀拨出来。又重新使用,这个可以挂在家里煤气的 ...… 查看全部问答> |
|
AVR单片机矩阵键盘控制电机,PE口接键盘,pc口接电机,电机正转是0x28,我不知道哪里有问题,求帮忙#include <iom128v.h> #define uchar unsigned char #define uint unsigned int uchar tab[]={0x28,0x28,0x28,0x28}; void delay(uint k) ...… 查看全部问答> |




