你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL库实现SPI机双通信

[复制链接]
stm32321 提问时间:2017-8-25 09:31 /
悬赏4ST金币已解决
各位大神,小弟我头一回接触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的非中断方式和库函数的方式都通了吗?
收藏 评论3 发布时间:2017-8-25 09:31

举报

3个回答
张亚飞 回答时间:2017-8-25 09:31:23
stm32321 发表于 2017-8-25 10:20
大哥,老大要求的。我也没办法。

你太年轻了。说通信吧,你用hal的非中断方式和库函数的方式都通了吗?
张亚飞 回答时间:2017-8-25 09:50:22
你先直接用HAL_SPI_TransmitReceive()做完之后再用中断,而且就算不用hal库,spi通信的做法大都是判断读写寄存器非空再收发数据也没有用中断处理函数吧。别上来就直接用中断的方式给自己找麻烦。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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

大哥,老大要求的。我也没办法。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版