stm32321 发表于 2017-8-25 09:31:22

HAL库实现SPI机双通信

各位大神,小弟我头一回接触HAL,上面安排说要做一个SPI的双机通信。我用CUBEMX生成了工程之后在工程里使用HAL_SPI_TransmitReceive_IT()没有反应,软仿真好像也没进去中断。求解:
有关SPI的代码:

uint8_t aSPITxBuffer;
uint8_t SPITxbuff={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 = SPITxbuff;                                    //把首元素赋给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 = SPITxbuff;                                                            
        k = k + 1;                                                                        //接连发送数据直到其等于SPITxbuff的个数。
        if(k == strlen(SPITxbuff))
        {
       k = 0;
        }
       
        //printf("hello,world");
       
        SPIRxbuff=aSPIRxBuffer;

        if(hspi->Instance == SPI1)
        {
                if(Rx_count_SPI >= 1)
                {
                        if((SPIRxbuff==0x0d)&&SPIRxbuff == 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);
}
·


张亚飞 发表于 2017-8-25 09:31:23

stm32321 发表于 2017-8-25 10:20
大哥,老大要求的。我也没办法。

你太年轻了。说通信吧,你用hal的非中断方式和库函数的方式都通了吗?

张亚飞 发表于 2017-8-25 09:50:22

你先直接用HAL_SPI_TransmitReceive()做完之后再用中断,而且就算不用hal库,spi通信的做法大都是判断读写寄存器非空再收发数据也没有用中断处理函数吧。别上来就直接用中断的方式给自己找麻烦。

stm32321 发表于 2017-8-25 10:20:32

张亚飞 发表于 2017-8-25 09:50
你先直接用HAL_SPI_TransmitReceive()做完之后再用中断,而且就算不用hal库,spi通信的做法大都是判断读写 ...

大哥,老大要求的。我也没办法。
页: [1]
查看完整版本: HAL库实现SPI机双通信