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

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

[复制链接]
oujisang 提问时间:2018-1-24 15:57 /
今天测试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[i],1,5);
}


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

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

示波器抓取的时钟和数据对应关系

示波器抓取的时钟和数据对应关系

评分

参与人数 1 ST金币 -2 收起 理由
zero99 -2 发错板块,下次请按发求助帖,警告一次.

查看全部评分

收藏 评论3 发布时间:2018-1-24 15:57

举报

3个回答
七哥 回答时间: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);
_________________________________________

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

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

科技人生 回答时间:2018-1-25 16:37:37
看代码你用的是hal库  ,数了一下你的每次通讯好像都有9个clk沿? 微信截图_20180125163624.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

oujisang 回答时间:2018-1-28 11:51:38
不知道什么原因,重新更新一下库问题就不复现了,操作都是一次片选操作16个字节,数据位始终是8位的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版