STM32
直播中

华强一条街

9年用户 707经验值
擅长:处理器/DSP
私信 关注
[问答]

STM32cubeMX 6.10.0使用LL库生成定时器模板报错的原因?

分频参数设置 2 - 1(X - Y)情况下,生成的模板出现了bug

  /* USER CODE END tiM6_Init 1 */  TIM_InitStruct.Prescaler = LL_TIM_ETR_FILTER_FDIV1_N4 - LL_TIM_ETR_FILTER_FDIV1_N2;  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;  TIM_InitStruct.Autoreload = 65535;  LL_TIM_Init(TIM6,  TIM_InitStruct);  LL_TIM_DisableARRPreload(TIM6);  LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_RESET);  LL_TIM_DisableMasterSlaveMode(TIM6);  /* USER CODE BEGIN TIM6_Init 2 */


回帖(1)

时见栖鸦

2024-5-20 15:36:57
根据您提供的信息,我将尝试分析STM32CubeMX 6.10.0使用LL库生成定时器模板报错的原因,并提供可能的解决方案。

1. 首先,我们需要检查分频参数设置是否正确。在您的代码中,分频参数设置为2 - 1(X - Y),即LL_TIM_ETR_FILTER_FDIV1_N4 - LL_TIM_ETR_FILTER_FDIV1_N2。这个设置可能不正确,因为LL_TIM_ETR_FILTER_FDIV1_N4和LL_TIM_ETR_FILTER_FDIV1_N2是用于外部触发滤波器分频的参数,而不是定时器的分频参数。正确的分频参数应该使用LL_TIM_PRESCALER_xxx宏定义,例如LL_TIM_PRESCALER_DIV1。

2. 接下来,我们需要检查TIM_InitStruct.Prescaler的赋值。在您的代码中,TIM_InitStruct.Prescaler的赋值可能存在问题。您应该使用正确的分频参数,例如:

   ```
   TIM_InitStruct.Prescaler = (uint32_t)((SystemCoreClock / 2) / 1000000) - 1; // 假设系统时钟为200MHz,定时器时钟为1MHz
   ```

3. 检查LL_TIM_SetTriggerOutput函数的参数。在您的代码中,LL_TIM_SetTriggerOutput(TIMx)缺少参数。正确的函数调用应该是:

   ```
   LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_RESET);
   ```

   其中,LL_TIM_TRGO_RESET是触发输出的选项之一,您可以根据需要选择其他选项。

4. 最后,确保您的STM32CubeMX项目配置正确,包括时钟设置、定时器配置等。

综上所述,您需要检查分频参数设置、TIM_InitStruct.Prescaler的赋值以及LL_TIM_SetTriggerOutput函数的参数。同时,请确保STM32CubeMX项目配置正确。希望这些建议能帮助您解决问题。
举报

更多回帖

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