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

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

[复制链接]
lemenshen 发布时间:2015-5-8 13:45
#include "STM8S103f3p.h". {& v6 ^3 D# ~& Q* L# x1 \
#include "stm8s_tim2.h"5 v, x+ s$ f. D- p6 z
unsigned char i=0;; @; u/ o5 z6 B7 @5 F

% d! I) Q6 Y/ z7 U: p: `5 N% `. |$ Pvoid Init_Tim2(void)  ) k0 u  M8 L/ Q0 d6 L+ I
{  
* s) I0 U# i) K6 \+ S! D3 I    TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件    ( w3 W7 a5 R0 Q* d/ v+ }7 U0 D
    //设置定时器初值  
/ Y5 ~# V) g& u4 _    TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0;   
7 u8 h9 H" c$ q' l0 P! l4 T3 P5 v# H  J    //设定自动重装寄存器值      6 ]7 F2 p! }$ g& N
    //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。  
! R: J# u$ F' ?% v" t. v    //如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。  2 X: z: C9 x2 l
    TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz  (1S)  . J" R1 R0 D: L2 i! l
    TIM2_ARRL=0x12; //0x7A12 31250   意味着每产生一次中断时间为1S  . J( [5 m4 ~% }
    TIM2_PSCR=0x07; //分频128  ) Z0 ]. J6 L1 `1 F
& K7 {' j; X$ h; Q+ S  J  C4 i. M8 i
    TIM2_IER=0x41; //中断允许位使能  
' i. R( [- H& Q/ L0 G+ G    TIM2_CR1=0x01; //使能计时器  $ h6 E' C  l( v6 n
}  9 j+ a) p& B" y$ J$ |$ F+ u. x

4 b+ M  p/ X6 g; w+ r2 Mvoid Init_GPIO(void)# T8 m" Z- a) c6 H) M" L" G" m  d
{0 k- u4 v! v) n6 b
                PD_DDR|=0x04;& b2 O1 W6 W4 I$ A. C
          PD_CR1|=0x04;! g6 @$ A2 `! W2 H; K
          PD_CR2|=0x00;
2 y* ]+ V- t8 V' s6 J* l$ P6 R( N' t                PD_ODR=0x00;
5 T1 G) l3 g$ T  a6 M0 c! {}& n( o, |1 i; H1 e" t

' o/ Y2 S) D: p& V- r. L. tmain()
7 S# {* Y4 S" \2 o. @! N8 S7 s{
- s0 j9 t0 i0 V9 ?        Init_GPIO();
3 J" K9 K* E$ x. y1 |- T       CLK_PCKENR1=0xFF;
) W2 H- _. T6 i, m: Z3 I: Z1 B          _asm("sim" );4 y7 f) K" W2 c! V) b3 B
          Init_Tim2();
  r0 ~8 e; z2 r: f( \& e' y3 }' I) A9 e        _asm("rim");9 v. q+ v2 N9 J9 z& J, `

! N7 D2 M7 q6 H3 A. C        while (1);
6 R9 @/ I9 O6 q% q}
) u+ _/ R; Z/ q/ `' m( G0 m1 a8 N+ t* [* h( |2 i# h4 i9 C
@far @interrupt void TIM2_UPD_OVF_IRQHandler (void)' W4 F) L4 S- c8 ~8 F) D6 h" N/ l
{
5 @8 K6 f' e, q. ]1 I3 b, Z      i++;
1 y1 x3 @& @0 F+ Z- p      TIM2_SR1=0x00;8 p5 [( f' e* @/ M' f0 o( J4 C) K
      if(i==61)
" s; \/ ~9 r' p% D5 R) C$ t      {        PA_ODR=0x04;        i=0;5 R, @( R$ {' ?# a, Q9 }5 T
      }* W4 ?! k! F; t! _2 o) [5 t
      return;2 J+ N/ z2 Q; ~9 L# L6 q! ^: ^) ~
}. |/ [+ ~0 M" a8 T

+ S+ a) H1 `. P  m3 \9 J我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢?都有在vector向量表里面更改了相应的了,就是不亮啊,求大神解救 啊
5 N1 K" U$ l' ~8 t8 z
收藏 评论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 编辑 + z  E* _$ {0 i5 j

. l+ E. E% Z' N+ F8 e6 y7 ^, z' h这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点" I9 f% E5 B1 X/ n" Q/ ?
给你一个我的初始化代码,系统时钟16M,4分频,定时1ms,每1ms进一次中断。这是可以用的7 T; \+ E4 P" f8 u) j
        CLK->PCKENR1|=0x20;; C% N9 q/ o- R1 ]' B9 s9 c
        TIM2->ARRH=0x0f;4 u3 g% ~, c' F; j! p
        TIM2->ARRL=0xa0;0 d5 u5 ~! F8 p2 t
        TIM2->CNTRH=0x00;
1 _2 D0 |% W% X5 N1 b& z) m4 e7 [        TIM2->CNTRL=0x00;
8 }5 f- Y+ t# N: P: R7 u        TIM2->PSCR=0x02;
0 M/ }: y6 ]5 y# d% ~        TIM2->CR1=0x80;
$ I: n, c! ]- D0 ]. r        TIM2->EGR=0x00;
/ o" ?( {+ w  c1 Z$ T# d+ l5 ?        TIM2->IER|=0x01;, b) @% V+ W! j# ~5 {0 Y
        TIM2->CR1|=0x01;
2 g8 |9 ?1 W' g0 c$ m; E2 A4 g3 n你根据自己的项目,把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
( D& {4 O& q) P& c7 A- L7 Icounter is also cleared.
lemenshen 回答时间:2015-5-8 16:24:33
zhuoyemp4 发表于 2015-5-8 16:017 M* p3 l/ o+ n7 P) k* R
其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
$ ~9 F! Q3 X. |
我重新写了一遍,又出现新的问题啊,compile没有问题,但在build的时候出现错误#error cpstm8 stm8_interrupt_vector.c:38(29+23) invalid pointer initializer 7 F! C" [7 C3 r; y$ z5 v
为什么会这样呢?都没变啊?
lemenshen 回答时间:2015-5-8 16:25:51
zhuoyemp4 发表于 2015-5-8 16:01
- d% ]* b( p9 ?2 V. P其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
, o. o* h- [, g2 S3 c
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
lemenshen 回答时间:2015-5-8 16:27:05
zhuoyemp4 发表于 2015-5-8 16:01
& p& V8 G/ v' g8 I其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...

. g" Z8 Y) \8 P$ R; C因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
zhuoyemp4 回答时间:2015-5-8 16:39:49
lemenshen 发表于 2015-5-8 16:27
( M3 |  Y: ?! r* j# p( M因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打 ...
/ W0 g& \2 L: z$ ?* V  I7 p  `
我都是烧HEX文件的8 f- r$ i2 Z! f; \7 K+ g2 p
S19没弄过
lemenshen 回答时间:2015-5-8 16:42:33
zhuoyemp4 发表于 2015-5-8 16:39
) o( i( D; P! O' N我都是烧HEX文件的
3 U2 U" T) N) I  @4 OS19没弄过
6 \! o. Z; m0 E
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
zhuoyemp4 回答时间:2015-5-8 16:44:12
lemenshen 发表于 2015-5-8 16:42" H" ]6 r- O5 H: w9 Z4 a; x4 G
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有 ...
  ]# l' x% ~( h9 D! d1 U
qq多少,我加你
zhuoyemp4 回答时间:2015-5-8 16:46:59
你用的什么编译器?
lemenshen 回答时间:2015-5-8 16:48:35
zhuoyemp4 发表于 2015-5-8 16:44
/ F/ i! D3 ~5 n( }" q$ y  R1 Sqq多少,我加你

5 d$ Q  a9 r  a& [- w891168340  谢谢你啊

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版