打印
[技术问答]

请问nuc120BSP当中clk.c文件的问题

[复制链接]
902|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengkewei|  楼主 | 2017-9-7 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个函数的最后一行代码
void CLK_SetHCLK(uint32_t u32ClkSrc, uint32_t u32ClkDiv)
{
    uint32_t u32HIRCSTB;

    /* Read HIRC clock source stable flag */
    u32HIRCSTB = CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk;

    /* Switch to HIRC for Safe. Avoid HCLK too high when applying new divider. */
    CLK->PWRCON |= CLK_PWRCON_OSC22M_EN_Msk;
    while((CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk) == 0);
    CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | CLK_CLKSEL0_HCLK_S_HIRC;

    /* Apply new Divider */
    CLK->CLKDIV = (CLK->CLKDIV & (~CLK_CLKDIV_HCLK_N_Msk)) | u32ClkDiv;

    /* Switch to new HCLK source */
    CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | u32ClkSrc;

    /* Update System Core Clock */
    SystemCoreClockUpdate();

    /* Disable HIRC if HIRC is disabled before switching HCLK source */
    if(u32HIRCSTB == 0)
        CLK->PWRCON &= ~CLK_CLKSTATUS_OSC22M_STB_Msk;
}
PWRCON 寄存器里面没有CLK_CLKSTATUS_OSC22M_STB_Msk定义,对应的位是PD_WU_DLY,是"使能唤醒延时计数器"功能.这样写有什么用意?
BSP当中有PD_WU_DLY位的定义,如下:
#define CLK_PWRCON_PD_WU_DLY_Pos             4                                    /*!< CLK_T::PWRCON: PD_WU_DLY Position */
#define CLK_PWRCON_PD_WU_DLY_Msk             (1ul << CLK_PWRCON_PD_WU_DLY_Pos)    /*!< CLK_T::PWRCON: PD_WU_DLY Mask */
我查了nano130的BSP,这个函数的最后一行代码也是这样写的,都是使用别的寄存器位的定义.
沙发
捉虫天师| | 2017-9-7 20:28 | 只看该作者
不要深究库函数啊,stm32的库函数更变态

使用特权

评论回复
板凳
pengkewei|  楼主 | 2017-9-7 21:00 | 只看该作者
捉虫天师 发表于 2017-9-7 20:28
不要深究库函数啊,stm32的库函数更变态

新版的bsp里面的释放程序,编译成功,就是片子不工作.现在串口都打不开,
没办法呢.只好从开始读bsp,

使用特权

评论回复
地板
huahuagg| | 2017-9-8 21:50 | 只看该作者
官方例子也跑不起来?

使用特权

评论回复
5
天灵灵地灵灵| | 2017-9-13 23:07 | 只看该作者
能用就好,不要纠结。

使用特权

评论回复
6
mintspring| | 2017-9-16 08:21 | 只看该作者
只要执行结果没错就行了。因为这都是宏,后台还是数字

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

46

帖子

1

粉丝