各位大神,小弟我头一回接触HAL,上面安排说要做一个SPI的双机通信。我用CUBEMX生成了工程之后在工程里使用HAL_SPI_TransmitReceive_IT()没有反应,软仿真好像也没进去中断。求解: 有关SPI的代码: uint8_t aSPITxBuffer[1]; uint8_t SPITxbuff[200]={1,2,3,1,2,3,1,2,3,1,2,3}; uint8_t Tx_count_SPI; uint8_t Tx_Num_SPI; __IO ITStatus SpiReady_T=RESET; -----------------------------------------------------------------------以上是全局变量----------------------------------------------------------------------- aSPITxBuffer[0] = SPITxbuff[k]; //把首元素赋给aSPITxBuffer【0】 hspi1.State = HAL_SPI_STATE_READY; if(HAL_SPI_TransmitReceive_IT(&hspi1,aSPITxBuffer,aSPIRxBuffer,1) != HAL_OK) //发送接收中断函数 { Error_Handler(); } void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) //发送中断函数回调 { uint8_t res=HAL_OK; aSPITxBuffer[0] = SPITxbuff[k]; k = k + 1; //接连发送数据直到其等于SPITxbuff的个数。 if(k == strlen(SPITxbuff)) { k = 0; } //printf("hello,world"); SPIRxbuff[Rx_count_SPI]=aSPIRxBuffer[0]; if(hspi->Instance == SPI1) { if(Rx_count_SPI >= 1) { if((SPIRxbuff[Rx_count_SPI-1]==0x0d)&&SPIRxbuff[Rx_count_SPI] == 0x0a) { SpiReady_R = SET; Rx_Num_SPI = --Rx_count_SPI; Rx_count_SPI=0; } else Rx_count_SPI++; } else Rx_count_SPI++; } do { res=HAL_SPI_TransmitReceive_IT(hspi,aSPITxBuffer,aSPIRxBuffer,1); }while(res != HAL_OK); } · |
你太年轻了。说通信吧,你用hal的非中断方式和库函数的方式都通了吗?
评分
查看全部评分
大哥,老大要求的。我也没办法。