[STM8] 测试一个stm8s105的tim2延时函数,但总是进不了中断。麻烦...

[复制链接]
1427|6
 楼主| rookie108 发表于 2017-6-23 09:43 | 显示全部楼层 |阅读模式
测试一个stm8s105的tim2延时函数,但总是进不了中断。麻烦大家帮我看看问题出在哪里。多谢了!代码简化了,方便大家查看。之前试过是可以的,但后来不小心改动程序,一下子晕头了,怎么搞都不对了
代码如下:

  1. #include "iostm8.h"

  2. int main(void){
  3.     CLK_ECKR = 0x00;    //关闭外部时钟
  4.     CLK_ICKR = 0x01;    //开启内部高速时钟 16M
  5.     CLK_CKDIVR = 0x00;  //cpu不分频 16M
  6.    
  7.     __asm("sim");
  8.    
  9.     //Clock_Config();
  10.    // TIM2_Init();
  11.    TIM2_PSCR = 0x04;    //16分频 1us一个数
  12.     TIM2_ARRH = 0x03;   
  13.     TIM2_ARRL = 0xE7;    //999  计算1000次
  14.     TIM2_IER  = 0x01;    //允许更新中断
  15.     TIM2_CR1  = 0x01;    //使能计数器
  16.     __asm("rim");
  17.    
  18.     while(1){
  19.       unsigned int t=1000;
  20.       if(t>1){t--;}
  21.     }
  22. }


  23. //中断函数
  24. #pragma vector = 0x0F
  25. __interrupt void TIM2_UPD_OVF_TRG_IRQHandler(void)
  26. {
  27.     asm("nop");
  28.     TIM2_SR1 = 0x00;  //清空标志位
  29. }


xmshao 发表于 2017-6-23 15:32 | 显示全部楼层
本帖最后由 xmshao 于 2017-6-23 15:43 编辑

STM8s芯片的外设默认是开启的,借助于调试器看看TIM2是否开着的;
中断服务程序是否跟中断矢量表里的位置对应起来了;
再就是看看是否某些宏定义改变过;
看不清的天空 发表于 2017-6-23 15:53 | 显示全部楼层
顶一下
yiyigirl2014 发表于 2017-6-23 19:11 | 显示全部楼层
现在都玩 32了,怎么还用8啊,没有库函数,用起来不爽。
 楼主| rookie108 发表于 2017-6-29 14:51 | 显示全部楼层
yiyigirl2014 发表于 2017-6-23 19:11
现在都玩 32了,怎么还用8啊,没有库函数,用起来不爽。

STM8也有库函数啊。原来也是用库函数的,后来觉得寄存器也很简单。
 楼主| rookie108 发表于 2017-6-29 14:52 | 显示全部楼层
xmshao 发表于 2017-6-23 15:32
STM8s芯片的外设默认是开启的,借助于调试器看看TIM2是否开着的;
中断服务程序是否跟中断矢量表里的位置对 ...

搞定了,原来我是在模拟仿真下试测的,不知道为什么进不了中断。换成硬件直接试就可以了。
yiyigirl2014 发表于 2017-7-8 12:04 | 显示全部楼层
还是实际跑一下比较好,。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

29

帖子

3

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