用定时器输出波形遇到的奇怪问题

[复制链接]
3433|3
 楼主| 307610084 发表于 2011-8-3 15:13 | 显示全部楼层 |阅读模式
用STM32的定时器6输出方波遇到了个奇怪的问题,中断服务程序如下:
void TIM6_IRQHandler(void)
{
static int idx = 0;
DAC->DHR12R1 = table[idx]+200;
idx ++;
if(idx >= 2) {
  idx = 0;
}
TIM6->SR  = 0;  //清空标志位
idx = idx;
}
不加最后一句方波波形不对,加上就对了,可最后一句完全没有用啊……谁知道为什么啊……
波形在下面
201108031173.jpg
201108031172.jpg
香水城 发表于 2011-8-3 15:30 | 显示全部楼层
最后一句不是完全没有用,执行这句需要花费时间。

请把TIM6->SR  = 0; 移到idx++之前试试看。
 楼主| 307610084 发表于 2011-8-3 16:58 | 显示全部楼层
2# 香水城
谢谢回复!按你说的,果然可以了,能解释下为什么呢?
香水城 发表于 2011-8-3 18:16 | 显示全部楼层
执行完清除标志语句至标志真正被清除需要一点时间,你把清除标志语句放在中断程序最后,在中断返回时标志还未被真正清除,结果造成再次进入中断;把清除标志语句前移就是要把清除标志的时间留出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部