STM32
直播中

李萍

7年用户 1418经验值
私信 关注
[问答]

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

回帖(1)

张勇

2024-4-18 18:23:30
从您提供的信息来看,可能存在以下几个问题导致无法点亮灯:

1. 时钟未稳定:当选择内部时钟后,外部晶振并没有被使用。由于内部时钟的稳定性可能较差,可能会导致时钟不稳定。请确保内部时钟已经稳定后再进行操作。

解决方法:在配置内部时钟后,添加一个适当的延时来等待内部时钟稳定,例如使用`Delay()`函数。

2. 引脚配置错误:使用外部晶振时可能配置了正确的引脚,但是在选择内部时钟后,可能需要重新配置引脚。请确认引脚配置是否正确。

解决方法:在配置内部时钟后,重新配置引脚并使能对应的GPIO外设。

3. 时钟频率不匹配:外部晶振的频率可能与内部HSI的频率不匹配。可能需要对内部时钟频率进行调整。

解决方法:在配置内部时钟前,请使用正确的寄存器值来设置HSI的频率,以匹配外部晶振的频率。

如果以上方法没有解决问题,建议检查硬件电路和外部晶振是否存在异常,并确认是否有其他因素影响了灯的亮灭。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分