N32WB452LEQ6芯片系统应用小技巧之复位原因、系统时钟获取

嵌入式系统中时钟系统的设置及分析甚是重要,定时器时基、通信波特率、外设时钟、GPIO时钟,都需要清楚的知道具体的时钟频率,才能方便的设计各个功能模块驱动程序。有时项目比较紧,仔细查看芯片数据手册,详细分析系统时钟费时费力。所以实时显示系统时钟频率,就显得有点作用(同系列芯片操作类似,STM32也有类似操作),另外芯片程序重启原因,有时候对系统程序分析也绅士有用,也一并附在后面,嵌入式产品程序设计可以在需要的地方直接调用以下两个函数即可。

void displayRcc(void)

{

    RCC_ClocksType Clks;

    RCC_GetClocksFreqValue(&Clks);

    printf("SYSCLK: %d\n", Clks.SysclkFreq);

    printf("HCLK  : %d\n", Clks.HclkFreq);

    printf("PCLK1 : %d\n", Clks.Pclk1Freq);

    printf("PCLK2 : %d\n", Clks.Pclk2Freq);

    printf("ADCPL : %d\n", Clks.AdcPllClkFreq);

    printf("ADCHL : %d\n", Clks.AdcHclkFreq);

}

void resetReason(void) //获取重启原因

{

    // #define RCC_FLAG_RAMRST  ((uint8_t)0x77) //

    // #define RCC_FLAG_MMURST  ((uint8_t)0x79)  //MMU保护复位

    // #define RCC_FLAG_PINRST  ((uint8_t)0x7A)  //引脚复位

    // #define RCC_FLAG_PORRST  ((uint8_t)0x7B)  //上电复位

    // #define RCC_FLAG_SFTRST  ((uint8_t)0x7C)  //软件复位

    // #define RCC_FLAG_IWDGRST ((uint8_t)0x7D)  //独立看门狗服务

    // #define RCC_FLAG_WWDGRST ((uint8_t)0x7E)  //窗口看门狗服务

    // #define RCC_FLAG_LPWRRST ((uint8_t)0x7F)  //低电压复位

    if(RCC_GetFlagStatus(RCC_FLAG_RAMRST) != RESET)

    {

        printf("RESET:RAMRST.\r\n");  //

        Device.resetRs = RCC_FLAG_RAMRST;

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_MMURST) != RESET)

    {

        printf("RESET:MMURST.\r\n");  //    

        Device.resetRs = RCC_FLAG_MMURST;

    }  

    else if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)

    {

        printf("RESET:PORRST.\r\n");  //    

        Device.resetRs = RCC_FLAG_PORRST;

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) != RESET)

    {

        printf("RESET:SFTRST.\r\n");  //

        Device.resetRs = RCC_FLAG_SFTRST;  

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)

    {

        printf("RESET:IWDGRST.\r\n");  //

        Device.resetRs = RCC_FLAG_IWDGRST;  

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET)

    {

        printf("RESET:WWDGRST.\r\n");  //  

        Device.resetRs = RCC_FLAG_WWDGRST;

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) != RESET)

    {

        printf("RESET:LPWRRST.\r\n");  //  

        Device.resetRs = RCC_FLAG_LPWRRST;

    }

    else if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)

    {

        printf("RESET:PINRST.\r\n");  //    

        Device.resetRs = RCC_FLAG_PINRST;

    }  

    else

    {

        printf("RESET:NO reset.\r\n");  //  

        // Device.resetRs = 0;

    }

    RCC_ClrFlag();

}

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevinpan2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值