利用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之类的,就要考虑是不是数据长度配置不对了,具体配置详细说明如下图:

  

STM32 关于HAL库硬件SPI要注意的问题总结的更多相关文章

  1. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  2. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  3. STM32 IIC双机通信—— HAL库硬件IIC版

    参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HA ...

  4. STM32之HAL库、标准外设库、LL库(STM32 Embedded Software)-(转载)

    STM32 Embedded Software  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是 ...

  5. (4)STM32使用HAL库实现串口通讯——理论讲解

    一.查询模式 1. 二.中断模式 1.中断接收. 1.1先看中断接收的流程(以 USART2 为例) 在启动文件中找到中断向量 USART2_IRQHandler 找到USART2_IRQHandle ...

  6. (2)STM32使用HAL库操作外部中断——理论讲解

    1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...

  7. STM32基于HAL库通过DMA读写SDIO

    通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...

  8. (1)STM32使用HAL库操作GPIO

    一  初始化GPIO 使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成. 自动生成的HAL库GPIO初始化代码: static void MX_GPIO_Init( ...

  9. 如何使用keil5将stm32的hal库编译成lib文件——F1版本

    hal库中keil5中编译的速度是比较慢的,相同情况下,每次都要编译的时候,比标准库是要慢很多的,因此就hal库编译成lib文件是一种加快编译速度的方法,当然也有其自身的缺点.一.步骤1.使用cube ...

随机推荐

  1. JavaScript 事件对内存和性能的影响

    程序代码: <%-- Created by IntelliJ IDEA. User: 乔克叔叔 Date: 2017/12/26 Time: 16:45 To change this templ ...

  2. C++ auto类型说明符

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50864612 编程时常常需要把表达式的 ...

  3. WebStorm 6.0 与 7.0 注册码

    经测试 WebStorm 7均可以使用如下注册码,简直就是神key啊! WebStorm 6.0 与 7.0 注册码 User Name: EMBRACE License Key: ===== LIC ...

  4. Web安全扫描工具

    使用 Ibm security appscan  进行WEB安全扫描. 1.SQL注入: 2.发现内部IP泄露模式: 3.已解密的登录请求: 4.HTML注释敏感信息泄露:

  5. 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】

    [033-Search in Rotated Sorted Array(在旋转数组中搜索)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Suppose a sort ...

  6. http格式(graph)

    http请求格式 http请求头 字段 http响应 http响应头字段

  7. Jmeter简单应用

    JMeter 是Apache组织的开源项目,是一个纯Java桌面应用,用于压力测试和性能测量. 1.安装jmeter jdk1.6以上下载地址:http://www.oracle.com/techne ...

  8. SQL 递归使用

    直接贴代码吧= = WITH CTE AS ( -->Begin 一个定位点成员 SELECT COUNTRYORDERID,HSNAME, COUNTRYNAME,PARENTORDERID, ...

  9. 0x22 迭代加深

    poj2248 真是个新套路.还有套路剪枝...大到小和判重 #include<cstdio> #include<iostream> #include<cstring&g ...

  10. 英语发音规则---B字母

    英语发音规则---B字母 一.总结 一句话总结: 1.B发[b]音? bike [baɪk] n. 自行车 bus [bʌs] n. 公共汽车 bag [bæg] n. 袋:猎获物 baby ['be ...