【STM32】HAL库开发教程(七)—SPI使用
前言本系列本章针对STM32F207,基于STM32Cubemx和Keil进行程序开发,作者利用本系列文章对开发过程进行记录和总结。该系列文章仅供参考,欢迎互相学习交流。其中,本文主要介绍STM32_HAL库开发中RTC的使用。...
前言
不必害怕未知,无需恐惧犯错,做一个Creator!
本文主要介绍STM32_HAL库开发中SPI通信的使用。
一、开发步骤
1.STM32CubeMX配置
- 在左侧引脚配置处勾选SPI进行配置
- 在SPI模式处勾选“Full-Duplex”选择全双工模式
- 在SPI参数配置处进行参数配置:SPI时钟、SPI数据参数以及勾选”NVIC Settings”使能中断
2.SPI读写函数
uint8_t SPI1_ReadWriteByte(uint8_t TxData)//发送一个字节,并从寄存器返回一个字节
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hspi1, &TxData, &Rxdata, 1, 1000);
return Rxdata;
}
3.通信读功能函数
void SPI_Read(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
{
uint16_t i;
CS(0);
SPI1_ReadWriteByte((uint8_t)((ReadAddr) >> 16)); //·写入目标地址
SPI1_ReadWriteByte((uint8_t)((ReadAddr) >> 8));
SPI1_ReadWriteByte((uint8_t)ReadAddr);
for (i = 0; i < NumByteToRead; i++)
{
pBuffer[i]=SPI1_ReadWriteByte(0XFF); //循环读入字节数据
}
CS(1);
}
4.通信写功能函数
void SPI _Write (uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
{
uint16_t i;
CS(0);
SPI1_ReadWriteByte((uint8_t)((WriteAddr) >> 16)); //写入的目标地址
SPI1_ReadWriteByte((uint8_t)((WriteAddr) >> 8));
SPI1_ReadWriteByte((uint8_t)WriteAddr);
for (i = 0; i < NumByteToWrite; i++)
SPI1_ReadWriteByte(pBuffer[i]);//循环写入字节数据
CS(1);
}
二、主要函数接口
1.HAL库SPI传送接收函数
HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
HAL库封装的SPI读取接口函数。
参数:SPI号、目标数据地址、接收数据地址、数据长度、超时时间。
2.SPI读功能函数
void SPI_Read(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
从目标地址读取指定长度的数据
参数:数据地址、目标读取地址、读取数据长度。
3.SPI写功能函数
void SPI _Write (uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
往目标地址写入指定长度的数据
参数:数据地址、目标写入地址、写入数据长度
总结
本项目中SPI的使用主要可以归纳为:
1.SPI读写函数封装
2.调用 SPI_Read()功能函数读取目标地址数据。
3.调用SPI _Write()功能函数写入数据至目标地址
提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。
感谢你的阅读,期待你的关注收藏点赞!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)