关于STM32F103和107里,如果设置25MHZ?
发布: 2010-1-29 13:05 | 作者: win2000_li | 来源: StmFans思蜕盟 OPELC 自由电子联盟
各位老师,我在用STM32F107,为了做以太网,把外部晶体做成了25MHZ
在程序我如何设置呢?????
请指点>>>>>>>>>>>>
在程序我如何设置呢?????
请指点>>>>>>>>>>>>
发布: 2010-1-29 13:05 | 作者: win2000_li | 来源: StmFans思蜕盟 OPELC 自由电子联盟
网速有点慢,一不小心发了两贴,请管理帮删一个吧...
谢谢........
修改stm32f10x.h里面的HSE_Value,注意,是修改#define HSE_Value ((uint32_t)8000000)这个。而且,不能使用Set_System来配置,需要自己写配置时钟的函数。具体写法参考2.0库的demo。这个地方算是3.0库我最讨厌的地方了。
QUOTE:
我已删了另一个重复的主题了.非常eddy0317 回复,谢谢!!!!!!
我用的是3.0的库,但是你说的那个CL系列是什么呢???
刚刚接触,有很多不懂的地方.....
还有您所说的3.0以上,不包括3.0吗?????
如果不包括3.0,要自已动手写吗???
截图04.jpg
发一个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);
}
截图18.jpg
由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。
谢谢!!!
而RCC配置,就需要自己写了。因为库都是按LD,MD,HD使用8MHz,CL使用25MHz来初始化的。