OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7328|回复: 12

定时器中断实验中,定时中断控制的DS1灯正常闪烁,主函数里的DS0灯不闪烁,是什么原因

[复制链接]

5

主题

11

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-4-18
在线时间
4 小时
发表于 2015-12-29 10:30:14 | 显示全部楼层 |阅读模式
5金钱
定时器中断实验中,定时中断控制的DS1灯正常闪烁,主函数里的DS0灯不闪烁,是什么原因
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
        delay_init(168);  //3õê¼»ˉÑóê±oˉêy
        LED_Init();                                //3õê¼»ˉLED¶Ë¿ú

        TIM3_Int_Init(5000-1,8400-1);        //¶¨ê±Æ÷ê±Öó84M£¬·ÖÆμÏμêy8400£¬ËùòÔ84M/8400=10KhzμļÆêyÆμÂ꣬¼Æêy5000′ÎÎa500ms     
        while(1)
        {
                LED0=!LED0;//DS0·-×a
                delay_ms(200);//Ñóê±200ms
        };
}

最佳答案

查看完整内容[请看2#楼]

把LED0 =!LED0;放在定时器中断能够正常闪烁(如果能够正常闪烁那就是你这个delay_msm有问题)?那delay_ms函数是通过什么方式实现的,确定有效?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2015-12-29 10:30:15 | 显示全部楼层
把LED0 =!LED0;放在定时器中断能够正常闪烁(如果能够正常闪烁那就是你这个delay_msm有问题)?那delay_ms函数是通过什么方式实现的,确定有效?
回复

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-4-18
在线时间
4 小时
 楼主| 发表于 2015-12-29 10:44:40 | 显示全部楼层
原子哥,初学者,帮我看看
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-12-29 11:25:11 | 显示全部楼层
while(1)
{

};    大括号后你多了个分号,去掉试试!
回复

使用道具 举报

7

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2015-8-18
在线时间
63 小时
发表于 2015-12-29 14:32:23 | 显示全部楼层
是不是用的同一个端口如PB0-PB15之间,如果是那就对了,就是这个现象。
回复

使用道具 举报

7

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2015-8-18
在线时间
63 小时
发表于 2015-12-29 14:32:46 | 显示全部楼层
本帖最后由 feisheng168 于 2015-12-29 14:42 编辑

是不是用的同一个端口如PB0-PB15之间,如果是那就对了,就是这个现象。
不要在中断里执行IO操作,因为中断反汇编会有异常处理,在中断设标志位,在主函数执行IO就不会错了


回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2015-12-29 15:10:46 | 显示全部楼层
feisheng168 发表于 2015-12-29 14:32
是不是用的同一个端口如PB0-PB15之间,如果是那就对了,就是这个现象。
不要在中断里执行IO操作,因为中断 ...

中断里可以执行IO操作,只是尽量减少操作量,防止中断执行不正确(操作时间超过定时时间)
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2015-12-29 15:11:12 | 显示全部楼层
feisheng168 发表于 2015-12-29 14:32
是不是用的同一个端口如PB0-PB15之间,如果是那就对了,就是这个现象。
不要在中断里执行IO操作,因为中断 ...

中断里可以执行IO操作,只是尽量减少操作量,防止中断执行不正确(操作时间超过定时时间)
回复

使用道具 举报

7

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2015-8-18
在线时间
63 小时
发表于 2015-12-29 16:43:06 | 显示全部楼层
365mcu 发表于 2015-12-29 15:11
中断里可以执行IO操作,只是尽量减少操作量,防止中断执行不正确(操作时间超过定时时间)

呵呵!你没有遇到过中断IO口执行错误的程序,在同一端口操作时主程序在执行IO操作时突然中断,当前程序堆栈,执行中断时又执行当前IO,你想那你执行后,在返回主程序是IO堆栈出栈,会把你中断程序可能被修改,这时程序就会乱。出现怪问题,你有可能想都想不到的问题,为什么操作系统在执行有些程序时必须先关中断原因,你反汇编看看就知道了,呵呵!
回复

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-4-18
在线时间
4 小时
 楼主| 发表于 2015-12-29 17:06:40 | 显示全部楼层
谢谢亲们   我这个程序是有问题的  现在问题已经解决了  谢谢大家
回复

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-4-18
在线时间
4 小时
 楼主| 发表于 2015-12-29 17:09:19 | 显示全部楼层
谢谢  延时是用STM32内部的 SysTick定时器实现的 虽然我的问题不在这  但是亲给了我很大的提示  谢谢亲
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2015-12-29 17:09:49 | 显示全部楼层
feisheng168 发表于 2015-12-29 16:43
呵呵!你没有遇到过中断IO口执行错误的程序,在同一端口操作时主程序在执行IO操作时突然中断,当前程序堆 ...

那就不要在同时写同一个的IO就可以啊,比如我中断对PB0写,其他地方我只读,是不会有问题的,不能说中断中就不能操作IO吧!?我建议只是慎重使用就可以了啊!
回复

使用道具 举报

7

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2015-8-18
在线时间
63 小时
发表于 2015-12-29 17:20:42 | 显示全部楼层
365mcu 发表于 2015-12-29 17:09
那就不要在同时写同一个的IO就可以啊,比如我中断对PB0写,其他地方我只读,是不会有问题的,不能说中断 ...

呵呵,你看吧,我是个人建议,以前我们有批货就是这样出问题的,这种情况很难查的,就是偶尔有一下,最后好不容易找到了。程序大了有时考虑不到导致的。呵呵。所以个人建议。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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