11193|15

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8S103F2Timer2不进入中断 [复制链接]



STM8S103F2的板子,串口已经调通了,通信正常,然后调TIMER2
用HSI
初始化
    TIM2_DeInit();
    TIM2_TimeBaseInit(TIM2_PRESCALER_256, 624);
    TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); //1-此句打开中断
    enableInterrupts();
    TIM2_Cmd(ENABLE);
下面是中断处理函数:
    #ifdef _IAR_SYSTEMS_
    #pragma vector=0xF
    __interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)
    #endif
    {
        TIM2_ClearFlag(TIM2_FLAG_UPDATE);
   
        iDelayNow++;
    }
Timer2定义也打开了,同样的代码,在STM8S的开发板上是没问题的,移到我自己的板子上就是不进入TIMER2中断,单步执行初始化代码的时候,进入到//1处执行后,发现TIMER2的中断没有打开,切入内部代码,执行的是TIM2->IER |= (u8)TIM2_IT;
这个也是对的,TIM2_IT的值是TIM2_IT_UPDATE,该枚举变量的值是0x01,但是执行后TIM2->IER的值仍然是0x00,后来我直接给其赋值,TIM2->IER = 0x01,发现其值扔为0x00,这肯定是打不开Timer2中断的,难道这是个IAR的BUG?
此帖出自stm32/stm8论坛

最新回复

                                 今天我也遇到了同样的问题。恍然大悟。  详情 回复 发表于 2010-8-30 23:21
点赞 关注
 

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 看来用STM8的目前太少了
此帖出自stm32/stm8论坛
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 确实啊
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 来学习了。。
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 再仔细检查下关于中断的配置,一般这种情况,应该是中断没开,方向要明确
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
“中断没开”
问题确实是中断没打开,明明是用的库函数打开中断,结果F11跟着执行到里面的时候,还是发现打不开,你说的 中断没开 是什么意思?
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 mark
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
如果是用IAR提供的库文件的话,在iar的 编译选项里 的preprocessor的define symbols里加入“STM8S103"一行,再编译一下就行了。
仔细看stm8s.h里的外设定义那里就知道了。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 明白了,为什么IAR要这么做?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

10
 
                                 我还不是太明白
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 


楼上仔细看stm8s.h里面 TIM2_TypeDef 的定义
typedef struct TIM2_struct
00679 {
00680   vu8 CR1;   /*!< control register 1 */
00681 #if defined STM8S103        //1-问题在此处
00682         vu8 RESERVED1; /*!< Reserved register */
00683         vu8 RESERVED2; /*!< Reserved register */
00684 #endif
00685   vu8 IER;   /*!< interrupt enable register */
00686   vu8 SR1;   /*!< status register 1 */
00687   vu8 SR2;   /*!< status register 2 */
...   ...

上面是我复制下来的定义的一部分,看看//1处注释,如果不预定义STM8S103的话,那两个保留的8位寄存器定义就打不开,导致调用库函数打开中断的时候,虽然操作的寄存器名义上是IER,但因为前面两个8位寄存器没打开,所以库函数实际操作的值被写入了偏移2个8位寄存器之后的那个寄存器了。
但我要说的是我还是没明白IAR为什么要这么做?而且IAR官方没有发布针对各种器件的标准例程,所以初用STM8+IAREWSTM8的人如果恰巧碰到这个问题的话说不定会憋多久才能搞出来,虽然IAR还是没有毛病的,但碰到这个问题的人感觉太奇怪了不容易解决所以可能会产生误解,这块儿的问题还是值得初用的人注意的。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
明白了,为什么IAR要这么做?
你去看看STM8S105和STM8S207/208的寄存器排列就知道为什么了。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 有时间一定能够看,MARK
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 同样的程序在开发板上可以,在你自己板子上不行?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
                                 事实上是不同样的,有区别的,原来没发现而已
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

16
 
                                 今天我也遇到了同样的问题。恍然大悟。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表