STM32
直播中

贾小龙

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

STM32407的板子通过CubeMX创建项目移植x-cube-c,一直提示Clock Source failure (Run-time)的原因?

我使用CubeMX创建了一个工程并参考例程移植x-cube-classb,做运行时检测的时候一直提示Clock Source failure (Run-time),我分析代码认为在判断的时候tmpCC4_last和tmpCC4_last-cpy这两个变量一直是0引起的,这俩变量是通过获取TIM5->CCR4赋值的,我认为可能是我TIM5定时器设置不全面的原因,附一张设置截图。请教应该如何解决这个问题。




回帖(1)

任凭风吹

2024-7-23 17:31:50
根据您的描述,Clock Source failure (Run-time) 问题可能是由于TIM5定时器设置不正确或不完整导致的。为了解决这个问题,请按照以下步骤操作:

1. 首先,确保您的STM32F407开发板的时钟设置是正确的。在CubeMX中,检查RCC(Reset and Clock Control)配置,确保PLL和其他时钟源已经正确配置。

2. 在CubeMX中,确保TIM5定时器已经正确配置。检查以下设置:
   - 时钟源:确保TIM5的时钟源已经正确设置,例如从PLL或其他时钟源获取。
   - 预分频器:设置适当的预分频器值,以获得所需的定时器时钟频率。
   - 自动重载寄存器:设置适当的自动重载值,以确定定时器的周期。

3. 检查您的代码,确保在初始化TIM5定时器之前,已经正确地初始化了RCC和时钟系统。例如,使用以下代码初始化RCC和PLL:

```c
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;

// 配置PLL
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);

// 配置时钟
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
```

4. 确保在代码中正确地初始化了TIM5定时器。使用HAL_TIM_Init()函数初始化定时器,并使用HAL_TIM_Base_Start()函数启动定时器。

5. 检查tmpCC4_last和tmpCC4_last-cpy变量的赋值逻辑。确保在定时器中断服务程序中,这两个变量能够正确地从TIM5->CCR4获取值。


举报

更多回帖

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