本帖最后由 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);}
|