搜索
查看: 2621|回复: 3

[已解决] HAL库实现SPI机双通信

[复制链接]

该用户从未签到

1

主题

3

帖子

0

蝴蝶豆

新手上路

最后登录
2017-8-29
发表于 2017-8-25 09:31:22 | 显示全部楼层 |阅读模式
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的非中断方式和库函数的方式都通了吗?
回复

使用道具 举报

该用户从未签到

18

主题

334

帖子

1

蝴蝶豆

金牌会员

最后登录
2019-7-22
发表于 2017-8-25 09:31:23 | 显示全部楼层
stm32321 发表于 2017-8-25 10:20
大哥,老大要求的。我也没办法。

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

使用道具 举报

该用户从未签到

18

主题

334

帖子

1

蝴蝶豆

金牌会员

最后登录
2019-7-22
发表于 2017-8-25 09:50:22 | 显示全部楼层
你先直接用HAL_SPI_TransmitReceive()做完之后再用中断,而且就算不用hal库,spi通信的做法大都是判断读写寄存器非空再收发数据也没有用中断处理函数吧。别上来就直接用中断的方式给自己找麻烦。

评分

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

查看全部评分

回复

使用道具 举报

该用户从未签到

1

主题

3

帖子

0

蝴蝶豆

新手上路

最后登录
2017-8-29
 楼主| 发表于 2017-8-25 10:20:32 | 显示全部楼层
张亚飞 发表于 2017-8-25 09:50
你先直接用HAL_SPI_TransmitReceive()做完之后再用中断,而且就算不用hal库,spi通信的做法大都是判断读写 ...

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

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-10 22:39 , Processed in 1.199461 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表