PF0、PF1与包含了时钟晶振复用功能,所以无法直接使用GPIO功能。
解决办法:添加 RCC->CR &= ~((uint32_t)RCC_CR_HSEON);
这条程序代码是针对 STM32 系列微控制器中的时钟控制寄存器(RCC_CR)进行操作的。在该代码中,执行了位操作和位掩码操作,用于将指定的位清零。
- RCC:是 STM32 系列微控制器中的外设时钟控制寄存器(Reset and Clock Control Register)。
- CR:是 RCC 寄存器中的一个位域,用于控制系统的各种时钟源和时钟选项。
- RCC_CR_HSEON:是 RCC_CR 寄存器定义中的一个位,表示高速外部时钟使能位。
现在让我们逐个了解这条代码的执行步骤:
- 将
RCC_CR_HSEON
转换为一个无符号 32 位整数,确保其位值正确。 - ~((uint32_t)RCC_CR_HSEON):使用位求反运算符(~) 对
RCC_CR_HSEON
的位进行反转,即将它的 1 位变为 0,0 位变为 1,得到了一个位屏蔽值(bit mask),用于屏蔽 RCC_CR 寄存器的对应位。 &=
:使用按位与赋值操作符,将 RCC_CR 寄存器与反转位屏蔽值执行按位与操作,清除 RCC_CR 寄存器中对应位的值为 0,而保留其他位的值不变。- 最后,将按位与结果的值重新存储回 RCC_CR 寄存器,实现了将 RCC_CR 寄存器的 HSEON 位清零的操作。
这条代码的目的是关闭 STM32 微控制器中的高速外部时钟(High Speed External clock),即将 HSEON 位清零。这样做是为了停用外部时钟源(如晶体振荡器),并切换到其他系统时钟源。具体切换系统时钟的方式和步骤可能需要根据具体的系统要求进行进一步的配置。
需要注意的是,在修改 RCC_CR 或其他系统寄存器之前,你应该先对其域进行相应的配置和初始化,确保所做的更改不会导