打印
[STM8]

有没有熟悉STM8S003F的朋友

[复制链接]
2344|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzh866|  楼主 | 2015-9-10 20:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
E:\104/图片我刚刚学习STM8S003F,在仿真的时候发现TIM工作不正常,无法进入中断,CNTR寄存器也一直为0。在单步仿真时发现,TIM4的寄存器值写入时与操作数不对,请知道的朋友帮帮忙,帮我看看是什么个情况?TIM2的情况与TIM4一样。谢谢!
沙发
zzh866|  楼主 | 2015-9-10 21:11 | 只看该作者

使用特权

评论回复
板凳
sky.sun.zz| | 2015-9-10 21:53 | 只看该作者
没见到你贴出代码,举例,要启动定时器2,配置后要:
TIM2_CR1  | = 0X01;  

使用特权

评论回复
地板
舍恩| | 2015-9-10 21:58 | 只看该作者
怎么说也得贴个定时器寄存器配置代码让大家分析下。

使用特权

评论回复
5
qgmfly| | 2015-9-11 09:29 | 只看该作者
rim 一下

使用特权

评论回复
6
zzh866|  楼主 | 2015-9-11 09:41 | 只看该作者
void TIM4_Init(void)
{
          //   _asm("sim");
                        // TIM4 ->CR1 |=0x80;
                         TIM4 ->ARR = 0x7C;
                         TIM4 ->CNTR =0x00;
                         TIM4 ->PSCR |=0x07;
                         TIM4 ->SR1 &=~0x01;
                         TIM4 ->IER |= 0x01;
                         TIM4 ->EGR =0x01;        
        rim();        
                //  enableInterrupts();
       TIM4 ->CR1 |=0x01;                                 
}

@far @interrupt void TIM4_IRQ(void)
{
           TIM4->SR1&=~0x01;
                 time_cnt ++;
}
这个代码进入中断后,一直出不来,一直运行TIM4->SR1 &=~0x01; time_cnt ++;

使用特权

评论回复
7
zzh866|  楼主 | 2015-9-11 10:03 | 只看该作者

进入中断后TIM4->SR1寄存器一直清除不了(STVD寄存器显示为TIM4->SR寄存器),一直为1。在程序中操作TIM4->ARR =0x7c;时,寄存器显示TIM4_CNTR =0x7c,这到底是向上计数还是向下计数啊,正不正确?操作TIM4->CNTR =0时,寄存器没变化。操作作TIM4->PSCR |=0X07时,寄存器TIM4_CNTR =0,TIM4_SR = 1;操作TIM4->SR1&=~0X01时,寄存器无变化。操作TIM4->IER |=0x01时,寄存器无变化。操作TIM4->EGR =0x01时,寄存器TIM4_IER =1,开启中断rim();后无变化,操作TIM4->CR1|=0X01后,直接进入中断TIM4->SR1 &=~0x01,然后中断一直出不来,在里面循环。TIM4->SR1到底是TIM4_SR还是SR1寄存器?程序序中用SR时提示出错,找不到SR寄存器?

使用特权

评论回复
8
zzh866|  楼主 | 2015-9-11 10:05 | 只看该作者
本帖最后由 zzh866 于 2015-9-11 10:11 编辑

这是程序运行及寄存器图片

QQ图片20150911094338.png (41.22 KB )

QQ图片20150911094338.png

使用特权

评论回复
9
zzh866|  楼主 | 2015-9-11 10:19 | 只看该作者
sky.sun.zz 发表于 2015-9-10 21:53
没见到你贴出代码,举例,要启动定时器2,配置后要:
TIM2_CR1  | = 0X01;

我用的是STVD IDE,用的是stm8s.h头文件,开启定时器是:TIM4 ->CR1 |=0X01,上面代码里面有。

使用特权

评论回复
10
XC456| | 2015-9-11 10:36 | 只看该作者
果然都是高手……

使用特权

评论回复
11
zql19850406| | 2015-9-11 10:57 | 只看该作者
用下库函数试试呢,

使用特权

评论回复
12
zh_sl| | 2015-9-11 11:26 | 只看该作者
TIM4 ->CR1 |=0x01; 改成:TIM4 ->CR1 |=0x81;       开缓冲看看

使用特权

评论回复
13
金融小数| | 2015-9-11 15:12 | 只看该作者
@far @interrupt void TIM4_IRQ(void)
{
            TIM4->SR1&=~0x01;             <--------这里出错了!!!!!!!!!!!!!!
             time_cnt ++;
}

====    改为   TIM4->SR1 =~0x01;    ====

使用特权

评论回复
14
huangciluo| | 2015-9-12 11:14 | 只看该作者
楼主问题解决了吗?我出现中断无法进入的问题,我已开中断,机子就死了,知道什么原因吗?我看你的还能进入中断,你用的是库函数吗?可不可以给我发个历程,我的是IAR工具

使用特权

评论回复
15
zzh866|  楼主 | 2015-9-21 10:03 | 只看该作者
huangciluo 发表于 2015-9-12 11:14
楼主问题解决了吗?我出现中断无法进入的问题,我已开中断,机子就死了,知道什么原因吗?我看你的还能进入 ...

问题解决了,没有用STVD了,改用IAR了!

使用特权

评论回复
16
android2| | 2015-9-21 21:33 | 只看该作者
改用IAR了!

IAR的确是你挺好用的

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝