STM32 RCC系统初始化失败 单片机跑不起来

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-16
STM32RCC初始化问题

我没有用过STM32的rcc,不过很多库都是这样的,RCC_APB2Periph_GPIOA等这种一般都是宏定义,是一个某一位为1的数字,RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB这样写可以将这两个数字做位或运算,在RCC_APB2PeriphClockCmd函数中应该就是要设置的寄存器对应的位,来开启特定的功能,不知道你的问题是这个意思么~

根据参考手册的说法,有这样的:
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操
作。执行以下操作将使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
因此在RTC初始化时要有这些代码:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
你的是这样?如果不是就需要加上。资料上说RTC的APB1接口没有工作时是不能初始化RTC的。

/* Flash 2 wait state */
//FLASH_SetLatency(FLASH_Latency_2);
/* Enable Prefetch Buffer */
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
不能被注释掉,这是在配置flash的等待周期,48 MHz < SYSCLK ≤ 72 MHz
时是需要有两个等待周期得,否则flash有可能进入写保护,详细请看St的STM32F10xxx Flash programming这个文档,其中FLASH_ACR寄存器的最低3位就是配置等待周期的,这是必须要配的
或者你直接调用Systeminit就不用自己配时钟了

/* Flash 2 wait state */
//FLASH_SetLatency(FLASH_Latency_2);
/* Enable Prefetch Buffer */
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

这处的 //FLASH_SetLatency(FLASH_Latency_2);
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
不能注释掉。我去掉注释试过了。一切正常。