现象:
STM32F030C8中PC13引脚异常,配置为GPIO输出,有时编译后出现异常,表现如下:
1、不能输出高电平。
2、烧回原来正确的版本固件,也不能输出高电。
3、过一段时间后,能恢复。
4、同样的代码,改变一下编译优化等级,有可能正常。也有可能不正常。
5、同样的代码,交换一下代码顺序,有可能正常。也有可能不正常。
6、同样的代码,添加或屏蔽一段代码,有可能正常。也有可能不正常。
分析:
1、PC13引脚与RTC功能复用,有可能是因此引起:
PC13引脚可用配置选项如下:
2、在线调试发现,异常时,RTC_TS input enabled位会被置1。
3、查询代码发现 进行RTC初始化时,屏蔽了一段代码:
4、查询RTC_Init(),发现RTC-CR未进行明确初始化,且采用“|=”进行赋值,
RTC_InitStruct->RTC_HourFormat由于前面实参被屏蔽,实参值为局部变量的值,而局部变量由于前面被屏蔽,未进行明确初始化,其值处于未定状态。此可能导致RTC_TS input enabled位会被置1。
解决办法:
打开被屏蔽语句,进行明确初始化。
总结:
对于未明确初始化的局部变量,一定要慎重处理。