如何解决STM32F407 SPI读取错误数据翻译Arduino SPI
我正在使用 STM32F407,只想翻译 Arduino SPI.transfer() 函数。
我想在从 IC 发送 4 个字节后接收 8 个字节。根据我的理解,传输是正确的,但我使用的 HAL_SPI_TransmitReceive 函数不会导致缓冲区在错误的时间或错误的数据读取数据。
在这里你可以看到我的传输: Logic Analyzer
接收从逻辑分析仪读取的字节: 0xc6、0x52、0x17、0xA4、0x00、0x30、0x04、0x8E
这里是我的控制台日志的字节数: 0xc2、0x00、0x03、0x80、0x00、0x10、0x00、0x86
我不知道为什么读数不一样。
这些是我的写入/接收功能:
void spi_write(uint8_t data) // Byte to be written to SPI port
{
HAL_SPI_Transmit(&hspi1,&data,1,1);
}
int8_t spi_read(uint8_t data) //!The data byte to be written
{
uint8_t spi_buf;
if(HAL_SPI_TransmitReceive(&hspi1,&spi_buf,10)){
SPI_Error_Handler();
}
return spi_buf;
}
void spi_write_read(uint8_t tx_Data[],//array of data to be written on SPI port
uint8_t tx_len,//length of the tx data arry
uint8_t *rx_data,//Input: array that will store the data read by the SPI port
uint8_t rx_len //Option: number of bytes to be read from the SPI port
)
{
for (uint8_t i = 0; i < tx_len; i++)
{
spi_write(tx_Data[i]);
}
for (uint8_t i = 0; i < rx_len; i++)
{
rx_data[i] = spi_read(0xFF);
}
}
在 Arduino 板上,通过使用 SPI.transfer 而不是我的 spi_write/read,代码运行良好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。