STM32 关于HAL库硬件SPI要注意的问题总结

        利用STM32CUbeMx编写程序,大大方便了开发,最近做的项目利用到了

STM32CUbeMx的硬件SP,这里对SPI的使用做一个总结。

 

  HAL库里的硬件SPI主要有以下几个库函数:

       /*  hspi1:spi1 硬件通道,temp_val:发送的数据,re_val:接收的数据,1:数据长度,1000:超时时间  */

  HAL_SPI_TransmitReceive(&hspi1,  &temp_val, &re_val, 1, 1000);   // 一边接受一边发送数据

  HAL_SPI_Transmit(&hspi1,&temp,sizeof(temp),10);  //发送数据

  HAL_SPI_Receive(&hspi1,&sc1161y_sel_re,sizeof(sc1161y_sel_re),10); //接收数据

  HAL_SPI_TransmitReceive_DMA();  //以DMA方式发送数据

  HAL_SPI_Receive_DMA();  //以DMA方式接收数据

  HAL_SPI_TransmitReceive_IT();  // 以中断方式同时接收发送数据

  HAL_SPI_Transmit_IT();  // 以中断方式发送数据

  HAL_SPI_Receive_IT();  // 以中断方式接收数据

  具体使用哪个HAL库函数看项目需求。

 

在使用硬件SPI过程中,会出现的问题可以总结为以下几点:

  1.发送数据不成功;

  2.接收数据不成功;

  3.发送的数据有误;

  4.接收的数据有误;

  5.交互的数据一部分是对的,一部分有误;

  6.SPI时钟没有启动。

 

对于以上解决方法,我总结了一个自己调试时的方法:

  1. 先确认自己的SPI配置是否正确,是否满足项目需求;

  2. 确认电路与通信IC无误,注意信号线不要接错;

  3. 重点:调节延时,第一第二步确认无误后,很多时候不成功是由于延时原因造成的,

      主要是一个数据交互之间的延时,一帧数据发送后跟接收的延时,IC片选的延时,

   每个数据发送间的延时,IC与MCU交互间的延时。

 

补充:有时候发送出来的数据不对,有可能是分频因子太小,配置的速度太快导致的,就例如发0x01,收到0x2c之类的;如果发送出来的数据多了几个,可能就是发送数据长度设置不对造成的,例如发送0xaa、0xff 时发送出去多了0x20、0x00之类的,就要考虑是不是数据长度配置不对了,具体配置详细说明如下图:

  

 

posted @   白菜没我白  阅读(15581)  评论(7编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示