dzzp 2015-04-17 23:11 采纳率: 0%
浏览 8584
已结题

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 04:13
    关注

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

    评论
  • qq_21352037 2017-02-07 01:58
    关注

    SPIx->SR=0x0003说明已经发送完成,且接受缓冲不为空,DR寄存器为零说明返回数据为零。
    数据写入DR寄存器后就立刻被发送了,所以监控显示为零

    评论
  • 皇甫春云 2021-07-22 03:11
    关注

    个人感觉,很可能是采用的轮循这种方式,进行数据更新,这时主函数里不能写太多的内容,否则数据会出现更新不及时的情况。

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部