无法在stm32f030rc上将PC15用作GPIO输入

无法在stm32f030rc上将PC15用作GPIO输入,stm32,gpio,stm32f0,libopencm3,Stm32,Gpio,Stm32f0,Libopencm3,我正在使用stm32f030rc进行一个项目。我需要使用PC15作为GPIO输入,但似乎我无法 我知道PC14/PC15与LFE振荡器共用,但我当然不使用该功能。此外,我能够在PC14 GPIO上读取正确的引脚电平。在关于我的型号的datasheed中,PC15引脚标记为I/O,OSC32_输出作为附加功能:它可以用作输入吗 作为参考,这是我用来测试功能的C代码;我正在使用libopencm3进行初始化 #包括 #包括 静态无效时钟设置(无效) { rcc时钟设置输入输出48mhz(); /*启

我正在使用stm32f030rc进行一个项目。我需要使用PC15作为GPIO输入,但似乎我无法

我知道PC14/PC15与LFE振荡器共用,但我当然不使用该功能。此外,我能够在PC14 GPIO上读取正确的引脚电平。在关于我的型号的datasheed中,PC15引脚标记为I/O,OSC32_输出作为附加功能:它可以用作输入吗

作为参考,这是我用来测试功能的C代码;我正在使用libopencm3进行初始化

#包括
#包括
静态无效时钟设置(无效)
{
rcc时钟设置输入输出48mhz();
/*启用GPIOA、GPIOB、GPIOC时钟*/
rcc外围时钟启用(rcc GPIOA);
rcc外围时钟启用(rcc GPIOB);
rcc外围时钟启用(rcc GPIOC);
rcc外围时钟启用(rcc DBGMCU);
/*为GPIO端口B和C启用时钟*/
gpio_模式_设置(GPIOA、gpio_模式_输出、gpio_PUPD_无、GPIO5);
gpio_模式_设置(GPIOC、gpio_模式_输入、gpio_PUPD_无、GPIO15);
gpio_模式_设置(GPIOC、gpio_模式_输入、gpio_PUPD_无、GPIO14);
}
内部主(空)
{
无符号长i=0;
时钟设置();
/*每传输一个字节,板上的LED(PA8)就会闪烁*/
而(1)
{
gpio_开关(GPIOA,GPIO5);/*LED开/关*/
对于(i=0;i<400000;i++)/*请稍等*/
__asm_uuuuuuuuuuuuuuuuu(“nop”);
//永远不会输入此条件
如果(gpio_get(GPIOC,GPIO15)=0){
__asm_uuuuuuuuuuuuuuuuu(“nop”);
__asm_uuuuuuuuuuuuuuuuu(“nop”);
__asm_uuuuuuuuuuuuuuuuu(“nop”);
}
//这个有效
如果(gpio_get(GPIOC,GPIO14)=0){
__asm_uuuuuuuuuuuuuuuuu(“nop”);
__asm_uuuuuuuuuuuuuuuuu(“nop”);
__asm_uuuuuuuuuuuuuuuuu(“nop”);
}
}
返回0;
}

PC14和PC15具有相同的配置属性。当然,使用这些引脚作为输出(包括PC13)有一些限制,但只要不激活LSE功能,就可以将它们用作输入

PC14和PC15是通电后的GPIO输入,考虑到默认情况下LSE处于禁用状态,即使没有任何配置,您也应该能够直接使用它们

由于PC14没有任何问题,我怀疑有3个可能的原因:

1) 库提供的GPIO代码中存在错误。虽然不太可能,但很容易测试。您可以删除PC14和PC15的配置代码,因为默认情况下,它们是通电后的GPIO输入。这消除了gpio_mode_setup()函数中出现错误的可能性。要避免使用gpio_get()函数,可以使用以下代码:

if (GPIOC->IDR & (1 << 15) == 0)

如果(GPIOC->IDR&(1)最终问题是由于一个非常严重的硬件错误造成的。感谢您澄清PC15通常应可用作GPIO,但它也是一个振荡器引脚这一事实让我看错了方向。