关于STM32F103和107里,如果设置25MHZ?

各位老师,我在用STM32F107,为了做以太网,把外部晶体做成了25MHZ

在程序我如何设置呢?????

请指点>>>>>>>>>>>>

不好意思!!
网速有点慢,一不小心发了两贴,请管理帮删一个吧...

谢谢........

TOP

如果你用的是STM32的3.0以上的库,啥都不用设置。因为使用CL系列的时候,默认的晶振就是25MHz,反而你用其他的时候需要设置。如果你用的是F103,那么就要修改了。
修改stm32f10x.h里面的HSE_Value,注意,是修改#define HSE_Value    ((uint32_t)8000000)这个。而且,不能使用Set_System来配置,需要自己写配置时钟的函数。具体写法参考2.0库的demo。这个地方算是3.0库我最讨厌的地方了。
1

评分人数

  • binglin

TOP

不好意思!!
网速有点慢,一不小心发了两贴,请管理帮删一个吧...

谢谢........
win2000_li 发表于 2010-1-29 13:10


我已删了另一个重复的主题了.

TOP

同意3楼eddy0317的意见.

TOP

本帖最后由 win2000_li 于 2010-1-29 17:23 编辑

非常eddy0317 回复,谢谢!!!!!!

我用的是3.0的库,但是你说的那个CL系列是什么呢???

刚刚接触,有很多不懂的地方.....

还有您所说的3.0以上,不包括3.0吗?????

如果不包括3.0,要自已动手写吗???

TOP

CL就是互联型,也就是F105跟F107。注意,设备的define记得要修改,STM32F10X_CL就是F105和F107用的。F103那些就按容量,选择STM32F10X_LD,STM32F10X_MD和STM32F10X_HD

TOP

3.x.x标准库里面的Setup目录里:

截图04.jpg
2010-1-29 17:24

TOP

包括3.0,像binglin老大说的。那些startup文件都有。记得这样要对应好。
发一个2.0demo里面的RCC设置函数上来吧:
/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{   
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
       
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
   //修改这里,因为你的是25MHz晶振,不能超过72MHz的,所以不能乘以9
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }

/* Enable peripheral clocks --------------------------------------------------*/
  /* GPIOA Periph clock enable */
  //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  /* DAC Periph clock enable */
  //RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  /* TIM2 Periph clock enable */
  //RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}

TOP

如果是用3.0库也是很简单的,直接修改工程配置文件就可以了,以IAR为例,修改如下图:

截图18.jpg
2010-1-29 19:37


由stm32f10x.h文件就可以找到用STM32F10X_CL时外部晶振频率的设置项,它默认就是用25MHz的晶振频率。

#if !defined  HSE_Value
#ifdef STM32F10X_CL   
  #define HSE_Value    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
  #define HSE_Value    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_Value */

另:一般来说如果没有什么特别的需要,建议别修改stm32f10x.h的内容,最好直接在IAR的配置里选用STM32F10X_LD、STM32F10X_MD、STM32F10X_HD或STM32F10X_CL。

TOP

非常感谢两位的答复,学习。。。。。。。。。。。。。

谢谢!!!

TOP

没办法,如果使用的是F103,而晶振是25MHz的话,必须修改。当然,也可以不修改stm32f10x.h的。stm32f10x.h那里已经说得很清楚,在编译器那里,如binglin老大的IAR那里,添加一个HSE_Value的数值定义就可以了。MDK方法一样。

而RCC配置,就需要自己写了。因为库都是按LD,MD,HD使用8MHz,CL使用25MHz来初始化的。

TOP

Review opelc.org on alexa.com