问题背景
客户期望把外部HXT晶振输入脚OSCIN/OSCOUT配置为普通IO PA1 PA2使用,但实测发现无法生效。示波器检测PA1 PA2波形,发现电平持续为2V左右的高电平,猜测是受到(HXT_EN)HSE_EN的置位影响。
实测
- 调用RCM_DisableHXT()或者在SystemInit()里清除RCM->ECC寄存器值都没效果。
- 表现为——上电后HXTEN就已经置1。
- 擦除用户APP Flash程序后,PA1 PA2还是维持2V高电平,且此时demo板的外部HXT 16MHz晶振已经拆除。
解决方案:
- 了解发现,F003芯片,受出厂配置选项字的影响,一般默认HXTEN置位开启
- 如需要关闭HXTEN,需要单独清除选项字,然后进行复位操作——推荐在程序最开始的初始化先执行这段代码
if(RCM->ECC_B.HXTEN == BIT_SET){//先判断HXEEN的置位与否,再选择执行擦除选项字的操作
FMC_Unlock();
if(((*(uint32_t*) 0x20400 >> 19) & 0x01 )==1){
FMC_EraseOptionByte();
FMC_ProgramOptionByte(0x20402, 0xF7);
}
FMC_Lock();
NVIC_SystemReset();//操作完选项字后,进行系统软件复位
}
|