STM32 HAL库怎么使用SPI的发送和接收函数?
请讲讲怎么使用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);
}
用HAL_SPI_TransmitReceive zoomdy 发表于 2017-4-23 11:50
用HAL_SPI_TransmitReceive
可以讲讲 怎么 使用吗 谢谢 本帖最后由 安 于 2017-4-24 09:40 编辑
如下代码是我读取ID,先发送后读取:
cmd = 0x9F;
if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
{
if(HAL_SPI_Receive(&hspi1,data,5,1000) == HAL_OK)
{
}
}
本帖最后由 chen_hang 于 2017-4-24 20:40 编辑
安 发表于 2017-4-24 09:39
如下代码是我读取ID,先发送后读取:
谢谢 你的 解答HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK 这句什么意思啊
楼主可以这样封装一下
//SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hSPI1,&TxData,&Rxdata,1, 1000);
return Rxdata; //返回收到的数据
}
其它函数再把这个函数封装一下就可以了,比如连续读或者写就是一个对这个函数调用及循环 //SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);
return Rxdata; //返回收到的数据
}
封装一下就可以了 先发送命令字,收到后,FLASH会有应答。 安 发表于 2017-4-25 09:41
先发送命令字,收到后,FLASH会有应答。
明白了 谢谢 问题解决没,楼主
页:
[1]
2