STM32 HAL库开发(四)- SPI通信(si4463芯片)

si4463芯片使用spi通信,本文章记录配置。

IDE配置

首先配置spi接口和其他的GPIO引脚。
这里我们选择spi2,可以手动点引脚选择或者直接左侧菜单启用spi2,右侧的引脚会自动配好。
在这里插入图片描述

在这里插入图片描述
IRQ是中断输入,这里配上拉输入,这个是低电平有效。
SEL是片选信号,SDN是芯片使能,都配推挽输出。
RX和TX可以mcu控制,也可以si4463自己控制,这里根据实际来。
在这里插入图片描述
这里配置SPI的参数,跟标准库的结构体一样,配好可以自动生成配置程序,很方便。
在这里插入图片描述

移入si4463驱动

从供应商那边拿到了一个si4463的demo,先建立一个si4463的目录,然后看下结构。
在这里插入图片描述
文件很多,把h文件都打开看了下,实际就这几个来操作si4463.

  • 初始化
  • 轮询检查tx和rx的状态
  • 开启接受
  • 检查配置(实际未实现,不管)
  • 发送报文
    在这里插入图片描述
    这里的思路,就是把驱动里的引脚配好,比如spi接口,sdn、sel等等。
    先看下初始化函数,这里原先是操作SDN这些引脚的电平,然后跳转至定义的位置看下。
    在这里插入图片描述
    原先这里是用的位操作,我们用的hal库,全部替换成HAL接口的GPIO操作。
    在这里插入图片描述
    然后再看下spi的接口,肯定是发消息这块的代码。还是顺着初始化函数看,比如查询partInfo,一路跳转查询,看下spi相关的接口。
    在这里插入图片描述
    一路跳转,终于找到了。
    在这里插入图片描述
    找到了源头,我们使用hal库函数替换这里的spi收发。
    在这里插入图片描述
    最后就是测试,这里如果spi正常,就能读到0x446x的数据。
    在这里插入图片描述
    打个断点,debug过来看下,确实能读到4463的值,证明spi正常。
    如果这里读取不正常,最好debug看下问题出在哪里,可能是移植不完全造成,这里要一步步debug下。
    在这里插入图片描述

错误汇总

这里spi刚开始读到是0xFFFF,问题肯定是SPI没有正常。
在这里插入图片描述
排查步骤:

  1. 首先看下spi是否已经正常开启,正常如果是自动生成的代码,一般是开启了。
  2. 然后就是看接线是否正确,引脚。(我就是这里的引脚短路了,因为手动飞线的)
  3. 最后看移植的是否完成,最好把所有跟引脚相关的函数都查看一遍。可以是搜索引脚名的方式,或者一步步的debug,需要花点时间。
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答关于STM32HAL库SPI通信问题。SPI通信是一种同步的串行通信协议,它使用4根线实现通信,分别是时钟线(SCLK)、主设备输出线(MOSI)、主设备输入线(MISO)和片选线(CS)。下面是一份使用STM32HAL库进行SPI通信的示例代码,你可以参考一下: ```c #include "stm32f4xx_hal.h" // 定义SPI句柄 SPI_HandleTypeDef hspi1; // 定义数据缓冲区 uint8_t tx_buf[10]; uint8_t rx_buf[10]; int main(void) { // 初始化HAL库 HAL_Init(); // 初始化SPI口 hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // 主机模式 hspi1.Init.Direction = SPI_DIRECTION_2LINES; // 双线全双工 hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // 8位数据位 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // 时钟极性为低电平 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // 时钟相位为第一边沿 hspi1.Init.NSS = SPI_NSS_SOFT; // 软件控制片选信号 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // 波特率预分频 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // MSB优先 hspi1.Init.TIMode = SPI_TIMODE_DISABLE; // 禁用TI模式 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // 禁用CRC校验 HAL_SPI_Init(&hspi1); // 发送数据 HAL_SPI_Transmit(&hspi1, tx_buf, 10, 100); // 接收数据 HAL_SPI_Receive(&hspi1, rx_buf, 10, 100); // 同时发送和接收数据 HAL_SPI_TransmitReceive(&hspi1, tx_buf, rx_buf, 10, 100); while (1) { } } ``` 在使用HAL库进行SPI通信时,需要先初始化SPI口并定义一个SPI句柄。然后可以使用HAL_SPI_Transmit、HAL_SPI_Receive和HAL_SPI_TransmitReceive函数分别进行发送、接收和同时发送和接收数据。参数说明如下: - 第一个参数:SPI句柄 - 第二个参数:待发送数据的缓冲区指针 - 第三个参数:待发送/接收数据的长度 - 第个参数:超时时间(单位为ms) 希望这些信息可以帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值