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

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部