标准库和hal库区别还是相当大的,举个简单的例子,驱动SPI OLD
标注库初始化SPI
再看HAL库SPI
除了 基本的io口配置区别,其他主要的读写函数不用动的,就改一个写字节函数,对于oled12864屏,不用读
用这一个函数HAL_SPI_Transmit(&hspi1,&TxData,1,1000)就ok了
/* SPI写入一个字节 */
void SPI_WByte(uint8_t TxData)
{
// /* 通过外设SPIx发送一个数据 */
// SPI_I2S_SendData(OLED_SPI, TxData);
// /* 检查指定的SPI标志位设置与否:发送缓存空标志位*/
// 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要发送数据时会自动将片选信号拉低并且通过PA4引脚输出,主要用于一主一从的SPI通信控制
Hardware Input —— 即硬件输入模式,该模式只有在设备作为从机通信时可选择,输入的片选信号控制设备的通信与否 这里选择NSS_Soft(后面解释为什么不能选Hardware Output模式)
对于SPI读写控制中,最好设置为NSS_Soft模式,不要用硬件输出模式,然后每次软件控制NSS拉低再拉高,从而实现指令的成功发送。
对于GPIO这块