No idea。。

张开发
2026/4/21 1:09:33 15 分钟阅读

分享文章

No idea。。
文章目录TIMER第一步设置时钟源 (Clock Source)第二步配置参数 (Parameter Settings)第三步开启中断 (NVIC Settings)第四步在代码中启动定时器第五步编写中断回调函数特别提示TIMER配置 TIM1 产生定时中断例如每 10ms 触发一次来运行卡尔曼滤波请按照以下步骤操作第一步设置时钟源 (Clock Source)在你的截图中所有的选项都是 “Disable”。找到Clock Source时钟源。在下拉菜单中选择Internal Clock内部时钟。注意一旦选择了 Internal Clock下方的 Configuration配置栏就会出现参数设置选项。第二步配置参数 (Parameter Settings)在下方的Configuration - Parameter Settings选项卡中你需要设置两个核心参数Prescaler (预分频器)和Counter Period (自动重装载值)。计算公式中断频率 (Hz) 定时器时钟频率 (Prescaler 1) × (Counter Period 1) \text{中断频率 (Hz)} \frac{\text{定时器时钟频率}}{\text{(Prescaler 1)} \times \text{(Counter Period 1)}}中断频率(Hz)(Prescaler 1)×(Counter Period 1)定时器时钟频率​举例假设你的芯片主频/定时器时钟是 72MHz想要 100Hz 的频率即 10ms 中断一次Prescaler (PSC): 设为7199(72,000,000 / 7200 10,000 Hz)Counter Period (ARR): 设为99(10,000 / 100 100 Hz)Internal Clock Division: 设为No DivisionCounter Mode: 设为Up(向上计数)第三步开启中断 (NVIC Settings)配置了定时器还不够必须允许它向 CPU 发出中断信号点击旁边的NVIC Settings选项卡。勾选TIM1 update interrupt旁边的Enabled框。注意对于 TIM1它可能有多个中断通道如 Break, Update, Trigger, Commutation请确保勾选包含Update interrupt的那一项。第四步在代码中启动定时器CubeMX 生成代码后定时器默认是关闭的。你需要在main.c的初始化代码之后手动启动它/* 在 main 函数的初始化后面while(1) 之前 */HAL_TIM_Base_Start_IT(htim1);第五步编写中断回调函数当定时器时间到时系统会自动调用这个回调函数。你可以在main.c的底部添加voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim-InstanceTIM1)// 确认是 TIM1 触发的中断{// 1. 在这里读取 MPU6050// 2. 在这里运行 Kalman_getAngle(...)// 3. 在这里进行 PID 控制}}特别提示TIM1 是高级定时器如果你的目的是简单的周期性任务通常优先使用TIM2, TIM3, TIM4通用定时器因为它们的配置更简单。如果你必须使用 TIM1上述步骤也是通用的。时钟频率确认请检查 CubeMX 中的Clock Configuration选项卡确认APB2 Timer Clock(TIM1 通常挂在 APB2 总线上) 的具体频率是多少再根据公式调整 PSC 和 ARR 的值。

更多文章