为什么STM32中SPI的MISO引脚设置成复用推挽输出
发布网友
发布时间:2022-05-16 16:04
我来回答
共2个回答
热心网友
时间:2023-10-29 22:51
我在实际使用时用示波器看到的是mosi和miso脚的电平会保持本次通信结束后的最后一个位的状态,而且不通信时不变化。
你是想要mosi和miso引脚空闲时置高吗?这个好像不能通过spi配置来达到,只能配置端口:
1,在通信开始前配置为复用输出。
2,在通信结束后配置位推完输出并置高。
热心网友
时间:2023-10-29 22:52
读取其他ARM芯片(如NXP)一般很容易看出芯片的设置是否正确。不过对于STM32就容易让人迷惑了。例如,我们在使用SPI总线进行通信时,可以这样设置:
GPIO_InitStructure.GPIO_Pin
=
GPIO_Pin_4
|
GPIO_Pin_5
|
GPIO_Pin_6
|
GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed
=
GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_AF_PP;
//
复用的推挽输出
答题是肯定的,对于STM32的这一类管脚来说(如USART_RX)即可以设置成为输入模式,也可以设置成为复用的推挽输出。其工作都是正常的,不过建议大家还是设置成为输入端口的好,容易理解。
具体产生这一问题的原因是:从功能上来说,MISO应该配置为输入模式才对,但为什么也可以配置为GPIO_Mode_AF_PP?请看下面的GPIO复用功能配置框图。当一个GPIO端口配置为GPIO_Mode_AF_PP是,这个端口的内部结构框图如下:图中可以看到,片上外设的复用功能输出信号会连接到输出控制电路,然后在端口上产生输出信号。但是在芯片内部,MISO是SPI模块的输入引脚,而不是输出引脚,也就是说图中的"复用功能输出信号"根本不存在,因此"输出控制电路"不能对外产生输出信号。