从软件SPI的功能上来说,MISO应该配置为输入模式才对,但为什么也可以配置为GPIO_Mode_AF_PP?实际上当一个GPIO端口配置为GPIO_Mode_AF_PP时,片上外设的复用功能输出信号会连接到输出控制电路,然后在端口上产生输出信号。但是在芯片内部,MISO是SPI模块的输入引脚,而不是输出引脚,也就是说“复用功能输出信号"根本不存在,所以"输出控制电路"就不能对外部产生输出信号,然而即使在复用推挽输出模式下,复用功能输入信号却与外部引脚之间相互连接,即MISO得到了外部信号的电平,实现了输入的功能。
具体使用的话,在中文参考手册里面有讲解在GPIO章节,里面有个外设的GPIO配置 小节
硬件SPI的话和它和GPIO就是独立的,内部硬件上也独立的模块, 重点:独立,他们只是共用了芯片的物理管脚
所以这种情况GPIO那部分怎么配置都没关系,但一般都会启用推挽,已给一个更可靠的确定状态
软件SPI是指手动控制IO拉高拉低的方式,按找SPI的时序收发数据
硬件SPI是指配置好SPI功能的各寄存器,并且对应的管脚(设置管脚的复用寄存器)连接到SPI模块,而不是连接到GPIO模块,这样收发数据时只需要读写对应的寄存器,时序由内部硬件部分自动完成
如果使用硬件SPI,对应的几个芯片管脚是和GPIO功能断开的
GPIO指一个功能模块,可以拉高拉低芯片管脚,也可以读取管脚的电平,但它并不是指芯片的脚,它只是一个功能