USART 同步模式接收不到数据 求助版主

2019-03-23 19:39发布

用STM32在做一个小设计时;把SPI全用光了,然后就用了USART的同步模式;
现在问题是这样,主机可以发送数据,从机可以反应并且在总线上发出数据。但是STM32RXNE始终为0 接收不到数据;有搞过的可以分析一下什么问题啊?
谢谢!
付调试波形
SDC16788_副本.jpg
 SCK 与 MOSI     主机发送命令0xff  与发送0X10;
SDC16789_副本.jpg
0x10细节;
SDC16790_副本.jpg

SCK 与 MISO     主机返回状态  与我预先要得到的0x83
SDC16792_副本.jpg
0x83 说明从机肯定有用 工作了;

附程序
void WIRELESS_SPI_Init(void)
{  

        GPIO_InitTypeDef GPIO_InitStructure;
        
        /* 定义USART初始化结构体 USART_InitStructure */
         USART_InitTypeDef USART_InitStructure;
       /* 定义USART初始化结构体 USART_ClockInitStructure */        
        USART_ClockInitTypeDef  USART_ClockInitStructure;
        
    // Enable USART2 and GPIO clocks
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);

    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);// GPIOD USART2 remap

    ////USART2口初始化 Set PORTD 5,7  as Output push-pull - SCK and MOSI
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable;
USART_ClockInit(USART2 , &USART_ClockInitStructure);

USART_InitStructure.USART_BaudRate =2000000;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2 , &USART_InitStructure);
   
   /* 使能USART1 */
   USART_Cmd(USART2 , ENABLE);
}  
//********************************************USART2配置****************************



u8 SPI_ReadWriteByte(u8 TxData)                                        //SPI读写数据函数
{ u8 tx=0;
u8 retry=0;
        u8 re=0;
        u8 re2=0;
        
//  LSB to MSB //      
  for(u8 i=0;i<8;i++)
    {
  if(TxData&0x80)
          tx|=0x80;
          if(i!=7)tx>>=1;
    TxData<<=1;
    }
/* Loop while DR register in not emplty */
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)      //发送缓存标志位为空
  {
  retry++;
  if(retry>200)return 0;
  }     
/* Send   tx */
USART_SendData(USART2, tx);                                    //发送一个数据
/* Wait to receive a byte */
while (USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == RESET)  //接收缓存标志位不为空
        {
        }
// Return the byte read from the SPI bus
                           
   
      return USART_ReceiveData(USART2);   //返回接收数据
}


//***************************************读写程序***************

测试程序

void test1(void)
{ u8 st1,st2,st3;
// SPI_ReadWriteByte(SPI_WRITE_REG+TX_ADDR);
  NRF24L01_Write_Reg(SPI_WRITE_REG+TX_ADDR,0x83);

  while(1)
  {
   st1= NRF24L01_Read_Reg(TX_ADDR);
  }
  
}



//通过SPI写寄存器
u8 NRF24L01_Write_Reg(u8 regaddr,u8 data)
{
u8 status;
    Clr_NRF24L01_CSN;                    //使能SPI传输
   status =SPI_ReadWriteByte(regaddr); //发送寄存器号
   SPI_ReadWriteByte(data);            //写入寄存器的值
                      //禁止SPI传输   
   return(status);                  //返回状态值
}
//读取SPI寄存器值 ,regaddr:要读的寄存器
u8 NRF24L01_Read_Reg(u8 regaddr)
{
u8 reg_val;     
  Clr_NRF24L01_CSN;                //使能SPI传输  
   SPI_ReadWriteByte(regaddr);     //发送寄存器号
   reg_val=SPI_ReadWriteByte(0XFF);//读取寄存器内容
   Set_NRF24L01_CSN;                //禁止SPI传输      
   return(reg_val);                 //返回状态值
}



程序就阻在这!
while (USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == RESET)  //接收缓存标志位不为空

我检查了 STM32 硬件这几个引脚肯定是可靠连接了;
我降低了速率,还是这个样!
不知道再重哪里入手了!求助  求助  求助 !头大了!

[ 本帖最后由 shirl 于 2012-8-19 14:54 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
shirl
1楼-- · 2019-03-24 02:10
 精彩回答 2  元偷偷看……
shirl
2楼-- · 2019-03-24 06:57
哎!  过了 !就过了!

一周热门 更多>