打印
[STM32F0]

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);死循环问题

[复制链接]
5144|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Othink|  楼主 | 2015-8-19 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先我贴出配置SPI的代码
void SPI1_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef SPI_InitStructure;
  /* Enable the SPI periph */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  
  /* Enable SCK, MOSI, MISO and NSS GPIO clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
  GPIO_PinAFConfig(ADE7953_SCLK_GROUP, ADE7953_SCLK_PIN, GPIO_AF_0);
  GPIO_PinAFConfig(ADE7953_MOSI_GROUP, ADE7953_MOSI_PIN, GPIO_AF_0);
  GPIO_PinAFConfig(ADE7953_MISO_GROUP, ADE7953_MISO_PIN, GPIO_AF_0);
  
  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_Level_3;

  /* SPI SCK pin configuration */
  GPIO_InitStructure.GPIO_Pin = ADE7953_SCLK_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(ADE7953_SCLK_GROUP, &GPIO_InitStructure);

  /* SPI  MOSI pin configuration */
  GPIO_InitStructure.GPIO_Pin =  ADE7953_MOSI_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(ADE7953_MOSI_GROUP, &GPIO_InitStructure);

  /* SPI MISO pin configuration */
  GPIO_InitStructure.GPIO_Pin =  ADE7953_MISO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
        //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(ADE7953_MISO_GROUP, &GPIO_InitStructure);
  
  /* Deinitializes the SPIx peripheral registers to their default reset values*/
        SPI_I2S_DeInit(SPI1);
       
  /* SPI configuration -------------------------------------------------------*/
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8λÊý¾Ý
  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_64;// 48/16=3M µÄSPI
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI1,&SPI_InitStructure);
   
        SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);//
        SPI_Cmd(SPI1, ENABLE); /*!< SD_SPI enable */
       
}
沙发
Othink|  楼主 | 2015-8-19 21:20 | 只看该作者
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
       
        for(i=0;i<5;i++)
        {
                SPI_SendData8(SPI1,SPILOCK[i]);
               
                while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//wait SPI        Data sended       
                if(i==3)SET_PIN_LED1();
                SPIDelay();
               
        }
跑到i=2这里就死掉了。。。

使用特权

评论回复
板凳
Othink|  楼主 | 2015-8-19 21:22 | 只看该作者
时钟应该开对了,芯片是STM32F030R8,各位大神,帮我看看问题所在

使用特权

评论回复
地板
Othink|  楼主 | 2015-8-20 10:10 | 只看该作者
问题已找到;;
初始化少了一句:
        SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
:L

使用特权

评论回复
5
amanda_s| | 2015-8-20 15:03 | 只看该作者
找到问题就好。:)

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Othink + 1 淡定
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

39

帖子

0

粉丝