stm32滴答计时器_STM32的系统滴答定时器(Systick)
1.systick時(shí)鐘來源
2.SysTick庫(kù)函數(shù)
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, (1VAL? ?= 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();
}
本網(wǎng)站轉(zhuǎn)載的所有的文章、圖片、音頻視頻文件等資料的版權(quán)歸版權(quán)所有人所有,本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如果本網(wǎng)所選內(nèi)容的文章作者及編輯認(rèn)為其作品不宜公開自由傳播,或不應(yīng)無償使用,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。
總結(jié)
以上是生活随笔為你收集整理的stm32滴答计时器_STM32的系统滴答定时器(Systick)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php按文章评论数排序,zblog获取分
- 下一篇: 二级c语言题型分数,计算机二级C语言题型