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: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);
_________________________________________
第一种情况是多次片选,第二种是一次片选。
看代码你用的是hal库,数了一下你的每次通讯好像都有9个clk沿?
不知道什么原因,重新更新一下库问题就不复现了,操作都是一次片选操作16个字节,数据位始终是8位的
页:
[1]