硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5572|回复: 4
收起左侧

[STM32CubeF4] __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE)无法清除中断标志?

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2020-4-14 09:06:20 | 显示全部楼层 |阅读模式
在中断函数中,使用__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); 无法清除中断标志,导致不断重复进入中断。

但是,使用TIM2->SR = (uint16_t)~TIM_FLAG_UPDATE; 就可以正常清除中断标志,一切恢复正常!

百思不得其解。。。。痛苦中。。。

回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-4-14 09:31:35 | 显示全部楼层
我发现问题了。
我的tim2初始化时,选择的是LL库,那么htime2这个结构体变量就没有初始化。那么htim2.Instance就是默认0,而不是TIM2. 所以造成了这个bug。。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2020-4-14 10:18:06 | 显示全部楼层
HAL和LL二合一这种,外设初始化,还是HAL方便,是真的方便。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-4-14 11:45:54 | 显示全部楼层
本帖最后由 caicaptain2 于 2020-4-14 11:47 编辑
eric2013 发表于 2020-4-14 10:18
HAL和LL二合一这种,外设初始化,还是HAL方便,是真的方便。

HAL的结构体有些复杂,它为了兼顾各种不同的定时器,结构体的成员变量太多了。。。光是赋值就好多行。。所以,简单实用定时器更新中断的时候就习惯按照以前的标准库方式。
主要是LL和HAL混用的时候,有点晕了。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2020-4-14 12:30:51 | 显示全部楼层
caicaptain2 发表于 2020-4-14 11:45
HAL的结构体有些复杂,它为了兼顾各种不同的定时器,结构体的成员变量太多了。。。光是赋值就好多行。。 ...

熟悉了之后很方便,逐渐顺手了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 04:39 , Processed in 0.267345 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表