oujisang 发表于 2018-1-24 15:57:34

STM32F4 SPI 一次片选 多次读取SPI数据 时钟问题

今天测试SPI读数据,整个数据长度为16字节,读取的数据头是0x55 0xAA 时钟极性为高电平,第二个边沿上升沿采集数据,数据位为8位,在进行16个字节读取时采用一次片选,循环16次读取16个字节发现读取的数据为0x55 0x5D,在示波器上查看时钟和数据对应关系,发现在第1个字节读取和第2个字节读取间隔时间,多了半个时钟周期,加上等待间隔的时间,正好多了一个时钟周期,设备认为是有效的时钟就把数据送出来了,导致主设备在读取第2个字节时候时钟和数据对应错位。应该在第8个时钟位置应该变成高电平,反而又进行了一次拉低操作,然后变高电平这个高电平是两个字节操作的间隔。

//这种操作数据就会出错
for(uint32_t i=0; i<16; i++)
{
    HAL_SPI_Receive(&hspi2,&rx_data,1,5);
}


//这种操作数据就不会出错
HAL_SPI_Receive(&hspi2,rx_data,sizeof(rx_data),5);

有没有人遇到过类是的问题!!!

toofree 发表于 2018-1-24 16:06:33

本帖最后由 toofree 于 2018-1-24 16:15 编辑

这两个完全不是一回事呀
________________________________________
//这种操作数据就会出错
for(uint32_t i=0; i<16; i++)
{
    HAL_SPI_Receive(&hspi2,&rx_data,1,5);
}


//这种操作数据就不会出错
HAL_SPI_Receive(&hspi2,rx_data,sizeof(rx_data),5);
_________________________________________

第一种情况是多次片选,第二种是一次片选。

o科技人生o 发表于 2018-1-25 16:37:37

看代码你用的是hal库,数了一下你的每次通讯好像都有9个clk沿?

oujisang 发表于 2018-1-28 11:51:38

不知道什么原因,重新更新一下库问题就不复现了,操作都是一次片选操作16个字节,数据位始终是8位的
页: [1]
查看完整版本: STM32F4 SPI 一次片选 多次读取SPI数据 时钟问题