打印
[STM32F1]

关于stm32f103c8的SPI1的问题

[复制链接]
4597|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feiniao2012|  楼主 | 2014-5-5 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我之前用的STM32F103C8的SPI2可以通信,配置如下,
void RCC_Configuraion(void)
{
   
   
    RCC_DeInit();
    RCC_HSEConfig(RCC_HSE_ON);
    if(RCC_WaitForHSEStartUp()==SUCCESS)
    {
        /* Enable Prefetch Buffer */
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        /* Flash 2 wait state */
              FLASH_SetLatency(FLASH_Latency_2);

              RCC_HCLKConfig(RCC_SYSCLK_Div1);
                 
              RCC_PCLK1Config(RCC_HCLK_Div4);          
                 
              RCC_PCLK2Config(RCC_HCLK_Div4);          

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
              RCC_PLLCmd(ENABLE);

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLOCK 72Mhz
              while(RCC_GetSYSCLKSource() != 0x08)
        {
                 ;
        }
                  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO|RCC_APB2Periph_TIM1,ENABLE);
              RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1|RCC_APB1Periph_SPI2,ENABLE);
    }
               
}

void SPI_Configuration(void)
{         
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /*Configure PA.4(NSS)--------------------------------------------*/
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    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_2;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;

    SPI_Init(SPI2,&SPI_InitStructure);
       
          SPI_Cmd(SPI2, ENABLE);
}
,但是改成SPI1就不行了,为什么引脚时钟都配置好了,但还是不能通信。
沙发
mmuuss586| | 2014-5-5 18:57 | 只看该作者
那就把SPI1的程序发上来看看

使用特权

评论回复
板凳
feiniao2012|  楼主 | 2014-5-7 11:06 | 只看该作者

void RCC_Configuraion(void)
{
    RCC_DeInit();
    RCC_HSEConfig(RCC_HSE_ON);
    if(RCC_WaitForHSEStartUp()==SUCCESS)
    {
        /* Enable Prefetch Buffer */
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        /* Flash 2 wait state */
        FLASH_SetLatency(FLASH_Latency_2);
              //RCC_PLLCmd(DISABLE);

        RCC_HCLKConfig(RCC_SYSCLK_Div1);          //AHB bus,core,memory,DMA          72Mhz
                 
        RCC_PCLK1Config(RCC_HCLK_Div4);          //APB1 CLOCK 18Mhz
                 
              RCC_PCLK2Config(RCC_HCLK_Div4);          //APB2 9Mhz

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//pllclock 72Mhz
              RCC_PLLCmd(ENABLE);

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLOCK 72Mhz
              while(RCC_GetSYSCLKSource() != 0x08)
        {
                 ;
        }
             
              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC |RCC_APB2Periph_SPI1 |RCC_APB2Periph_AFIO,ENABLE);
             
    }
               
}

void SPI_Configuration(void)
{         
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
       
         /*Configure PA.4(NSS)--------------------------------------------*/
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
       
    GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_SET);
       
    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_4;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;

    SPI_I2S_DeInit(SPI1);
               
    SPI_Init(SPI1,&SPI_InitStructure);

    SPI_Cmd(SPI1, ENABLE);
                 
}

使用特权

评论回复
地板
feiniao2012|  楼主 | 2014-5-7 11:11 | 只看该作者
首先谢谢版主百忙之中有时间看我的帖子,最近在搞一个小的控制,主要用到SPI口但是我发现用SPI2口可以通信但换成SPI1就不行了,STM32f103c8的SPI1和SPI2口不是配置方式是一样的吗,这个地方没搞明白,现在板子用的是SPI1口,所以希望版主能帮我一下,谢谢。

使用特权

评论回复
5
feiniao2012|  楼主 | 2014-5-7 18:48 | 只看该作者
mmuuss586 发表于 2014-5-5 18:57
那就把SPI1的程序发上来看看

void RCC_Configuraion(void)
{
    RCC_DeInit();
    RCC_HSEConfig(RCC_HSE_ON);
    if(RCC_WaitForHSEStartUp()==SUCCESS)
    {
        /* Enable Prefetch Buffer */
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        /* Flash 2 wait state */
        FLASH_SetLatency(FLASH_Latency_2);
              //RCC_PLLCmd(DISABLE);

        RCC_HCLKConfig(RCC_SYSCLK_Div1);          //AHB bus,core,memory,DMA          72Mhz
                 
        RCC_PCLK1Config(RCC_HCLK_Div4);          //APB1 CLOCK 18Mhz
                 
              RCC_PCLK2Config(RCC_HCLK_Div4);          //APB2 9Mhz

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//pllclock 72Mhz
              RCC_PLLCmd(ENABLE);

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLOCK 72Mhz
              while(RCC_GetSYSCLKSource() != 0x08)
        {
                 ;
        }
            
              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC |RCC_APB2Periph_SPI1 |RCC_APB2Periph_AFIO,ENABLE);
              
    }
               
}

void SPI_Configuration(void)
{         
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
        
         /*Configure PA.4(NSS)--------------------------------------------*/
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
        
    GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_SET);
        
    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_4;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;

    SPI_I2S_DeInit(SPI1);
               
    SPI_Init(SPI1,&SPI_InitStructure);

    SPI_Cmd(SPI1, ENABLE);
                 
}

使用特权

评论回复
6
feiniao2012|  楼主 | 2014-5-7 18:49 | 只看该作者
mmuuss586 发表于 2014-5-5 18:57
那就把SPI1的程序发上来看看

首先谢谢版主百忙之中有时间看我的帖子,最近在搞一个小的控制,主要用到SPI口但是我发现用SPI2口可以通信但换成SPI1就不行了,STM32f103c8的SPI1和SPI2口不是配置方式是一样的吗,这个地方没搞明白,现在板子用的是SPI1口,所以希望版主能帮我一下,谢谢。

使用特权

评论回复
7
bear1| | 2014-12-16 21:00 | 只看该作者
mmuuss586 发表于 2014-5-5 18:57
那就把SPI1的程序发上来看看

请版主帮忙解决

使用特权

评论回复
8
xuan309170083| | 2014-12-16 21:50 | 只看该作者
拿示波器看看SPI 1的CLK有没有就知道了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝