找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

SysTick

[复制链接]
跳转到指定楼层
楼主
arm_nuedu 发表于 2017-8-11 19:11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Systick函数
__STATIC_INLINE void CLK_SysTickDelay(uint32_t us)
{
    SysTick->LOAD = us * CyclesPerUs;
    SysTick->VAL  = (0x00);
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;

...
}
CyclesPerUs是定义的12M/1000 000。这一步是不是可以认定systick的时钟源为HXT?
但是
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;//不是设定为72M,HCLK吗????

我该怎么理解???

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
a_ziliu 发表于 2017-8-14 11:12:12 | 只看该作者
看hclk的source
void SystemCoreClockUpdate(void)
{
    uint32_t u32Freq, u32ClkSrc;
    uint32_t u32HclkDiv;

    u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLK_S_Msk;

    /* Update PLL Clock */
    PllClock = CLK_GetPLLClockFreq();

    if(u32ClkSrc != CLK_CLKSEL0_HCLK_S_PLL)
    {
        /* Use the clock sources directly */
        u32Freq = gau32ClkSrcTbl[u32ClkSrc];
    }
    else
    {
        /* Use PLL clock */
        u32Freq = PllClock;
    }

    u32HclkDiv = (CLK->CLKDIV & CLK_CLKDIV_HCLK_N_Msk) + 1;

    /* Update System Core Clock */
    SystemCoreClock = u32Freq / u32HclkDiv;

    CyclesPerUs = (SystemCoreClock + 500000) / 1000000;
}
回复 支持 反对

使用道具 举报

板凳
 楼主| arm_nuedu 发表于 2017-8-14 16:16:04 | 只看该作者
谢谢
回复

使用道具 举报

地板
 楼主| arm_nuedu 发表于 2017-8-14 16:27:25 | 只看该作者
我仔细看了这个函数,发现HCLK并不一直是72M,这是我一直以来的误区,谢谢。那如果设置为72M,从下面这个函数可以看出,HCLK选择的时钟源是PLLOUT,而PLLOUT选择有可能是HXT或者HIRC,是吧?
uint32_t CLK_SetCoreClock(uint32_t u32Hclk)
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU