硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1034|回复: 12
收起左侧

[有问必答] F103ZET6 SPI收发问题求助

[复制链接]

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2021-12-9 08:58:21 | 显示全部楼层 |阅读模式
我现在用的是HAL库,发送方式是定时器每隔1S发送十个字节的数据(0到9),自己发自己收,发送时钟是18MHz。
测试情况是:第一次发送完成,能正常进入发送回调函数(void  HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi))和
接收回调函数(void  HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi))
但是查看接收的数据都为0,再继续发送就提示报错,也不能进入发送和接收回调函数,也没进入ErrorCallBack回调函数,
不知道问题出在哪里,对比资料看了下操作步骤,也没发现有遗漏的,那个大佬能帮忙看下,不胜感激。
还有HAL_SPI_GetError(SPI_HandleTypeDef *hspi)这个函数怎么使用的,我调用时一直报错


HAL_SPI_MspInit.png
MX_SPI1_Init.png
定时1S发送一次.png
回调函数.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-9 09:11:38 | 显示全部楼层
方便的话,分享你的完整工程代码到百度云看下。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-12-9 09:44:11 | 显示全部楼层
eric2013 发表于 2021-12-9 09:11
方便的话,分享你的完整工程代码到百度云看下。

多谢大佬,文件我刚上传了,编译器我是用的CubeIDE,SPI的配置文件放在了Core-->Src路径下

链接:https://pan.baidu.com/s/1mASRtjrwzNSKPbSGD-XOxA
提取码:g8r6
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-9 12:26:49 | 显示全部楼层
  HAL_SPI_Transmit_IT(&hspi1,SPI1TXRam,sizeof(SPI1TXRam));                        //使能SPI发�?�中�?
    HAL_SPI_Receive_IT(&hspi1,SPI1RXRam,sizeof(SPI1RXRam));                                //使能SPI接收中断

不可放在MSP初始化里面,要发在你的main函数中初始化完SPI之后。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-12-9 13:15:18 | 显示全部楼层
eric2013 发表于 2021-12-9 12:26
HAL_SPI_Transmit_IT(&hspi1,SPI1TXRam,sizeof(SPI1TXRam));                        //使能SPI发�?�中�? ...

好的,我晚上测试下看看
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-12-10 20:21:03 | 显示全部楼层
eric2013 发表于 2021-12-9 12:26
HAL_SPI_Transmit_IT(&hspi1,SPI1TXRam,sizeof(SPI1TXRam));                        //使能SPI发�?�中�? ...

大佬我刚测试过,还是不对啊,崩溃。能不能帮我看下源代码。
  1. /* Initialize all configured peripherals */
  2.   MX_GPIO_Init();
  3.   MX_USART1_UART_Init();
  4.   MX_SPI1_Init();
  5.   MX_TIM1_Init();
  6.   /* USER CODE BEGIN 2 */
  7.     HAL_SPI_Transmit_IT(&hspi1,SPI1TXRam,sizeof(SPI1TXRam));                        //使能SPI发�?�中�?
  8.     HAL_SPI_Receive_IT(&hspi1,SPI1RXRam,sizeof(SPI1RXRam));                                //使能SPI接收中断
  9.   /* USER CODE END 2 */

  10.   /* Infinite loop */
  11.   /* USER CODE BEGIN WHILE */
  12.   while (1)
  13.   {
  14.           LedDriverPro();
  15.           KeyScanPro();
  16.     /* USER CODE END WHILE */

  17.     /* USER CODE BEGIN 3 */

  18.   }
复制代码

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-10 20:28:30 | 显示全部楼层
触不可及 发表于 2021-12-10 20:21
大佬我刚测试过,还是不对啊,崩溃。能不能帮我看下源代码。

还是不行,直接参考我们的吧,HAL用法都通用,不限制芯片。这个帖子里面下载SPI Flash的例子,里面有个bsp_spi_bus.c

查询,中断和DMA方式都做了。

https://www.armbbs.cn/forum.php?mod=viewthread&tid=93255
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-12-10 20:48:48 | 显示全部楼层
eric2013 发表于 2021-12-10 20:28
还是不行,直接参考我们的吧,HAL用法都通用,不限制芯片。这个帖子里面下载SPI Flash的例子,里面有个bs ...

多谢硬汉哥,我下载下来看下
回复

使用道具 举报

75

主题

685

回帖

910

积分

金牌会员

积分
910
发表于 2021-12-10 21:36:19 | 显示全部楼层
103的SPI不支持回环吧。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-11 00:45:45 | 显示全部楼层
庄永 发表于 2021-12-10 21:36
103的SPI不支持回环吧。

还是你看下的细,我都没有注意他回环测试。

F1的不支持回环测试。不过可以试试,之前有个群友贴过一个新唐的SPI回环测试玩法

QQ截图20211211005312.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-11 00:46:17 | 显示全部楼层
触不可及 发表于 2021-12-10 20:48
多谢硬汉哥,我下载下来看下

不好意思楼主,我没有细看你的问题,F1系列不支持回环,不过可以试试。
之前一个群友贴过一个新唐SPI回环玩法。



回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-12-11 08:37:14 | 显示全部楼层
庄永 发表于 2021-12-10 21:36
103的SPI不支持回环吧。

就是说不能发MOSI和MISO端口短接测试是吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-12-11 09:14:51 | 显示全部楼层
搜了下,有个网友在F411上测试了下,可以用
https://stackoverflow.com/questi ... -spi-in-stm32f411re

有时间我也玩下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 19:19 , Processed in 0.215363 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表