俩块开发版都是F1,作为主机的板子能正常发送接收数据,但是从机无法接受数据。俩个开发版配置一样,主机通过软件方式片选从机,
按照我的理解,俩块开发版是同时工作正常是与的关系,不可能一个正常,一个不正常。感觉很疑惑,望论坛的大佬可以解惑!
主机通过死循环不停地向从机发送数据,如果发送成功会翻转LED,并向串口打印数据。主机发出接收的数据都正确。主机主要代码如下:
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_SET);
uint8_t Master_TX_Data_buff[1] = {6};
uint8_t Master_RX_Data_buff[1] = {0};
while(1)
{
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET);
if(HAL_SPI_TransmitReceive(&hspi1,Master_TX_Data_buff,Master_RX_Data_buff,1,1000)== HAL_OK)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
printf("\r\n******** HAL_OK ********");
printf("主机发送数据 :%d",Master_TX_Data_buff[0] );
printf("主机接收数据 :%d \r\n",Master_RX_Data_buff[0] );
}
HAL_Delay(500);
}
从机采用中断接收数据,如果接收成功,会在回调函数中翻转LED,并向串口打印数据,目前状况是第一个 if 函数都无法执行,好像没有进入中断。从机主要代码如下:
if(HAL_SPI_TransmitReceive_IT(&hspi1,Slave_TX_Data_buff,Slave_RX_Data_buff,1) == HAL_OK)//这个函数在主函数中,开启接收发送中断
{
printf("\r\n******** HAL_OK ********");
}
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)//回调函数
{
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
printf("\r\n******** HAL_OK ********\r\n");
printf("从机发送数据 : %d",Slave_TX_Data_buff[0] );
printf("从机接收数据 : %d \r\n",Slave_RX_Data_buff[0] );
}
|