OpenEdv-开源电子网

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

spi2双机通信问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
发表于 2017-8-10 12:27:43 | 显示全部楼层 |阅读模式
1金钱
主机给从机发数据,从机接收采用中断,主机发数据收到的全是0,但是从机的中断进不了,看了很久不知道是哪儿的原因,下面是代码,望大神支招。

主机配置
——————————————————————————————————————
#include "spi_dma.h"
void SPI2_DMA_Configuration( void )
{
    SPI_InitTypeDef  SPI_InitStructure;
      GPIO_InitTypeDef GPIO_InitStructure;
      
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);        

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12|GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15;                 
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;                                                   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                   
    GPIO_Init(GPIOB, &GPIO_InitStructure);                                                              
    GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);                                                      
    GPIO_ResetBits(GPIOB,GPIO_Pin_12);

      SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;                                       
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//SPI_Mode_Master    SPI_Mode_Slave               
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                                                        
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                                                
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                                           
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;    //SPI_NSS_Hard        SPI_NSS_Soft                        
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;                                         
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                               
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                               
        SPI_Init(SPI2, &SPI_InitStructure);                                                                                                   
      SPI_Cmd(SPI2, ENABLE);   
        
}

u8 SPI2_ReadWriteByte(u8 TxData)
{  
     u8 retry=0;   
     while((SPI2->SR&1<<1)==0)  
     {
          retry++;
          if(retry>200)return 0;
     }   
     SPI2->DR=TxData;     
     retry=0;
     while((SPI2->SR&1<<0)==0)  
     {
          retry++;
          if(retry>200)return 0;
     }            
     return SPI2->DR;                 
}
int main()
{
        int i =0 ;
      int j =0 ;
      int q =0 ;
      SPI2_DMA_Configuration();      
      while(1)
        {
          q = SPI2_ReadWriteByte((u8)(0x34));
            i = SPI2_ReadWriteByte((u8)(0x22));
                    
        }
   
}
/****************************************/
/****************************************/
从机配置___________________________________________________
#include "spi_dma.h"
#include "string.h"

extern u8 Slave_Temp;
void SPI2_DMA_Configuration( void )
{
   
      SPI_InitTypeDef  SPI_InitStructure;
      GPIO_InitTypeDef GPIO_InitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,   ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,     ENABLE);
               
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12|GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15;                  
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
      
      SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;//SPI_Mode_Master    SPI_Mode_Slave                             
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                              
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                       
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                    
        SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;    //SPI_NSS_Hard        SPI_NSS_Soft                              
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;   
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                           
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI2, &SPI_InitStructure);
        
        SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE);
        
        NVIC_InitStructure.NVIC_IRQChannel=SPI2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
                                
}
void SPI2_IRQHandler(void)
{        
    if(SPI_I2S_GetITStatus(SPI2, SPI_I2S_IT_RXNE) == SET)
  {   
         Slave_Temp = SPI2_ReadByte(0x00);
     SPI2_ReadWriteByte(0xba);      
    }     
}

u8 SPI2_ReadByte(u8 TxData)
{  
     u8 retry=0;   
      while((SPI2->SR&1<<0)==0)  
     {
          retry++;
          if(retry>200)return 0;
     }            
     return SPI2->DR;                 
}

u8 SPI2_ReadWriteByte(u8 TxData)
{  
     u8 retry=0;   
     while((SPI2->SR&1<<1)==0)  
     {
          retry++;
          if(retry>200)return 0;
     }   
     SPI2->DR=TxData;     
     retry=0;
     while((SPI2->SR&1<<0)==0)  
     {
          retry++;
          if(retry>200)return 0;
     }            
     return SPI2->DR;                 
}

int main()
{
      int i = 0;
      int t = 0;
      int j =0xff;
        SPI2_DMA_Configuration();
      while(1);
}

最佳答案

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

已经解决了,nss的引脚配置模式配错了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
 楼主| 发表于 2017-8-10 12:27:44 | 显示全部楼层
已经解决了,nss的引脚配置模式配错了
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
 楼主| 发表于 2017-8-10 12:28:11 | 显示全部楼层
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
 楼主| 发表于 2017-8-10 13:25:44 | 显示全部楼层
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2017-7-15
在线时间
7 小时
发表于 2017-8-10 13:36:50 | 显示全部楼层
帮顶,同问
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
 楼主| 发表于 2017-8-10 16:22:03 | 显示全部楼层
中断可以进了,好像是片选的问题
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-8-10
在线时间
6 小时
 楼主| 发表于 2017-8-11 09:35:21 | 显示全部楼层
顶顶顶顶顶顶
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-8-12 00:38:35 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 08:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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