打印
[N32WBxxx]

N32WB031待机唤醒后APB1时钟分频变了

[复制链接]
721|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lidai0407|  楼主 | 2024-1-19 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N32WB031的APB1最高频率限制为32MHz,所以初始化的时候在SystemInit里面设置为了32MHz,系统时钟为64MHz,对应的RCC->CFG寄存器内容为0x00010400。一旦MCU进入SLEEP再次唤醒后,RCC->CFG寄存器内容就变为0x00010000,对应APB1时钟频率为64MHz,超过了32MHz的限制,实际测试APB1也是64MHz。这个现象是否正常,文档上未做解释

以下是SystemInit里面的一段内容

if(SYSCLK_FREQ == 64000000)
{           
            RCC->CTRL &= ~0x8000;// Set HSI as 64M
            /* Configures LSI trim */
            tmp = RCC->CTRL & ~(0x7F << 8);   // TRIM 8-14 bit
            RCC->CTRL = tmp|(trim_stored.stote_rc64m_trim_value << 8);// clear and set TRIM value

            RCC->CFG |= RCC_CFG_HSISRC_DIV1; // USE HSI as system clock

            RCC->CFG &= ~RCC_CFG_APB1PRES;
            RCC->CFG |=  RCC_HCLK_DIV2; //APB1 = HCLK/2, APB1 max is 32M
}

使用特权

评论回复
沙发
lidai0407|  楼主 | 2024-1-19 12:16 | 只看该作者
再补充一个信息,如果待机唤醒后再重新设置APB1时钟二分频,很多外设将无法工作,需要重新对外设初始化才可以使用。当MCU未发生过待机行为,则可以随意配置,再改回来,不会造成一些外设不可用

案例是低功耗串口和RTC,如果待机唤醒后重新配置了这个二分频,则这两个外设都无功能,如果唤醒后不重新配置这个二分频,外设均能工作,只是串口时钟频率高了一倍,波特率高了一倍。如果MCU重来未进入过待机,使用软件将二分频改为4分频或不分频,再改回来,串口功能仍然正常

怀疑MCU待机时,芯片设计上有一些硬件寄存器或硬件状态机的设计有问题
另外待机唤醒后,IWDT独立看门狗无功能,需要重新初始化看门狗

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝