型号: STM32C8T6
固件库: HAL库
时钟配置后进入While循环中的闪烁灯程序, 或直接while(1);或其它程序,一段时间后(一秒钟左右),直接跑飞,屏蔽以下代码不配置时钟,程序恢复正常,难道是我时钟配错了吗?
/* 设置系统时钟 同时设置FLASH延时周期 */
HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2);
以下是程序跑飞后进入的地方:
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
以下是出问题的代码:
void Stm32_Clock_Init(void)
{
RCC_OscInitTypeDef RCC_OscInitStructure;
/* HSE预分频系数 */
RCC_OscInitStructure.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
/* HSE状态设置 */
RCC_OscInitStructure.HSEState = RCC_HSE_ON;
/* HSI校准值 */
RCC_OscInitStructure.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
/* HSI状态设置 */
RCC_OscInitStructure.HSIState = RCC_HSI_ON;
/* LSE状态设置 */
RCC_OscInitStructure.LSEState = RCC_LSE_ON;
/* LSI状态设置 */
RCC_OscInitStructure.LSIState = RCC_LSI_ON;
/* 时钟源设置 */
RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSE;
/* PLL倍频系数 */
RCC_OscInitStructure.PLL.PLLMUL = RCC_PLL_MUL9;
/* PLL时钟源 */
RCC_OscInitStructure.PLL.PLLSource = RCC_PLLSOURCE_HSE;
/* PLL状态设置 */
RCC_OscInitStructure.PLL.PLLState = RCC_PLL_ON;
/* 初始化系统时钟 */
while(HAL_RCC_OscConfig(&RCC_OscInitStructure) != HAL_OK);
RCC_ClkInitTypeDef RCC_ClkInitStructure;
/* AHB总线预分频系数 */
RCC_ClkInitStructure.AHBCLKDivider = RCC_SYSCLK_DIV1;
/* APB1总线预分频系数 */
RCC_ClkInitStructure.APB1CLKDivider = RCC_HCLK_DIV2;
/* APB2总线预分频系数 */
RCC_ClkInitStructure.APB2CLKDivider = RCC_HCLK_DIV1;
/* 设置时钟类型 */
RCC_ClkInitStructure.ClockType = RCC_CLOCKTYPE_SYSCLK | \
RCC_CLOCKTYPE_HCLK | \
RCC_CLOCKTYPE_PCLK1 | \
RCC_CLOCKTYPE_PCLK2;
/* 设置系统时钟源 */
RCC_ClkInitStructure.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
/* 设置系统时钟 同时设置FLASH延时周期 */
HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2);
}
/**
* @brief 系统初始化之前的初始化,如:时钟,和控制台等.
*/
void lm_before_init (void)
{
Stm32_Clock_Init();
SystemCoreClockUpdate();
};
extern void test_device_io(void);
/**
* @brief C程序入口
*/
int main (void)
{
/* 0. 必要初始化 */
lm_before_init();
/* 1. 系统相关初始化 */
// lm_system_init();
/* 2. 创建应用进程 */
// app_entry();
/* 4. 永远不会运行到此 */
while(1) {
test_device_io();
}
}