299|7

2900

帖子

0

TA的资源

纯净的硅(高级)

STM32F103SPI工作频率的问题 [复制链接]

我的开发板是8兆晶振

 

时钟配置如下:

void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;               //ía2¿¸ßËùê±Öó(HSE)μÄ1¤×÷×′쬱äá¿
  
  RCC_DeInit();                               //½«ËùóDóëê±ÖóÏà1ØμļÄ′æÆ÷éèÖÃÎaĬèÏÖμ
  RCC_HSEConfig(RCC_HSE_ON);                  //Æô¶ˉía2¿¸ßËùê±ÖóHSE 
  HSEStartUpStatus = RCC_WaitForHSEStartUp(); //μè′yía2¿¸ßËùê±Öó(HSE)Î趨

  if(SUCCESS == HSEStartUpStatus)             //èç1ûía2¿¸ßËùê±ÖóòѾ-Î趨
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //FlashéèÖÃ
    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
    
  
    RCC_HCLKConfig(RCC_SYSCLK_Div1); //éèÖÃAHBê±ÖóμèóúÏμí3ê±Öó(1·ÖÆμ)/72MHZ
    RCC_PCLK2Config(RCC_HCLK_Div1);  //éèÖÃAPB2ê±ÖóoíHCLKê±ÖóÏàμè/72MHz(×î′óÎa72MHz)
    RCC_PCLK1Config(RCC_HCLK_Div2);  //éèÖÃAPB1ê±ÖóêÇHCLKê±ÖóμÄ2·ÖÆμ/36MHz(×î′óÎa36MHz)
  
#ifndef STM32F10X_CL                 //èç1ûê1óÃμÄ2»êÇSTM32F107x»òSTM32F105xÏμáDMCU,PLLòÔÏÂÅäÖà  
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz 
#else                                //èç1ûê1óÃμÄêÇSTM32F107x»òSTM32F105xÏμáDMCU,PLLòÔÏÂÅäÖÃ
    /***** ÅäÖÃPLLx *****/
    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    RCC_PREDIV2Config(RCC_PREDIV2_Div5);
    RCC_PLL2Config(RCC_PLL2Mul_8);

    RCC_PLL2Cmd(ENABLE); //ê1ÄüPLL2 
    while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET);//μè′yPLL2Î趨

    /* PLL configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */ 
    RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
    RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
#endif

    RCC_PLLCmd(ENABLE); //ê1ÄüPLL
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //μè′yPLLÎ趨

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          //éèÖÃÏμí3ê±ÖóμÄê±ÖóÔ′ÎaPLL

    while(RCC_GetSYSCLKSource() != 0x08);               //¼ì2éÏμí3μÄê±ÖóÔ′êÇ·ñêÇPLL
    RCC_ClockSecuritySystemCmd(ENABLE);                 //ê1ÄüÏμí3°2è«ê±Öó 

	/* Enable peripheral clocks --------------------------------------------------*/
  	/* Enable I2C1 and I2C1 clock */
 	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  	/* Enable GPIOA GPIOB SPI1 and USART1 clocks */
  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
					| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
					| RCC_APB2Periph_AFIO, ENABLE);    
  }
}

这是不是表示72兆啊?

SPI初始化:

/* 3õê¼»ˉÅäÖÃSTM32 SPI1 */
	SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;	//SPIéèÖÃÎaË«ÏßË«Ïòè«Ë«1¤
	SPI_InitStructure.SPI_Mode=SPI_Mode_Master;							//éèÖÃÎaÖ÷SPI
	SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;						//SPI·¢Ëí½óêÕ8λ֡½á11
	SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;							//ê±ÖóDü¿Õμí
	SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;							//êy¾Y2¶»ñóúμú1¸öê±ÖóÑØ
	SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;								//NSSóéía2¿1ü½Å1üàí
	SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;	//2¨ìØÂêÔ¤·ÖÆμÖμÎa2
	SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;					//êy¾Y′«êä′óMSBλ¿aê¼
	SPI_InitStructure.SPI_CRCPolynomial=7;								//CRC¶àÏîê½Îa7
	SPI_Init(SPI1,&SPI_InitStructure);									//¸ù¾YSPI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèSPI1¼Ä′æÆ÷

	SPI_Cmd(SPI1,ENABLE);	//STM32ê1ÄüSPI1

波特率预分频值为2,是不是表示SPI工作在36MHz啊?谢谢

此帖出自stm32/stm8论坛

最新回复

哦哦   详情 回复 发表于 2023-5-24 16:53
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复

3985

帖子

0

TA的资源

版主

应该是有一句类似RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
的spi时钟enable,我没看到有那句,所以可能是时钟没开。

具体多少频率和APB1 或者 2的频率配置有关。

看了一下103的spi1好像是挂在APB2 上的

LL_APB2_GRP1_PERIPH_SPI1

此帖出自stm32/stm8论坛

点评

谢谢!有那句,第一个程序没显示全,右边有一个滑块,滑倒下面就看到了。 [attachimg]699757[/attachimg]  详情 回复 发表于 2023-5-24 13:13

回复

2900

帖子

0

TA的资源

纯净的硅(高级)

huo_hu 发表于 2023-5-24 10:08 应该是有一句类似RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 的spi时钟enable,我没看到有那 ...

谢谢!有那句,第一个程序没显示全,右边有一个滑块,滑倒下面就看到了。

9.jpg

此帖出自stm32/stm8论坛
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复

3985

帖子

0

TA的资源

版主

木有

此帖出自stm32/stm8论坛

点评

怎么没有?你没看见我给你截的图,右边有一个蓝色的滑块  详情 回复 发表于 2023-5-24 14:59

回复

2900

帖子

0

TA的资源

纯净的硅(高级)

怎么没有?你没看见我给你截的图,右边有一个蓝色的滑块

此帖出自stm32/stm8论坛

点评

  /* Enable GPIOA GPIOB SPI1 and USART1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO  详情 回复 发表于 2023-5-24 15:03
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复

3985

帖子

0

TA的资源

版主

chenbingjy 发表于 2023-5-24 14:59 怎么没有?你没看见我给你截的图,右边有一个蓝色的滑块
  •  
  • /* Enable GPIOA GPIOB SPI1 and USART1 clocks */
  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
  • | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
  • | RCC_APB2Periph_AFIO, ENABLE);
  • }
  • }

应该是 RCC_APB2ENR_SPI1EN

你只使能了io口 ABCD AF对不

此帖出自stm32/stm8论坛

回复

2900

帖子

0

TA的资源

纯净的硅(高级)

huo_hu 发表于 2023-5-24 15:03   /* Enable GPIOA GPIOB SPI1 and USART1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Perip ...

你说得对,不过这只是RCC初始化。我在SPI初始化里写了。

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

  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);	

	/* 3õê¼»ˉSCK¡¢MISO¡¢MOSIòy½Å */
	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);
	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

	/* 3õê¼»ˉCSòy½Å */
	GPIO_InitStructure.GPIO_Pin = W5500_SCS;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(W5500_SCS_PORT, &GPIO_InitStructure);
	GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);

	/* 3õê¼»ˉÅäÖÃSTM32 SPI1 */
	SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;	//SPIéèÖÃÎaË«ÏßË«Ïòè«Ë«1¤
	SPI_InitStructure.SPI_Mode=SPI_Mode_Master;							//éèÖÃÎaÖ÷SPI
	SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;						//SPI·¢Ëí½óêÕ8λ֡½á11
	SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;							//ê±ÖóDü¿Õμí
	SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;							//êy¾Y2¶»ñóúμú1¸öê±ÖóÑØ
	SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;								//NSSóéía2¿1ü½Å1üàí
	SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;	//2¨ìØÂêÔ¤·ÖÆμÖμÎa2
	SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;					//êy¾Y′«êä′óMSBλ¿aê¼
	SPI_InitStructure.SPI_CRCPolynomial=7;								//CRC¶àÏîê½Îa7
	SPI_Init(SPI1,&SPI_InitStructure);									//¸ù¾YSPI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèSPI1¼Ä′æÆ÷

	SPI_Cmd(SPI1,ENABLE);	//STM32ê1ÄüSPI1
}

 

此帖出自stm32/stm8论坛
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复

3985

帖子

0

TA的资源

版主

哦哦

此帖出自stm32/stm8论坛

回复
您需要登录后才可以回帖 登录 | 注册

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/5 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表