STM 32 SPI 调试的问题

24 篇文章 1 订阅
7 篇文章 0 订阅

问题1:STM32G0 系列   SPI单线与AD7694通信采集数据,使用stm32cube 生成的HAL库编写

        刚开始HAL_SPI_Receive,执行到这句时,一直卡在这里不在往下执行。

最终发现,我使用正点原子的 sysytick 延时函数delay_us, 与这里用于计算超时的sysytick有冲突如,具体冲突原因,未知

delay_us函数,正点原子的

HAL_SPI_Receive函数

最后去掉delay_us函数,延时改为使用timer 去做,发现HAL_SPI_Receive能够正常返回

但是函数能返回,却一直报超时,于是使用逻辑分析仪采集SPI的数据,发现CLK仅有一个脉冲

检查SPI代码,发现SPI使用的是2分频,怀疑是否是波特率过快,导致CLK有问题

于是修改为更高的分频,SPI_BAUDRATEPRESCALER_256

此后数据获取正常

问题2:调试AD5291,设置其电位器值,使用SPI发送数据,并用逻辑分析仪采集,开始觉得波形没有问题,但后期排查发现,SPI代码中将 CPOL 和CPHA均设置为0

AD5291时序要求为CPOL = 0, CPHA = 1的模式,修改如下

再次设置验证,能够成功设置电位器值。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,确保你已经正确配置了STM32SPI外设,并且SPI总线上连接的设备的电源和信号线都正常。 接着,你可以使用STM32提供的HAL库函数来进行SPI通信调试。以下是一个简单的SPI发送和接收数据的示例代码: ```c #include "stm32f4xx_hal.h" #define SPI_TIMEOUT 1000 // 超时时间 SPI_HandleTypeDef hspi1; // SPI1外设句柄 uint8_t tx_buffer[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A}; // 发送缓冲区 uint8_t rx_buffer[10] = {0}; // 接收缓冲区 int main(void) { // 初始化HAL库 HAL_Init(); // 初始化SPI1外设 hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; 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; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; HAL_SPI_Init(&hspi1); // 发送数据 if (HAL_SPI_Transmit(&hspi1, tx_buffer, 10, SPI_TIMEOUT) != HAL_OK) { // 发送失败处理 } // 接收数据 if (HAL_SPI_Receive(&hspi1, rx_buffer, 10, SPI_TIMEOUT) != HAL_OK) { // 接收失败处理 } // 关闭SPI1外设 HAL_SPI_DeInit(&hspi1); while (1) {} } ``` 在以上代码中,我们使用了HAL_SPI_Transmit和HAL_SPI_Receive函数来进行SPI发送和接收数据。需要注意的是,在使用HAL_SPI_Transmit函数前,需要先将待发送的数据存放在发送缓冲区tx_buffer中。同样,在使用HAL_SPI_Receive函数后,接收到的数据会存放在接收缓冲区rx_buffer中。在函数调用后,需要检查返回值是否为HAL_OK来判断SPI通信是否成功。同时,在发送和接收数据前,需要确保SPI总线上的设备已经准备好了数据,否则可能会出现通信失败的情况。 最后,你可以使用调试器(如ST-Link)来观察SPI总线上的信号波形,以进一步排查通信问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有意思科技

给与不给,我都会更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值