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
}
|