发新帖我要提问
12
返回列表
打印
[STM32L0]

数据不对

[复制链接]
楼主: huangchui
手机看帖
扫描二维码
随时随地手机跟帖
21
huangchui|  楼主 | 2021-8-14 22:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
没正常,我吧hal库里的函数重写了才好,但是还是不知道原因。

使用特权

评论回复
22
jiajs| | 2021-8-14 22:10 | 只看该作者
你是 先发 HAL_SPI_Receive(&hspi1,&temp1[0],1,1000);+HAL_SPI_Receive(&hspi1,&temp1[0],1,1000);是两个时种  还是 只发 HAL_SPI_Receive(&hspi1,&temp1[0],1,1000);就会出现两个时钟

使用特权

评论回复
23
huangchui|  楼主 | 2021-8-14 22:18 | 只看该作者
只用一次就是两个时钟,所以才奇怪。用两次就是3个时钟。比想要的多一个

使用特权

评论回复
24
songqian17| | 2021-8-14 22:22 | 只看该作者
兄弟,我用L4也碰到这个问题了,bug吧

使用特权

评论回复
25
yinxiangh| | 2021-8-14 22:24 | 只看该作者
一般来说多发时钟脉冲是不影响接收数据的,本身接收函数中有接收数据个数判断。

使用特权

评论回复
26
jiajs| | 2021-8-14 22:29 | 只看该作者
如果修改函数库要慎重,不推荐这种方式。

使用特权

评论回复
27
huangchui|  楼主 | 2021-8-14 22:34 | 只看该作者

使用特权

评论回复
28
huangchui|  楼主 | 2021-8-14 22:38 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
29
呐咯密密| | 2021-8-16 09:46 | 只看该作者
给楼主一个考虑的方向,SPI是个全双工的接口,如果要接收数据必须先要发送数据吧,你在接收时多了一个CLOCK,有没有想过发送的时候多了一个CLOCK,关于SPI的发送,这里是有个大坑的。我们从寄存器的角度来考虑,在发送SPI的时候我们会操作SPI的DR寄存器。
因为DR寄存器是16位的,如果你直接SPI1->DR = 0x9F ;
这样的操作是不正确的,你的数据会变成0x009F之后赋值给DR寄存器,
也就是操作了16位,所以STM32会输出16个时钟脉冲

解决方法
我们先找到DR寄存器的地址,再用一个八位的指针指向这个地址,
现在指向的是DR寄存器的开头,那么指针+1,指针指向了DR寄存器的低八位
这时候给指针指向的地址赋值0x9F,那么这个字节就会放入DR低八位的空间内,
而不是操作整个16位DR寄存器



给你个链接,我的帖子,跳转

842346119c34be5aa9.png (59.31 KB )

842346119c34be5aa9.png

使用特权

评论回复
30
zljiu| | 2021-9-6 14:12 | 只看该作者
每次都会多一组吗

使用特权

评论回复
31
gwsan| | 2021-9-6 14:15 | 只看该作者
软件有问题 导致发送重复?

使用特权

评论回复
32
labasi| | 2021-9-9 11:28 | 只看该作者
是在什么部分多呀

使用特权

评论回复
33
paotangsan| | 2021-9-9 12:10 | 只看该作者
无所谓强制不强制

使用特权

评论回复
34
tpgf| | 2021-9-9 12:12 | 只看该作者
跟发送的数据吻合吗

使用特权

评论回复
35
renzheshengui| | 2021-9-9 13:25 | 只看该作者
修改成8位之后正常了么

使用特权

评论回复
36
wakayi| | 2021-9-9 13:29 | 只看该作者
我倒是觉得有可能漏收

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则