928|7

3243

帖子

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
点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复
举报

4008

帖子

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
 
 

回复

3243

帖子

0

TA的资源

纯净的硅(高级)

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

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

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

回复

4008

帖子

0

TA的资源

版主

4
 

木有

此帖出自stm32/stm8论坛

点评

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

回复

3243

帖子

0

TA的资源

纯净的硅(高级)

5
 

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

此帖出自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
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
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论坛
 
 
 

回复

3243

帖子

0

TA的资源

纯净的硅(高级)

7
 
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论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

4008

帖子

0

TA的资源

版主

8
 

哦哦

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表