你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8s003f定时器完全无法起作用,弄了2天都没能解决,求救啊

[复制链接]
lemenshen 发布时间:2015-5-8 13:45
#include "STM8S103f3p.h"; L4 w0 }: Y2 g0 m6 D: p. ?
#include "stm8s_tim2.h"3 U9 U. Y0 T1 _3 M
unsigned char i=0;( ]/ v( ^% F% _* ]8 m! b
9 R2 ^% E- R/ j& K
void Init_Tim2(void)  
' o( r8 d5 y0 J{  . y5 a6 Y' V- ^
    TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件   
, X4 [5 u. C7 I& @7 t    //设置定时器初值  
. T$ S  u9 f% F# L  G% e    TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0;   
5 K2 U$ i* `+ _- W/ g! X    //设定自动重装寄存器值      
6 c% B$ f7 I: c; u5 N, H( }4 J9 j    //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。  
! s0 M2 c7 L  |0 w8 Z& t    //如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。  7 t# ~& [% w+ |8 U
    TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz  (1S)  
$ c# n  E: y5 z: a% j    TIM2_ARRL=0x12; //0x7A12 31250   意味着每产生一次中断时间为1S    I8 O' L; Q, ]/ }5 H
    TIM2_PSCR=0x07; //分频128  
5 ?2 M# z! L% p5 P% G- [7 [1 c" x3 q7 c, D+ ^% v0 m
    TIM2_IER=0x41; //中断允许位使能  " A; W, s" j+ G* B
    TIM2_CR1=0x01; //使能计时器  
; c+ B; p* j: y; v}  0 p0 G3 X. w' `2 t; {( Z
4 F1 |: u8 g- I2 h
void Init_GPIO(void)7 @. V  a8 o- X7 b! \, v6 U! Y
{: @% T% F; O- ~2 P( g, f1 w# d
                PD_DDR|=0x04;
4 g. t; A4 b9 C* u9 U          PD_CR1|=0x04;# W' q& c3 Z( }9 a6 l% v
          PD_CR2|=0x00;- G2 ~# e9 l( P) _
                PD_ODR=0x00;4 m8 ~5 w1 M3 _- z
}* ~0 G3 f: L/ w0 V0 M7 j

4 ~2 A; C3 l7 Z% m  emain()( H7 n7 f* h) c& A+ L# m$ R9 Q
{
& s% ^; |% p6 v: n: {9 T3 e        Init_GPIO();, m$ l! w0 W) O5 o# e5 l+ l# V
       CLK_PCKENR1=0xFF;. M/ B) ]5 o1 X7 U4 r  v! ~
          _asm("sim" );
6 p( N5 w" H! m) ?' V" T4 F' M! A5 R          Init_Tim2();7 E* {! B0 I$ F, U' C1 @* \9 T) |* v
        _asm("rim");: c# Z) V" Q+ c; K) ~4 A

- Z. v  D( A. x+ H3 d% ^4 ]        while (1);  y' U) _+ Q) M% u
}
+ u  ]% S) U3 k$ i* F
6 f% x: Y( A5 g! \' `@far @interrupt void TIM2_UPD_OVF_IRQHandler (void)/ {/ f) @( ?& W
{: l6 }% {0 E  _. k! _" g
      i++;: w0 k# H) B& u- V
      TIM2_SR1=0x00;1 m5 r, P, A" [7 p8 Z
      if(i==61)1 k, [3 t+ X$ v, W' O6 A
      {        PA_ODR=0x04;        i=0;) F0 U: v$ Q" r2 P
      }
! H0 E% n8 A( y, B! N' G      return;5 Z$ X* C/ z/ {& e+ b9 B" [: Q
}- z  I  B, k2 x- S3 O# u2 e1 U. a9 J
+ g/ p. P* G& G" \
我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢?都有在vector向量表里面更改了相应的了,就是不亮啊,求大神解救 啊: {. D6 R/ T9 ^4 K6 a! R0 y
赞 收藏 评论11 发布时间:2015-5-8 13:45

举报

11个回答
lemenshen 回答时间:2015-5-8 13:46:42
求大神解答··所谓设置定时器的四个步骤都弄好了,我试过两个板都不行,然后在中断设置断点,也不知道怎么操作···
zhuoyemp4 回答时间:2015-5-8 15:29:22
本帖最后由 zhuoyemp4 于 2015-5-8 15:54 编辑 3 v, r& G. w& G: d% G

, p2 b- c/ }7 i9 N这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点4 ^* m7 ^; m  ]" f. B! e, r- I
给你一个我的初始化代码,系统时钟16M,4分频,定时1ms,每1ms进一次中断。这是可以用的
, x" p& g& v9 _+ {% ]6 R        CLK->PCKENR1|=0x20;: R% c2 K( |$ t3 o
        TIM2->ARRH=0x0f;
# w4 m1 _: c6 X        TIM2->ARRL=0xa0;
1 ^: [  ~7 Q6 i2 T4 S        TIM2->CNTRH=0x00;
; d1 j' |: e- @6 r7 Y  j2 @        TIM2->CNTRL=0x00;: S: P' C! x' A- U6 x
        TIM2->PSCR=0x02;) K, H7 F, T5 X) x
        TIM2->CR1=0x80;# U( D! P/ \: t8 N% y5 r6 r$ J
        TIM2->EGR=0x00; 3 l" t, q9 @! v' o
        TIM2->IER|=0x01;+ C& l' y2 p: X# h, V- M& _( m
        TIM2->CR1|=0x01;: v: r! N' y! Z' l  p
你根据自己的项目,把ARRH,ARRL,PSCR,改一下就OK了
zhuoyemp4 回答时间:2015-5-8 16:01:13
其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter and generates an update of the registers. Note that the prescaler& d0 S; r  D' }: B* ?6 p4 S
counter is also cleared.
lemenshen 回答时间:2015-5-8 16:24:33
zhuoyemp4 发表于 2015-5-8 16:01# R9 \# W; l$ L4 u" y1 {- m9 T) Q4 c
其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
2 ^; w6 p+ p* c/ @
我重新写了一遍,又出现新的问题啊,compile没有问题,但在build的时候出现错误#error cpstm8 stm8_interrupt_vector.c:38(29+23) invalid pointer initializer " D$ W" p( Y( f
为什么会这样呢?都没变啊?
lemenshen 回答时间:2015-5-8 16:25:51
zhuoyemp4 发表于 2015-5-8 16:01
- i2 N9 j/ E; T( w/ b' k! R$ u其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
$ [5 U3 t. U/ U% ^+ e8 M" }; G" j* F: n
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
lemenshen 回答时间:2015-5-8 16:27:05
zhuoyemp4 发表于 2015-5-8 16:01
' x3 V8 [% ~+ o( }7 k其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
- ~* Q; P: ]: W, `7 c, Y+ ?- ?
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
zhuoyemp4 回答时间:2015-5-8 16:39:49
lemenshen 发表于 2015-5-8 16:272 N; D* N* r2 V$ m# z8 |, c) i
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打 ...
- O, |- i& T+ ?! n' s, e
我都是烧HEX文件的
* d# M6 o- F. U( i0 r1 lS19没弄过
lemenshen 回答时间:2015-5-8 16:42:33
zhuoyemp4 发表于 2015-5-8 16:396 @$ y  {: d/ M3 e+ L% ~
我都是烧HEX文件的
& e. a/ y( \' p, u' DS19没弄过
: g7 d. l3 z1 c
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
zhuoyemp4 回答时间:2015-5-8 16:44:12
lemenshen 发表于 2015-5-8 16:425 X" Y( ~- ^) @6 d7 J
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有 ...

/ _3 X: m. T9 ]8 e7 i6 [qq多少,我加你
zhuoyemp4 回答时间:2015-5-8 16:46:59
你用的什么编译器?
lemenshen 回答时间:2015-5-8 16:48:35
zhuoyemp4 发表于 2015-5-8 16:44
3 n8 |+ G: I& T5 T/ P3 P/ sqq多少,我加你

3 r- }0 J- F+ F* `. Y891168340  谢谢你啊
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版