|
#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) { . y5 a6 Y' V- ^ TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件 //设置定时器初值 TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0; //设定自动重装寄存器值 //这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。 //如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。 7 t# ~& [% w+ |8 U TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz (1S) TIM2_ARRL=0x12; //0x7A12 31250 意味着每产生一次中断时间为1S I8 O' L; Q, ]/ }5 H TIM2_PSCR=0x07; //分频128 - [7 [1 c" x3 q7 c, D+ ^% v0 m TIM2_IER=0x41; //中断允许位使能 " A; W, s" j+ G* B TIM2_CR1=0x01; //使能计时器 } 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; 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 main()( H7 n7 f* h) c& A+ L# m$ R9 Q { 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" ); Init_Tim2();7 E* {! B0 I$ F, U' C1 @* \9 T) |* v _asm("rim");: c# Z) V" Q+ c; K) ~4 A while (1); y' U) _+ Q) M% u } @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 } 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 |
微信公众号
手机版
这是所有的代码?有没有对系统时钟做初始化?你在中断函数里设置断点,运行看能不能运行到断点4 ^* m7 ^; m ]" f. B! e, r- I
给你一个我的初始化代码,系统时钟16M,4分频,定时1ms,每1ms进一次中断。这是可以用的
CLK->PCKENR1|=0x20;: R% c2 K( |$ t3 o
TIM2->ARRH=0x0f;
TIM2->ARRL=0xa0;
TIM2->CNTRH=0x00;
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了
counter is also cleared.
我重新写了一遍,又出现新的问题啊,compile没有问题,但在build的时候出现错误#error cpstm8 stm8_interrupt_vector.c:38(29+23) invalid pointer initializer " D$ W" p( Y( f
为什么会这样呢?都没变啊?
我在原程序按照你的改了一下,再下载,也是没反应啊~~为什么会这样的呢??
因为我是新手,刚接触STM8芯片,我不知道是不是我打开的方式不对,我写好后就compile,然后build,然后打开STVP,打开.s19后缀的文件,再烧录的,是不是这样的一个步骤呢?
我都是烧HEX文件的
S19没弄过
HEX是怎么生成的啊?也是用STlink下载的吗?难道是我烧.S19文件的问题?看项目里面debug文件夹里面也只有.s19,.,map,.lkf,.elf文件啊,哪一个是hex文件啊?你们学这个的时候从哪里下的教程啊?求解救啊
qq多少,我加你
891168340 谢谢你啊