你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F070选择内部时钟后外部上电复位有时点亮不了灯求助

[复制链接]
lmz11223380 提问时间:2019-7-25 08:39 /
STM32F070F6P6选择内部时钟后,外部上电复位,有时点亮不了灯(外部晶振拆了);(20次有1到2次会出现)使用外部晶振是没有问题的。
配置信息如下:
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSIStatus = 0;

  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
/* Enable HSI*/ //使能内部时钟
  RCC->CR |= ((uint32_t)RCC_CR_HSION;

  /* Wait till HSI is ready and if Time out is reached exit */ //等待内部时钟起振
  do
  {
   HSIStatus = RCC->CR & RCC_CR_HSIRDY;
    StartUpCounter++;  
  } while((HSIStatus== 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
  {
  HSIStatus = (uint32_t)0x01;
  }
  else  
  {
  HSIStatus = (uint32_t)0x00;
  }  

  if (HSIStatus == (uint32_t)0x01)
  {
/* Enable Prefetch Buffer and set Flash Latency */ //flash总线时钟使能
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

/* HCLK = SYSCLK *///外设AHB总线时钟等于系统时钟
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK = HCLK *///外设APB总线时钟等于系统时钟
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

   /* PLL configuration = HSI/2 * 12= 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL12); //RC时钟2分频后 进行12倍频</font>

/* Enable PLL *///使能锁相环倍频开关
    RCC->CR |= RCC_CR_PLLON;

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

/* 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
  { /* If HSI fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */

  }  
}
有板子的朋友也可以下载HEX试试,PA10上电灯会亮。

STM32F070.zip

下载

24.42 KB, 下载次数: 5, 下载积分: ST金币 -1

收藏 1 评论3 发布时间:2019-7-25 08:39

举报

3个回答
斯文人 回答时间:2019-7-26 10:17:15
似乎没有看到你对PA10管脚的配置,程序没有配置有时候亮也正常,硬件导致的比如电容充放电引起的或者是其它的原因,建议你加上PA10的控制代码,比如你就初始化灭,你再试试复位看会不会亮,如果在亮你先查程序有问题没,如果没问题 肯定就是你硬件有问题
斯文人 回答时间:2019-7-26 10:17:59
还有就是你的代码背景一抹黑,基本看不清
lmz11223380 回答时间:2019-7-26 13:02:34
斯文人 发表于 2019-7-26 10:17
似乎没有看到你对PA10管脚的配置,程序没有配置有时候亮也正常,硬件导致的比如电容充放电引起的或者是其它 ...

是有控制代码的,只是时钟配置,基本配置还是有的
STM32F070F6P6选择内部时钟后,外部上电复位,有时点亮不了灯(外部晶振拆了);(20次有1到2次会出现)使用外部晶振是没有问题的。
配置信息如下:
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSIStatus = 0;

  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
/* Enable HSI*/ //使能内部时钟
  RCC->CR |= ((uint32_t)RCC_CR_HSION;

  /* Wait till HSI is ready and if Time out is reached exit */ //等待内部时钟起振
  do
  {
   HSIStatus = RCC->CR & RCC_CR_HSIRDY;
    StartUpCounter++;  
  } while((HSIStatus== 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
  {
  HSIStatus = (uint32_t)0x01;
  }
  else  
  {
  HSIStatus = (uint32_t)0x00;
  }  

  if (HSIStatus == (uint32_t)0x01)
  {
/* Enable Prefetch Buffer and set Flash Latency */ //flash总线时钟使能
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

/* HCLK = SYSCLK *///外设AHB总线时钟等于系统时钟
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK = HCLK *///外设APB总线时钟等于系统时钟
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

   /* PLL configuration = HSI/2 * 12= 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL12); //RC时钟2分频后 进行12倍频</font>

/* Enable PLL *///使能锁相环倍频开关
    RCC->CR |= RCC_CR_PLLON;

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

/* 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
  { /* If HSI fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */

  }  
}
有板子的朋友也可以下载HEX试试,PA10上电灯会亮。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版