打印

STM32F107VC外部晶振8M设置问题

[复制链接]
7082|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bing_quan|  楼主 | 2010-11-25 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void RCC_Configuration(void)
{
// SystemInit();
ErrorStatus HSEStartUpStatus = SUCCESS;
RCC_DeInit();                //RCC system reset(for debug purpose)
RCC_HSEConfig(RCC_HSE_ON);             //Enable HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp();         //Wait till HSE is ready
if (HSEStartUpStatus == SUCCESS)
{
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);     //Enable Prefetch Buffer
  FLASH_SetLatency(FLASH_Latency_2);          //Flash 2 wait state
  RCC_HCLKConfig(RCC_SYSCLK_Div1);          //HCLK = SYSCLK = 8M
  RCC_PCLK2Config(RCC_HCLK_Div1);           //PCLK2(3-5M) = HCLK/1 = 4M
  RCC_PCLK1Config(RCC_HCLK_Div2);           //PCLK1(3-12M) = HCLK/2 = 8M
  RCC_ADCCLKConfig(RCC_PCLK2_Div2);          //ADCCLK = PCLK2/2 = 2M
     RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);
  RCC_PLLCmd(ENABLE);              //Enable PLL (18-72M)
  while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);     //Wait till PLL is ready
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //Select PLL as system clock source
  while(RCC_GetSYSCLKSource() != 0x08);         //Wait till PLL is used as system clock source
}
else{ while (1); }
////////////////////////////////////////////////////////////////////////////////
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 |RCC_APB1Periph_USART3 |
       RCC_APB1Periph_USART3 |RCC_APB1Periph_UART4 |
       RCC_APB1Periph_UART5 |RCC_APB1Periph_TIM2  , ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |
       RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD |
       RCC_APB2Periph_GPIOE |RCC_APB2Periph_GPIOF |
       RCC_APB2Periph_USART1 |RCC_APB2Periph_ADC1 |
       RCC_APB2Periph_TIM1  |RCC_APB2Periph_AFIO ,ENABLE);
}
使用的是3.3的库 预定义的是。。。。。_CL
改成使用外部晶振8M老是不对,上面的程序是内部8M定时器和波特率多对,
麻烦改成使用外部晶振8M主频72M 波特率设置正确
沙发
PXJ_520| | 2010-11-26 17:47 | 只看该作者
在stm32f10x.h中有个如下的宏定义
        #define HSE_VALUE                 ((uint32_t)8000000)
你看看你更改这个设置没有

使用特权

评论回复
板凳
jgphu| | 2010-12-20 09:41 | 只看该作者
对,2楼说的有道理,如果你不想更改,就自已定义一个吧
例如:   
#define  HSE_8M_VALUE     ((uint32_t)8000000)

使用特权

评论回复
地板
jgphu| | 2011-2-23 16:37 | 只看该作者
楼主借用库的时候应好好看看代码,那些例题ST都是针对自己的开发板的代码。楼主要把RCC配置好好看一下,很简单的。

使用特权

评论回复
5
acgean| | 2011-3-18 08:58 | 只看该作者
不怪楼主疑惑.
这个 PLL  本不复杂, 但一连串的定义和更改. 是把看程序的弄得云里雾里的.
因为一上来, 总有个感觉, 固件库里的东西, 轻易不要去做任何修改.
建议楼主: 重新好好地分析一下这段代码吧

使用特权

评论回复
6
LDTEST| | 2011-3-19 22:57 | 只看该作者
很简单,但是你试下,我的板子上焊的是25M  不方便测试
//设置HSE
RCC->CR|=(0x00000001<<16);
while(!((RCC->CR>>17)&0x00000001))
{
}
//PREDIV1 SCR 来源HSE
//PREDIVE1不分频
RCC->CFGR2=0;
//PLLSCR 来源 PREDIV1
RCC->CFGR|=0x01<<16;
// PLL MUL 倍频 9倍
RCC->CFGR&=(~(0x0F<<18));
RCC->CFGR|=0x07<<18;
//SYSCLK不分频给HCLK
RCC->CFGR&=0xFFFFFF0F;
//高速APB不分频
RCC->CFGR&=0xFFFFC7FF;
//ADC不能大于14MHZ 不能用AHB 设置 最少6分频
RCC->CFGR|=0x00000001<<15;
RCC->CFGR&=(~(0x00000001<<14));
//低速APB  2分频
RCC->CFGR|=0x00000001<<10;
RCC->CFGR&=(~(0x00000001<<8));
RCC->CFGR&=(~(0x00000001<<9));
//FLASH 2个延时周期
FLASH->ACR|=0x32;
//设置系统时钟(SYSCLK)
RCC->CFGR&=0xFFFFFFFE;
RCC->CFGR|=0x00000001<<1;
while(!(RCC->CFGR&0x0000000C)==8)
{
}

使用特权

评论回复
7
lkl10800139| | 2012-3-13 10:30 | 只看该作者
恩,这个问题也困扰我几天,后来暂时先放下了。
现在看到帖子,再回头整理一下。

使用特权

评论回复
8
06006109| | 2012-3-13 10:45 | 只看该作者
楼主的时钟频率注释错了吧,HSI如果是8MHZ的话,HCLK = SYSCLK = 8M????

使用特权

评论回复
9
hbdb| | 2012-10-2 18:21 | 只看该作者
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);
这句错了

使用特权

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

本版积分规则

6

主题

10

帖子

0

粉丝