OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6085|回复: 6

stm32f1的spi从机如何用中断接收,并回复stm32f4主机信息

[复制链接]

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
发表于 2022-10-10 13:56:58 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 challenger 于 2022-10-10 15:30 编辑

比如说:主机MOSI发:0B 00 00 00 00 ,从机回复:02 7F 00 00 00
           若:主机MOSI发数据:01 08 03 09 08 07 。。。 从机一律回复:FF FF FF FF FF FF 。。。

               我本来想用一个接收中断处理spi从机数据,然后 对接收到的buf[0]数据进行判断,然后对应回复,如下:


void SPI_SLAVE_IRQHandler(void)
{
  HAL_SPI_IRQHandler(&hspiSlave);
   HAL_SPI_Receive_IT(&hspiSlave,aRxBuffer2,1000);
       if(aRxBuffer2[0]==0x0B)
       {
        LL_SPI_TransmitData8(hspiSlave.Instance, aTxBuffer[ubTransmitIndex++]); //02 7F 00 00 00
        if(ubTransmitIndex==5)
        {
        ubTransmitIndex=0;
        }
     }
     else
    {
        LL_SPI_TransmitData8(hspiSlave.Instance, aTxBuffer2[ubTransmitIndex++]); //FF  FF  FF  FF  FF FF .................
        if(ubTransmitIndex==translenth)
        {
        ubTransmitIndex=0;
        }

   }


但是发现主机发0B 00 00 00 00,从机接收始终进不了:aRxBuffer2[0]==0x0B等条件。


而我看到有一个spi从机中断的例程是这样的:

void SPI_SLAVE_IRQHandler(void)
{
  /* Check RXNE flag value in ISR register */
  if(LL_SPI_IsActiveFlag_RXNE(SPI_SLAVE))
  {
    /* Call function Slave Reception Callback */
    SPI_SLAVE_Rx_Callback();
  }

  /* Check TXE flag value in ISR register */
  if(LL_SPI_IsActiveFlag_TXE(SPI_SLAVE))
  {
    /* Call function Slave Reception Callback */
    SPI_SLAVE_Tx_Callback();
  }

  /* Check STOP flag value in ISR register */
  if(LL_SPI_IsActiveFlag_OVR(SPI_SLAVE))
  {
    /* Call Error function */
    SPI_SLAVE_TransferError_Callback();
  }
}

但是主机发送:0B 00 00 00 00 ,从机也进入上面红色的发送部份,把数据就发出来啦!从机根本就不进入黄色的中断接收部份,这怎么回事?这个黄色的接收部份,到底什么时候处理数据???
我就是想在主机发完,从机进入上面的黄色字体接收部份,然后从机进行字节buf位的判断,从而对应回复主机内容。。。
哪位大侠搞过两个单片机spi 主机与从机的中断接收处理,特别是从机中断接收数据处理,能否指导一下。。。

最佳答案

查看完整内容[请看2#楼]

目前主机与从机工作在模式0, 有五根线:MOSI ,MISO,SCK,CS ,还有一个irq外部中断脚,这个IRQ脚,是主机接从机IRQ外部中断,主机上升沿中断,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2022-10-10 13:56:59 | 显示全部楼层
目前主机与从机工作在模式0,  有五根线:MOSI ,MISO,SCK,CS ,还有一个irq外部中断脚,这个IRQ脚,是主机接从机IRQ外部中断,主机上升沿中断,  
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2036
金钱
2036
注册时间
2021-7-17
在线时间
636 小时
发表于 2022-10-10 15:01:14 | 显示全部楼层
帮顶   
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2022-10-10 15:36:26 | 显示全部楼层

  if(LL_SPI_IsActiveFlag_RXNE(SPI_SLAVE))
   {
     /* Call function Slave Reception Callback */
     SPI_SLAVE_Rx_Callback();
   }

//就是从机中断接收一直进不去。。。。这怎么回事?从机进入中断接收的条件是什么呢?
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-10-11 09:25:14 | 显示全部楼层
帮顶  
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-10-11 09:51:17 | 显示全部楼层
帮顶  
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2022-11-12 22:29:14 | 显示全部楼层
搞定了,已移植官方的HCI协议,借助HCI实现了SPI的BLE 五线通信 ,利用stm32的SPI与BLE的SPI通信,直联手机。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 22:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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