關(guān)于STM32的SPI端口設(shè)置問題
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; // 復用的推挽輸出
恐怕大家對MISO端口的設(shè)置就會產(chǎn)生疑惑了,MISO不是應該設(shè)置成為輸入端口(GPIO_Mode_IN_FLOATING)才行的嗎?
答題是肯定的,對于STM32的這一類管腳來說(如USART_RX)即可以設(shè)置成為輸入模式,也可以設(shè)置成為復用的推挽輸出。其工作都是正常的,不過建議大家還是設(shè)置成為輸入端口的好,容易理解。
具體產(chǎn)生這一問題的原因是:從功能上來說,MISO應該配置為輸入模式才對,但為什么也可以配置為GPIO_Mode_AF_PP?請看下面的GPIO復用功能配置框圖。當一個GPIO端口配置為GPIO_Mode_AF_PP是,這個端口的內(nèi)部結(jié)構(gòu)框圖如下:圖中可以看到,片上外設(shè)的復用功能輸出信號會連接到輸出控制電路,然后在端口上產(chǎn)生輸出信號。但是在芯片內(nèi)部,MISO是SPI模塊的輸入引腳,而不是輸出引腳,也就是說圖中的"復用功能輸出信號"根本不存在,因此"輸出控制電路"不能對外產(chǎn)生輸出信號。而另一方面看,即使在GPIO_Mode_AF_PP模式下,復用功能輸入信號卻與外部引腳之間相互連接,既MISO得到了外部信號的電平,實現(xiàn)了輸入的功能。
評論