• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

stm32标准库SPI移植到HAL库

标准库和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这块

CubeMX上开启io并标相关功能的签标好

全部回复(2)
正序查看
倒序查看
2022-01-23 12:49

来抢占一波沙发吧,记得上次学习STM32还是大二的时候了,都四五年之前的事了,不过这个东西非常重要,学好软硬件,走遍天下都不怕,哈哈哈

0
回复
2022-01-24 13:40

你这个不是讲标准库移植到HAL库,感觉就是将CUBE-MX的SPI基本配置,而且还没有讲全,个人观点哈!

0
回复