標準庫和hal庫區(qū)別還是相當大的,舉個簡單的例子,驅動SPI OLD
標注庫初始化SPI
再看HAL庫SPI
除了 基本的io口配置區(qū)別,其他主要的讀寫函數(shù)不用動的,就改一個寫字節(jié)函數(shù),對于oled12864屏,不用讀
用這一個函數(shù)HAL_SPI_Transmit(&hspi1,&TxData,1,1000)就ok了
/* SPI寫入一個字節(jié) */
void SPI_WByte(uint8_t TxData)
{
// /* 通過外設SPIx發(fā)送一個數(shù)據(jù) */
// SPI_I2S_SendData(OLED_SPI, TxData);
// /* 檢查指定的SPI標志位設置與否:發(fā)送緩存空標志位*/
// while (SPI_I2S_GetFlagStatus(OLED_SPI, SPI_I2S_FLAG_TXE) == RESET);
HAL_SPI_Transmit(&hspi1,&TxData,1,1000);
}
我們再看CubeMX配置SPI,模式為Full-Duplex Master,即全雙工主機模式;
接下來是選擇NSS 的模式,NSS模式共有三種:NSS_Soft、Hardware Input和Hardware Output
NSS_Soft —— 即軟件控制CS片選信號拉高或者拉低,選擇該模式時,如果需要輸出CS,要配置選擇的引腳為輸出模式,如我這里將PA4引腳做CS信號輸出腳,則應該在CubeMX中配置其為GPIO_Output模式,之后在程序中通過設置引腳SET或RESET進行拉高或者拉低。
Hardware Output —— 即硬件輸出模式,選擇該模式時,硬件SPI要發(fā)送數(shù)據(jù)時會自動將片選信號拉低并且通過PA4引腳輸出,主要用于一主一從的SPI通信控制
Hardware Input —— 即硬件輸入模式,該模式只有在設備作為從機通信時可選擇,輸入的片選信號控制設備的通信與否 這里選擇NSS_Soft(后面解釋為什么不能選Hardware Output模式)
對于SPI讀寫控制中,最好設置為NSS_Soft模式,不要用硬件輸出模式,然后每次軟件控制NSS拉低再拉高,從而實現(xiàn)指令的成功發(fā)送。
對于GPIO這塊