问答

汇集网友智慧,解决技术难题

21ic问答首页 - 请教 使用LL库进行SPI通讯提示数据溢出 接收到的数据也不对

单片机 LL库 spi通信 STM32 F405

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

田共TG2024-10-24
问题描述:STM32F405单片机,使用CubeMX5.2.0版本,与adc121s101芯片通讯,使用LL库编写SPI单接收程序;总是提示SPI溢出,并且收到的数据也不对;目前排除了硬件问题,用HAL库可以实现。目前调试了2周,尝试了各种办法,修改SPI参数,修改速度,查询、中断、DAM方式都试了,还是不行。程序截图:






回答 +关注 0
1410人浏览 1人回答问题 分享 举报
1 个回答
  • 你说的溢出应该是指接收吧。

    既然使用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;


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


您需要登录后才可以回复 登录 | 注册