这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » N32WB031待机唤醒后APB1时钟分频变了

共3条 1/1 1 跳转至

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

院士
2024-01-20 23:10:39     打赏

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
}

再补充一个信息,如果待机唤醒后再重新设置APB1时钟二分频,很多外设将无法工作,需要重新对外设初始化才可以使用。当MCU未发生过待机行为,则可以随意配置,再改回来,不会造成一些外设不可用

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

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




关键词: N32WB031     待机     唤醒    

院士
2024-08-06 15:21:11     打赏
2楼

学习了,谢谢分享。


专家
2024-09-23 23:26:32     打赏
3楼

应该是唤醒机制有问题吧?当成复位处理,没有保持住寄存器的数据?这种情况下,进入睡眠模式之前自己先保存关键寄存器的数据,解除睡眠模式后再回复?感觉硬件设计以后,也得像软件一样。要做很惊喜的测试才行。哈哈哈,都是特别累的活。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]