ACDCMENT 2021-09-23 16:25 采纳率: 0%
浏览 111

在STM32F103上使用CUBEMX生成的HAL库函数测试SPI失败求解

在STM32F103上使用CUBEMX生成的HAL库函数上使用串口没问题,我用的中断发送和接收
现在我需要把串口中接收到的数据通过SPI1发送给SPI2,SPI2接收到以后,使用串口再发送出去 通过串口助手来完成
串口部分没问题了,SPI1发送也没问题,SPI2接收时无论我怎么修改调试,只能收到1个字节,其余都是0

请问这是怎么回事呢
main中的部分


  /* USER CODE BEGIN 2 */

    HAL_UART_Receive_IT(&huart1,tempRx, 1);
    
//    uint8_t SIGN=0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

  while (1)
  {

        // 检测是否超时

        // 
    if(POSITION > 0 && HAL_GetTick()-time>300)
    {

            // 数据从SPI1发出 
            HAL_SPI_Transmit(&hspi1,USERbuffer,POSITION,100);
            // SPI2接收
            HAL_SPI_Receive_IT(&hspi2,SPIRXBUF,1);
        
            HAL_UART_Transmit_IT(&huart1, &USER_SPI_BUF[0], POSITION);

        POSITION=0;
        SPI_POSITION=0;
    }
    
}


回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
            //计算接收长度
//        RxCount = huart1.RxXferSize-huart1.RxXferCount;
            //存储缓冲区数据
        memcpy(&USERbuffer[POSITION],tempRx,1);
            //更新存储位置
        POSITION=POSITION+1;
//            //清空接收缓冲区
//        huart1.RxXferCount=huart1.RxXferSize; 
        
        HAL_UART_Receive_IT(&huart1,tempRx,1);
}

void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{
        memcpy(&USER_SPI_BUF[SPI_POSITION],SPIRXBUF,1);
    
        SPI_POSITION=SPI_POSITION+1;

        HAL_SPI_Receive_IT(&hspi2,SPIRXBUF,1);
    }


  • 写回答

1条回答 默认 最新

  • jianqiang.xue 嵌入式领域优质创作者 2021-09-23 21:34
    关注

    SPI1和SPI2怎么可能同时用???
    spi1触发中断发送,会抢占spi2的中断。这个是中断优先级!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月23日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP