打印
[STM32F0]

关于stm32f030f4p6芯片的HSE问题

[复制链接]
1409|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liaojunhui|  楼主 | 2016-7-12 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liaojunhui 于 2016-7-12 22:20 编辑

各位大神,最近用stm32f030f4p6这款芯片时遇到一个问题,想要使用外部12MHz的晶振,但是却一直检测不到HSERDY位置1.
程序卡在了下面这一句
while(!HSEStatus)
{
   HSEStatus = RCC->CR & RCC_CR_HSERDY;    //¼ì²âÍⲿHSEÊÇ·ñÆðÕñ£¬µÈ´ýÆðÕñ   
},
哪位大神能帮忙看看,芯片也换过了,12MHz的晶振用示波器也能看到12MHZ的方波。
(不知道上传代码,那段代码就和启动代码段的时钟配置是一样的)
void system_config(void)
{
  uint32_t HSEStatus = 0;
  RCC_DeInit();
  RCC->CR &=0xfffeffff;        //关闭HSE
  RCC->CR |=0x00040000;          //使用外部有源晶振,所以置位该位,旁路HSE,在该模式下,OSC-IN需要外部时钟源,OSC_OUT不接且不能作为IO管脚
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);      //开启HSE外部时钟
  while(!HSEStatus)
{
   HSEStatus = RCC->CR & RCC_CR_HSERDY;    //检测外部HSE是否起振,等待起振   
  }
  if ((RCC->CR & RCC_CR_HSERDY) != RESET)      //外部时钟已起振
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }  

  if (HSEStatus == 0x01)
  {
    /* Enable Prefetch Buffer and set Flash Latency */
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;    //SYSCLK=HCLK,不分频
      
    /* PCLK = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

    /* PLL configuration = HSE * 6 = 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));     //此语句相当于先复位这三个数据
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL4);  //此处改成4倍频,HSE=12MHz
            
    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;       //开启PLL锁相环

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)    //等待PLL锁相环开启
    {
    }

    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
    {
    }
  }
  else
  {
    //while(1);  
  /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
  }  
}


沙发
mmuuss586| | 2016-7-12 17:01 | 只看该作者
时钟的初始化部分不对呗;

淘宝上找些开发板的网盘链接,参考他们的代码试试看;

使用特权

评论回复
板凳
neeringstu| | 2016-7-12 21:30 | 只看该作者
你的时钟的初始化函数是怎么写的,估计没有初始化成功

使用特权

评论回复
地板
liaojunhui|  楼主 | 2016-7-12 22:24 | 只看该作者
neeringstu 发表于 2016-7-12 21:30
你的时钟的初始化函数是怎么写的,估计没有初始化成功

我的初始化时钟已经贴上来了,还请您看一下,是否是配置时钟时出了问题。程序是卡在while(!HSEStatus)这一块代码了@neeringstu

使用特权

评论回复
5
liaojunhui|  楼主 | 2016-7-13 15:22 | 只看该作者
原因找出来了,该芯片的VDDA必须要接3.3V电源

使用特权

评论回复
6
xmshao| | 2016-7-14 17:13 | 只看该作者
芯片上的那些电源脚不要漏网之鱼,不然无视了很折腾的。

使用特权

评论回复
7
Thorald| | 2016-7-14 18:34 | 只看该作者
可能是时钟的初始化不对

使用特权

评论回复
8
迪卡| | 2016-7-14 19:21 | 只看该作者
VDDA必须要接3.3V电源,VDDA是怎么定义的

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝