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

[复制链接]
1730|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配置的话,底层应该是没问题的
在曼谷的春 发表于 2022-11-13 16:27 | 显示全部楼层
你仿真的时候,看为啥进不到接收部分的中断呢?可以着重关注一下标记之类的

失物招領 发表于 2022-11-13 16:59 | 显示全部楼层
是不是发送时间很快啊?就比如第一包和第二包数据紧跟着发,单片机还没处理过来呢?

将爱藏于深海 发表于 2022-11-13 17:31 | 显示全部楼层
你可以把工程压缩一下发出来么,帮你分析一下看看到底是什么问题

温室雏菊 发表于 2022-11-13 18:03 | 显示全部楼层
初始化的时候Slave_Rx_value6,然后进入一次中断变量被清掉了,那是这个变量的问题吧?

白马过平川 发表于 2022-11-13 18:35 | 显示全部楼层
你接收数据之后,应该及时清除中断才对,不然下次是进不来中断的

Bowclad 发表于 2022-11-13 18:46 | 显示全部楼层
用cubemx配置的话,底层应该是没问题的
一只眠羊 发表于 2022-11-13 19:07 | 显示全部楼层
SPI也是十分复用的,应该不会有所冲突的,我觉得还是哪块变量不对,导致程序进不来中断了

风凉 发表于 2022-11-13 19:39 | 显示全部楼层
你可以用LED指示灯之类的,看看程序是否还在运行呢

Undshing 发表于 2022-11-14 20:29 | 显示全部楼层
接收完以后清除标志位没有?
SantaBunny 发表于 2023-2-21 12:46 | 显示全部楼层
重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1031

主题

3946

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部