關於使用STM32 SPI3的一些總結
總結一下spi3的問題,因為spi3的nss口與JTAG有共用引腳,所以配置錯誤會導致SPI3無法使用。需要注意以下三點就可以了:
1.將PA15配置為普通IO口,GPIO_Mode_Out_PP
2.開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
3.關閉JTAG功能,使能SWD
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ;
其他的SPI口正常配置,因為板子重啟後預設為JTAG模式,雖然在除錯時使用了SWD,但PA15依然不是普通的IO口,當把它重新配置時,一定要開啟AFIO時鐘,如果不開啟的話,只有GPIO_PinRemapConfig(),會導致程式崩潰,在除錯的時候會亂跳,具體原因我也不知道。
以上配置是我除錯後的,肯定沒問題。注意千萬不要使用GPIO_Remap_SWJ_Disable ,因為這樣就不能下載程式了,要開鎖很麻煩的。
在使用stm32的時候, spi3和jtag口是有重合的, 如果要使用spi3 或者要把jtag口作為普通io口使用可參考如下配置:
1. 使用spi3介面, 參考 盧有亮 老師的教程 [BP19_網路PING實驗], 該套程式碼實現了該項功能
2. stm32的jtag口可以配置為SWD模式 這樣能空餘出來三個介面, 並且不影響程式的下載和除錯, 關於如何配置為SWD模式可以參考上一篇部落格.
將STM32的JTAG下載引腳:JTDO、JTDI、JTCK 配置普通IO口其實和配置為spi3 是一樣的 只不過spi3還要開spi的時鐘, 這裡更改為開io口時鐘即可, 其中最關鍵的兩條指令是:
1、打開復用時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,EANBLE);
2、呼叫重對映函式:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//關閉jtag , 開啟swd