打印

请教 使用LL库进行SPI通讯提示数据溢出 接收到的数据也不对

[复制链接]
2269|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
田共TG|  楼主 | 2024-10-24 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:STM32F405单片机,使用CubeMX5.2.0版本,与adc121s101芯片通讯,使用LL库编写SPI单接收程序;总是提示SPI溢出,并且收到的数据也不对;目前排除了硬件问题,用HAL库可以实现。目前调试了2周,尝试了各种办法,修改SPI参数,修改速度,查询、中断、DAM方式都试了,还是不行。程序截图:






使用特权

评论回复
沙发
香水城| | 2024-10-29 09:48 | 只看该作者
你说的溢出应该是指接收吧。

既然使用HAL库没问题,硬件方面应该是没啥问题了。


配置方面,使用CubeMx的话,操作是一样的,只是生成的工程代码写法有差别。


从你描述的问题现象来看,感觉完全没有正常通信,还不仅仅溢出的问题。


你看看是否用户代码哪里有问题,我这边使用STM32F4的开发板,选择SPI1自发自收


是正常的。发送采用DMA方式,接收采用中断方式。


我添加的用户代码,供参考:


LL_DMA_ConfigAddresses(DMAx, LL_DMA_STREAM,  (uint32_t)&SPITXData0],(uint32_t) &(SPI1->DR),LL_DMA_DIRECTION_MEMORY_TO_PERIPH);


LL_DMA_SetDataLength(DMAx, LL_DMA_STREAM, SIZE);


LL_DMA_EnableIT_TC(DMAx, LL_DMA_STREAM);


LL_SPI_EnableDMAReq_TX(SPI1);


LL_SPI_EnableIT_RXNE(SPI1);

LL_DMA_EnableStream(DMAx, LL_DMA_STREAM);
LL_SPI_Enable(SPI1);



根据RXNE事件在其中断里进行数据接收:
SPIRXData[cnt++]=SPI1->DR;


如果中断接收的话,中断处理程序尽量简洁点。可以先将波特率放慢点。

使用特权

评论回复
板凳
欢乐家园| | 2024-12-31 23:34 | 只看该作者
可能是LL库与SPI配置不兼容,尝试手动设置SPI寄存器或使用HAL库。

使用特权

评论回复
地板
onlycook| | 2025-1-9 12:06 | 只看该作者
检查SPI的波特率设置是否合适

使用特权

评论回复
5
失物招領| | 2025-2-12 01:29 | 只看该作者
时钟极性(CPOL)和相位(CPHA):确保LL库的SPI配置与ADC121S101的要求一致

使用特权

评论回复
6
将爱藏于深海| | 2025-2-12 02:38 | 只看该作者
检查数据帧大小(8位或16位)是否匹配

使用特权

评论回复
7
她已醉| | 2025-2-12 03:27 | 只看该作者
降低SPI波特率,排除速度过快导致的问题

使用特权

评论回复
8
春日负喧| | 2025-2-12 04:39 | 只看该作者
数据读取不及时:确保在接收到数据后及时读取SPI数据寄存器(DR),避免溢出

使用特权

评论回复
9
温室雏菊| | 2025-2-12 05:29 | 只看该作者
如果使用DMA,确保DMA缓冲区足够大,且DMA传输完成中断及时处理数据

使用特权

评论回复
10
故意相遇| | 2025-2-12 06:36 | 只看该作者
如果使用硬件NSS,确保配置正确;如果使用软件NSS,确保在传输前后正确控制NSS信号

使用特权

评论回复
11
白马过平川| | 2025-2-12 07:27 | 只看该作者
在关键操作(如NSS信号切换)后增加适当延时

使用特权

评论回复
12
风凉| | 2025-2-12 08:30 | 只看该作者
初始化顺序,检查LL库的初始化顺序是否与HAL库一致

使用特权

评论回复
13
捧一束彼岸花| | 2025-2-12 09:28 | 只看该作者
对比LL库和HAL库的SPI寄存器配置,确保关键寄存器设置相同

使用特权

评论回复
14
西洲| | 2025-2-12 10:32 | 只看该作者
使用逻辑分析仪抓取SPI波形,对比LL库和HAL库的波形差异

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝