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

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

[复制链接]
lemenshen 发布时间:2015-5-8 13:45
#include "STM8S103f3p.h". P+ }* T7 L' N& Y
#include "stm8s_tim2.h"
8 G% b1 J$ F1 W/ p* Dunsigned char i=0;
. M+ J1 g7 G2 o/ `+ Z9 E2 |$ L" d% g9 T
void Init_Tim2(void)  " L1 \/ [5 O. K
{  
& H+ z- Z, V; m+ p6 F    TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件    % C* s" j2 {$ i( V: z3 ?& Z" `2 P. r8 U
    //设置定时器初值  6 d# v2 p1 X8 \6 O  p* |8 b' f
    TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0;   
  b. R7 v( c7 p7 h7 L    //设定自动重装寄存器值      , x7 V" k# h' Q
    //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。  / ^1 X4 `4 W  @1 k$ z4 Q- m
    //如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。  
$ }" W: k' d3 h+ e+ c/ K    TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz  (1S)  & H( F  y! ^: C- f0 E% |) @
    TIM2_ARRL=0x12; //0x7A12 31250   意味着每产生一次中断时间为1S  * C7 V- ^$ T! d& A, S2 a: I: \; p: i
    TIM2_PSCR=0x07; //分频128  + e* B& S0 C/ }( c$ o4 T, E
+ ]; W7 Z! o9 Y& _  v. a9 K' Z
    TIM2_IER=0x41; //中断允许位使能  & J4 w! c$ A- F7 X9 `- k
    TIM2_CR1=0x01; //使能计时器  8 |$ |! y. ~+ H  g' e/ \/ _
}  
% b( R  f! b1 a- R$ S
& W9 u. I" z- `+ \: z% t0 |void Init_GPIO(void)
0 I7 v, R& R+ e8 T{6 {# a7 k, y6 F2 v/ K
                PD_DDR|=0x04;
7 v& [  X4 r% c; @) s          PD_CR1|=0x04;
: v% \9 d) }+ E$ `5 s          PD_CR2|=0x00;
) z, G2 R) x. e/ y: w  r+ H& e                PD_ODR=0x00;
3 X9 x; _, A. [4 w}; F: ^* c0 F# \# u1 S- \4 M

8 f2 d: j; G" l  C& u  hmain()
5 I  ]% Z  ]0 y8 F0 s5 K{8 o* h2 f& k" r, O
        Init_GPIO();2 d  F$ E* P1 {3 S( N! S
       CLK_PCKENR1=0xFF;
" U9 ?" s' q8 O* U* P" P          _asm("sim" );
. \- |& R$ S9 O) e$ P          Init_Tim2();
2 ]. L4 L' H# U" V! ^' ~2 |        _asm("rim");" k; {1 Y. A7 ^
  g" e' W- c/ F" _4 C: T  }
        while (1);7 `5 E' g5 \- q
}
( e5 h7 h% F# [- h( x
8 j* v2 `6 f, X, c1 o5 B@far @interrupt void TIM2_UPD_OVF_IRQHandler (void); L& u7 Y: |4 n0 Q
{
2 ^/ ]$ q2 x, ?, w0 M      i++;* F) g; v; ~. Z# X3 C( A5 K8 S
      TIM2_SR1=0x00;
3 {; x" y" S! v1 B5 u      if(i==61)
6 r# `  d0 `+ Y# B$ B      {        PA_ODR=0x04;        i=0;2 x0 s! L6 K* x: \  |4 F
      }3 M  {& p+ B0 ~; T7 ]5 ~8 X
      return;$ I6 q0 `1 ?6 W5 U% E
}
% w) e# j& \( Y: h* ?
6 k! T% M! Y' }% r我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢?都有在vector向量表里面更改了相应的了,就是不亮啊,求大神解救 啊0 ~5 N0 v% O7 v0 V0 i9 r" b! @$ N. X
收藏 评论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 编辑 6 o  [0 q( c$ h$ N: v/ F$ s0 E0 J

4 ?: l8 L8 ^9 i这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点% I2 ?; w/ c* t. z1 G9 w7 k2 y( G
给你一个我的初始化代码,系统时钟16M,4分频,定时1ms,每1ms进一次中断。这是可以用的
6 f  p6 O; U; W        CLK->PCKENR1|=0x20;$ g0 N# s" S3 \
        TIM2->ARRH=0x0f;) c  w& H" R. G% l
        TIM2->ARRL=0xa0;" H6 b* s( M9 X( ?
        TIM2->CNTRH=0x00;2 {- V, r; p: w8 k
        TIM2->CNTRL=0x00;9 s( R  ?3 e4 H( z/ J4 R
        TIM2->PSCR=0x02;# k" M9 M8 U9 K3 l
        TIM2->CR1=0x80;+ Z$ y! p" k' r" `# V0 Z
        TIM2->EGR=0x00;
- i9 q9 b8 w' F6 \' k% w) U        TIM2->IER|=0x01;7 e0 q6 B9 T: ^+ e
        TIM2->CR1|=0x01;
+ |: O7 C% q0 ~6 p' k你根据自己的项目,把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 prescaler9 L! o6 J! C; ^  {
counter is also cleared.
lemenshen 回答时间:2015-5-8 16:24:33
zhuoyemp4 发表于 2015-5-8 16:01
  p# g9 i+ ~8 U. h& p其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...

. O- ?9 ^2 @4 R9 J) _# G我重新写了一遍,又出现新的问题啊,compile没有问题,但在build的时候出现错误#error cpstm8 stm8_interrupt_vector.c:38(29+23) invalid pointer initializer ; S) z. }7 D# p1 p* `1 [& C
为什么会这样呢?都没变啊?
lemenshen 回答时间:2015-5-8 16:25:51
zhuoyemp4 发表于 2015-5-8 16:01
9 k7 S- d( I9 d" y( v3 T: I0 X其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
! T1 x# n5 Y' e$ t9 ^+ M# S
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
lemenshen 回答时间:2015-5-8 16:27:05
zhuoyemp4 发表于 2015-5-8 16:01+ Q# Y7 u  _8 d' f6 {6 v
其实咱俩的初始化主要不同在于EGR寄存器UG位,我的是0,你的是1,是1那就意味着Re-initializes the counter ...
' r! Y, J1 O7 w9 ~( v
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
zhuoyemp4 回答时间:2015-5-8 16:39:49
lemenshen 发表于 2015-5-8 16:279 l$ t5 Z2 s% x( n" e2 F
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打 ...
, u: Z  Q7 J6 k, `% h
我都是烧HEX文件的
# {* |% }' Z& @S19没弄过
lemenshen 回答时间:2015-5-8 16:42:33
zhuoyemp4 发表于 2015-5-8 16:39
$ j- o. Y& a6 E+ M! a  {& {, O我都是烧HEX文件的
* ]: o, y+ ?: _% SS19没弄过

, ^0 I0 R0 k' R4 k# kHEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
zhuoyemp4 回答时间:2015-5-8 16:44:12
lemenshen 发表于 2015-5-8 16:428 v+ o  A7 ^2 A0 G
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有 ...

# L! t; c- Z# vqq多少,我加你
zhuoyemp4 回答时间:2015-5-8 16:46:59
你用的什么编译器?
lemenshen 回答时间:2015-5-8 16:48:35
zhuoyemp4 发表于 2015-5-8 16:44" _, K; U: n8 C! }4 r3 I& n6 \
qq多少,我加你
, Z6 T! W7 ]0 C  |- {; A3 j; O9 z5 x
891168340  谢谢你啊

所属标签

相似分享

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