#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 void Init_Tim2(void) ) k0 u M8 L/ Q0 d6 L+ I { TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件 ( w3 W7 a5 R0 Q* d/ v+ }7 U0 D //设置定时器初值 TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0; //设定自动重装寄存器值 6 ]7 F2 p! }$ g& N //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。 //如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; //中断允许位使能 TIM2_CR1=0x01; //使能计时器 $ h6 E' C l( v6 n } 9 j+ a) p& B" y$ J$ |$ F+ u. x void 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; PD_ODR=0x00; }& n( o, |1 i; H1 e" t main() { Init_GPIO(); CLK_PCKENR1=0xFF; _asm("sim" );4 y7 f) K" W2 c! V) b3 B Init_Tim2(); _asm("rim");9 v. q+ v2 N9 J9 z& J, ` while (1); } + 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 { i++; TIM2_SR1=0x00;8 p5 [( f' e* @/ M' f0 o( J4 C) K if(i==61) { 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 我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢?都有在vector向量表里面更改了相应的了,就是不亮啊,求大神解救 啊 |
这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点" 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;
TIM2->CNTRL=0x00;
TIM2->PSCR=0x02;
TIM2->CR1=0x80;
TIM2->EGR=0x00;
TIM2->IER|=0x01;, b) @% V+ W! j# ~5 {0 Y
TIM2->CR1|=0x01;
你根据自己的项目,把ARRH,ARRL,PSCR,改一下就OK了
counter is also cleared.
我重新写了一遍,又出现新的问题啊,compile没有问题,但在build的时候出现错误#error cpstm8 stm8_interrupt_vector.c:38(29+23) invalid pointer initializer 7 F! C" [7 C3 r; y$ z5 v
为什么会这样呢?都没变啊?
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
我都是烧HEX文件的8 f- r$ i2 Z! f; \7 K+ g2 p
S19没弄过
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
qq多少,我加你
891168340 谢谢你啊