打印
[STM32F1]

STM32F103C8 定时器中断 误触发 输入捕获

[复制链接]
2203|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddb_21ic|  楼主 | 2020-12-25 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ddb_21ic|  楼主 | 2020-12-25 14:37 | 只看该作者
为什么明明没有中断标记,却进入中断函数了?用过输入捕获的老师们,遇到过吗?

使用特权

评论回复
板凳
香水城| | 2020-12-26 23:28 | 只看该作者
你的截图基本看不到什么实在内容

进了什么中断你查下DIER寄存器的相关使能位,然后检查下自己的代码。

使用特权

评论回复
地板
ddb_21ic|  楼主 | 2021-1-1 21:38 | 只看该作者
本帖最后由 ddb_21ic 于 2021-1-1 21:49 编辑
香水城 发表于 2020-12-26 23:28
你的截图基本看不到什么实在内容

进了什么中断你查下DIER寄存器的相关使能位,然后检查下自己的代码。

版主,Watch窗口中,共记录了4次SR寄存器的值,全是0,说明没有中断事件。
但是:寄存器窗口中,SR寄存器的值是0x0000 0809,与记录的tmp_SR不一致,这可能是什么原因?

DIER值为0x0000 0009, 使能了两个中断源,update和捕获事件CC3。

void TIM3_IRQHandler(void)
{
    irq_event_cnt = 0;
    tmp_SR1 = TIM3->SR;         // 我认为:不看其他内容,这里读取SR寄存器,就不应该是0,是0就不应该有中断产生
    if(LL_TIM_IsActiveFlag_UPDATE(TIM3))
    {
        t3_update_cnt++;
        LL_TIM_ClearFlag_UPDATE(TIM3);
        LL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);        
        ++irq_event_cnt;
        return;
    }   

....

使用特权

评论回复
5
香水城| | 2021-1-2 22:54 | 只看该作者
ddb_21ic 发表于 2021-1-1 21:38
版主,Watch窗口中,共记录了4次SR寄存器的值,全是0,说明没有中断事件。
但是:寄存器窗口中,SR寄存器 ...

既然正常进了ISR 就说明发生了相应中断。

我看你截图中的寄存器查看窗口 DIER和SR寄存器都是0x09,说明发生了相应更新中断和比较中断。

至于你的疑问,建议好好确认下你的处理代码。

使用特权

评论回复
6
ddb_21ic|  楼主 | 2021-1-3 17:43 | 只看该作者
香水城 发表于 2021-1-2 22:54
既然正常进了ISR 就说明发生了相应中断。

我看你截图中的寄存器查看窗口 DIER和SR寄存器都是0x09,说明 ...

那进入中断后,读取 tmp_SR1 = TIM3->SR,此变量就是用来调试用的,其他地方没有任何位置使用了此变量。
读取结果为0,我认为只有两种可能:1、中断误触发;2、SR寄存器读取不成功。
调试窗口中,SR寄存器0x09,也是让我感到不解,SR寄存器有影子寄存器吗?触发中断后,SR寄存器会延后置位?

使用特权

评论回复
7
keaibukelian| | 2021-1-11 12:13 | 只看该作者
看截图看不出来什么内容

使用特权

评论回复
8
labasi| | 2021-1-11 12:15 | 只看该作者
进入中断了 估计代码有问题

使用特权

评论回复
9
paotangsan| | 2021-1-11 12:16 | 只看该作者
可能是进入中断的方式有问题吧

使用特权

评论回复
10
renzheshengui| | 2021-1-11 12:17 | 只看该作者
很有可能中断函数里边的代码有问题

使用特权

评论回复
11
wakayi| | 2021-1-11 12:18 | 只看该作者
单步运行看看情况吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1106

帖子

3

粉丝