目录
一、GD32F130Fx官方手册
GD32F130Fx只有20个引脚可以拿出来用,如果你的PA0-PA7已经当做ADC采集的八个通道,PB1作为开关的控制器,PA9PA10作为串口的收发,如果还想有其他的剩余IO口当做普通的输入IO的话,只能从PF0和PF1下手
二、问题所在
在GD32F130的数据手册中,OSC_IN和OSC_OUT在默认的状态下就是PF0和PF1,所以第一次在程序中仅仅初始化了PF0和PF1这两个GPIO,没有做任何的复用,如下图代码:(有两个版本的库,一个是GD32官方的库,一个是类似于STM32的库)
(GD32官方库:)
(类STM32库:)
但是通过试验得知,只初始化PF0和PF1的两个端口远远不够;
给GD32F130芯片通上电之后,F0和F1引脚始终输出1.5V左右的电压(可能是外部电路的电路分压)
三、分析原因
在单片机使用的过程中,如果使用的是内振的话,PF0和PF1默认是IO口的;如果使用外振的话,那就是这个晶振脚OSC_IN和OSC_OUT。
四、解决办法
如果你使用的是类STM32的库,则直接在主函数或者时钟初始化函数里面加一句
RCC->GCCR &= ~((uint32_t)RCC_GCCR_HSEEN);即可;
即可完成对PF0和PF1的普通IO口的复用。
若你使用的是GD32官方的库,我搜了一下,没有此寄存器的重定义,但是自己可以耍个小聪明,在类STM32找到对应的寄存器的地址,对其进行重定义(或者直接使用官方重定义的名称;PS:使用官方重定义的名称我没认真的试)