换为了一块开发版SPI1(从机)和SPI2(主机)通讯,还是不对 。预想控制逻辑如下:上电,初始化开始,在主函数中开启从机发送接收中断,然后进入死循环(主机每一秒给从机发送接收一次数据,并且打印发送和接收的数据)
预想在主机发送数据时会触发从机中断,再中断服务函数中翻转LED,并且再次开启中断。
实际情况是从机一直未进入中断,看不到LED翻转 ,麻烦版主帮忙分析一下。
主函数如下:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_DAC_Init();
MX_I2C1_Init();
MX_USART1_UART_Init();
MX_TIM1_Init();
MX_SPI1_Init();
MX_SPI2_Init();
uint8_t Master_TX_Data_buff[2] = {1,2};
uint8_t Master_RX_Data_buff[2] = {3,4};
HAL_SPI_TransmitReceive_IT(&hspi1,Slave_TX_Data_buff,Slave_RX_Data_buff,2);//开启从机中断
while (1)
{
HAL_GPIO_WritePin(SPI2_CS_GPIO_Port,SPI2_CS_Pin,GPIO_PIN_RESET);
if(HAL_SPI_TransmitReceive(&hspi2,Master_TX_Data_buff,Master_RX_Data_buff,2,1000)== HAL_OK)
{
printf("\r\n******** Master-HAL_OK ********\r\n");
printf("主机发送:%d %d \r\n",Master_TX_Data_buff[0] ,Master_TX_Data_buff[1]);
printf("主机接收:%d %d \r\n",Master_RX_Data_buff[0] ,Master_RX_Data_buff[1]);
}
HAL_Delay(1000);
}
}
中断服务函数如下:
void SPI1_IRQHandler(void)
{
uint8_t Slave_TX_Data_buff[2] = {6,7};
uint8_t Slave_RX_Data_buff[2] = {0};
HAL_SPI_TransmitReceive_IT(&hspi1,Slave_TX_Data_buff,Slave_RX_Data_buff,2);
HAL_SPI_IRQHandler(&hspi1);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
|