#include "STM8S103f3p.h". P+ }* T7 L' N& Y #include "stm8s_tim2.h" unsigned char i=0; 2 |$ L" d% g9 T void Init_Tim2(void) " L1 \/ [5 O. K { 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; //设定自动重装寄存器值 , x7 V" k# h' Q //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。 / ^1 X4 `4 W @1 k$ z4 Q- m //如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。 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/ \/ _ } void Init_GPIO(void) {6 {# a7 k, y6 F2 v/ K PD_DDR|=0x04; PD_CR1|=0x04; PD_CR2|=0x00; PD_ODR=0x00; }; F: ^* c0 F# \# u1 S- \4 M main() {8 o* h2 f& k" r, O Init_GPIO();2 d F$ E* P1 {3 S( N! S CLK_PCKENR1=0xFF; _asm("sim" ); Init_Tim2(); _asm("rim");" k; {1 Y. A7 ^ g" e' W- c/ F" _4 C: T } while (1);7 `5 E' g5 \- q } @far @interrupt void TIM2_UPD_OVF_IRQHandler (void); L& u7 Y: |4 n0 Q { i++;* F) g; v; ~. Z# X3 C( A5 K8 S TIM2_SR1=0x00; if(i==61) { 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 } 我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢?都有在vector向量表里面更改了相应的了,就是不亮啊,求大神解救 啊0 ~5 N0 v% O7 v0 V0 i9 r" b! @$ N. X |
这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点% I2 ?; w/ c* t. z1 G9 w7 k2 y( G
给你一个我的初始化代码,系统时钟16M,4分频,定时1ms,每1ms进一次中断。这是可以用的
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;
TIM2->IER|=0x01;7 e0 q6 B9 T: ^+ e
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 ; S) z. }7 D# p1 p* `1 [& C
为什么会这样呢?都没变啊?
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
我都是烧HEX文件的
S19没弄过
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
qq多少,我加你
891168340 谢谢你啊