打印
[应用相关]

求助,stm32用spi协议在同一块板子之间实现数据收发遇到的问题

[复制链接]
418|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2022-10-27 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 elephant00 于 2022-10-27 10:10 编辑

HAL库函数编程,同一块板子里SPI1做主机,SPI2做从机,SPI和相关GPIO口配置完成后,主程序里用HAL_SPI_Receive_IT()准备接受数据。(片选NSS写在SPI2下了,不过设置NSS为软件控制,这个应该不影响)目前遇到的情况是:
1、可以进入一次中断但只能进入一次。
2、从机部分接收不到数据,主机也收不到从机发回的数据。
3、刚进入中断的时候会修改全局变量Slave_Tx_value为0,本来前面初始化为6,所以我在中断中又设置了一次
HAL_SPI_Receive_IT()能进入中断是否说明至少spi引脚配置得没问题?
在这个问题上纠结了两天了也没解决,希望能得到大佬指点,万分万分感谢!!
主程序用while发送数据和查询是否中断
HAL_SPI_Receive_IT(&hspi2,&Slave_Rx_value,1);while(1)        {                //HAL_SPI_Receive_IT(&hspi2,&Slave_Rx_value,1);                HAL_GPIO_WritePin(SPI2_NSS_GPIO_PORT,SPI2_NSS_PIN,GPIO_PIN_RESET);                HAL_SPI_TransmitReceive(&hspi1,&Master_Tx_value,&Master_Rx_value,1,1000);
//调用固件库函数收发数据                HAL_Delay(10);               
HAL_GPIO_WritePin(SPI2_NSS_GPIO_PORT,SPI2_NSS_PIN,GPIO_PIN_SET);               
HAL_Delay(1000);               
  if (RevSucfState == 1)                {                        RevSucfState = 0;                                             
   printf("receive data:%x\n",Slave_Rx_value);               
}                HAL_Delay(1000);        }
中断回调函数
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi){  RevSucfState = 1;
//自己的中断标志位,用于while中查询        Slave_Tx_value = 6;//        printf("\nsuccessfully interrput\n");
//        Slave_Rx_value = hspi2.Instance->RXDR;
//        hspi2.Instance->TXDR = 6;
//向主机发送无效数据        HAL_SPI_Transmit(&hspi2,&Slave_Tx_value,1,1000);        
HAL_SPI_Receive_IT(&hspi2,&Slave_Rx_value,1);}

使用特权

评论回复
沙发
未说出口的像你| | 2022-11-13 14:51 | 只看该作者
你接收完中断之后,标记清除了么?

使用特权

评论回复
板凳
我吃小朋友| | 2022-11-13 15:23 | 只看该作者
你要是能进去一次中断的话,说明初始化部分应该还是对的

使用特权

评论回复
地板
她已醉| | 2022-11-13 15:55 | 只看该作者
正常来说,你用cubemx配置的话,底层应该是没问题的

使用特权

评论回复
5
在曼谷的春| | 2022-11-13 16:27 | 只看该作者
你仿真的时候,看为啥进不到接收部分的中断呢?可以着重关注一下标记之类的

使用特权

评论回复
6
失物招領| | 2022-11-13 16:59 | 只看该作者
是不是发送时间很快啊?就比如第一包和第二包数据紧跟着发,单片机还没处理过来呢?

使用特权

评论回复
7
将爱藏于深海| | 2022-11-13 17:31 | 只看该作者
你可以把工程压缩一下发出来么,帮你分析一下看看到底是什么问题

使用特权

评论回复
8
温室雏菊| | 2022-11-13 18:03 | 只看该作者
初始化的时候Slave_Rx_value6,然后进入一次中断变量被清掉了,那是这个变量的问题吧?

使用特权

评论回复
9
白马过平川| | 2022-11-13 18:35 | 只看该作者
你接收数据之后,应该及时清除中断才对,不然下次是进不来中断的

使用特权

评论回复
10
Bowclad| | 2022-11-13 18:46 | 只看该作者
用cubemx配置的话,底层应该是没问题的

使用特权

评论回复
11
一只眠羊| | 2022-11-13 19:07 | 只看该作者
SPI也是十分复用的,应该不会有所冲突的,我觉得还是哪块变量不对,导致程序进不来中断了

使用特权

评论回复
12
风凉| | 2022-11-13 19:39 | 只看该作者
你可以用LED指示灯之类的,看看程序是否还在运行呢

使用特权

评论回复
13
Undshing| | 2022-11-14 20:29 | 只看该作者
接收完以后清除标志位没有?

使用特权

评论回复
14
SantaBunny| | 2023-2-21 12:46 | 只看该作者
重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

945

主题

2696

帖子

5

粉丝