你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 HAL库怎么使用SPI的发送和接收函数?

[复制链接]
chen_hang 提问时间:2017-4-22 21:38 /
请讲讲怎么使用HAL_SPI_Transmit()​;HAL_SPI_Receive();HAL_SPI_TransmitReceive()​;发送和接收一个Byte吗?​
用的CUBEMX生成的SPI3的配置
void MX_SPI3_Init(void)
{

  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    Error_Handler();
  }

}

我下面这样写对吗?

void SPI_WriteByte(uint8_t TxData)
{         
    HAL_SPI_Transmit(&hspi3,&TxData,1,0xffff);
}
uint8_t SPI_ReadByte(uint8_t RxData)
{         
    HAL_SPI_Receive(&hspi3,RxData, 1, 0xffff);
}

收藏 1 评论10 发布时间:2017-4-22 21:38

举报

10个回答
zoomdy 回答时间:2017-4-23 11:50:41
用HAL_SPI_TransmitReceive
chen_hang 回答时间:2017-4-24 09:02:38
zoomdy 发表于 2017-4-23 11:50
用HAL_SPI_TransmitReceive

可以讲讲 怎么 使用吗 谢谢
回答时间:2017-4-24 09:39:04
本帖最后由 安 于 2017-4-24 09:40 编辑

如下代码是我读取ID,先发送后读取:
  1. cmd[0] = 0x9F;
  2.         if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
  3.         {
  4.                 if(HAL_SPI_Receive(&hspi1,data,5,1000) == HAL_OK)
  5.                 {                               
  6.                 }               
  7.         }
复制代码


chen_hang 回答时间:2017-4-24 20:39:42
本帖最后由 chen_hang 于 2017-4-24 20:40 编辑
安 发表于 2017-4-24 09:39
如下代码是我读取ID,先发送后读取:

谢谢 你的 解答HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK 这句什么意思啊
15616384352 回答时间:2017-4-25 08:31:18
楼主可以这样封装一下

//SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
  uint8_t Rxdata;
  HAL_SPI_TransmitReceive(&hSPI1,&TxData,&Rxdata,1, 1000);      
  return Rxdata;                              //返回收到的数据               
}
其它函数再把这个函数封装一下就可以了,比如连续读或者写就是一个对这个函数调用及循环
15616384352 回答时间:2017-4-25 08:32:14
//SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
  uint8_t Rxdata;
  HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);      
        return Rxdata;                              //返回收到的数据               
}
封装一下就可以了
回答时间:2017-4-25 09:41:51
先发送命令字,收到后,FLASH会有应答。
chen_hang 回答时间:2017-4-25 12:35:54
安 发表于 2017-4-25 09:41
先发送命令字,收到后,FLASH会有应答。

明白了 谢谢
夜月孤狼 回答时间:2017-11-24 18:16:13
问题解决没,楼主
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版