lmz11223380 发表于 2019-7-25 08:39:52

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


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上电灯会亮。

斯文人 发表于 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]
查看完整版本: STM32F070选择内部时钟后外部上电复位有时点亮不了灯求助