dzzp 2015-04-18 07:11 采纳率: 0%
浏览 8442
已结题

STM32F407 SPI的SPI1->DR寄存器值不变

图片说明

如图寄存器状态,不知道怎么回事,网上也搜不到类似的问题>.<;;

理论上,执行 SPIx->DR = Data;后SPI的SR寄存器应该变为SPIx->SR=0x0000(我的所有脚都悬空),但是结果却是SPIx->SR=0x0003,而且DR的值不变任然是SPIx->DR=0x0000。
不知道怎么回事啊,小弟接触arm没多久,谢谢啦!
下面是部分代码,SPI初始化和main函数。

 //main.c
    SPI2Init();
    STM_EVAL_LEDInit(LED4);
    STM_EVAL_LEDInit(LED5);
        u32 temp=0;
        STM_EVAL_LEDToggle(LED4);
        while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
        SPI_I2S_SendData(SPI1,0x11);
        temp=0xfffff;
        while(temp) {temp--;}
        temp=0; 

 //SPI1Init.c
 void SPI1Init(void){

    GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef  SPI_InitStructure; 

  //    Enable the SPI periph   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
    //  Enable SCK, MOSI and MISO GPIO clocks   
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
  //    Enable CS  GPIO clock   
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

    GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                 
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_Init(GPIOB,&GPIO_InitStructure);


    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;   
    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_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;    
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      
    SPI_InitStructure.SPI_CRCPolynomial = 7;        
    SPI_Init(SPI1, &SPI_InitStructure);     
    SPI_Cmd(SPI1, ENABLE);  

      //Configure GPIO PIN for Lis Chip select
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
  //Deselect : Chip Select high 
  GPIO_SetBits(GPIOA, GPIO_Pin_15);
}
  • 写回答

3条回答

  • malinda666 2015-11-24 12:13
    关注

    我在ADS1293上也遇到了这个问题,求解

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料