程序如下,怎么STM8L151的RTC AWU只能实现第一次正常?以后的中断定时时间就不对了、很短、用示波器才能看到、好像定时计数器WUT不能自动重装似的。
请高手指导!
void RTC_AWU()
{
CLK_PCKENR2 |= 0x04; //外设RTC时钟允许,Frtc = Flsi/8 = 38K/8
CLK_CRTCR = 0x04; //CLK_CRTCR[7:5]=000B 则RTC clock source/1
//CLK_CRTCR[4;1]=0010B 则选择LSI
while( (CLK_CRTCR&0x01) == 0x1 ); //CLK_CRTCR[0]=1为忙
//RTC解锁,必须先写0xCA后写0x53
RTC_WPR = 0xCA;
RTC_WPR = 0x53;
RTC_CR2_WUTE = 0; //必须先清专用定时器唤醒允许位,再操作RTC其它寄存器
RTC_CR1 = 0x00; //wakeup时钟选择,RTC_CR1[2:0]=000B则选择 RTCCLK/16
while( RTC_ISR1_WUTWF == 0 ); //等待wakeup时钟允许,即:WUTWF=1为允许
//写定时计数器的值(下向计数的)
// Wakeup周期 = 1/(Frtc/8/16)*(WUT[15:0]+1)
// = 1/(38K/8/16)*(10000+1)
// = 3.368ms*10001 =
RTC_WUTRH = 10000/256;
RTC_WUTRL = 10000%256;
RTC_CR2_WUTIE = 1;
RTC_CR2_WUTE = 1;
asm("RIM");
}
//********************************************************************************
//RTC AWU中断
#pragma vector=0X06
__interrupt void RTC_AWU_vector()
{
RTC_ISR2_WUTF = 0; //清RTC AWU中断标志
LED_out = !PD_IDR_IDR2;
} |
|
RE:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?
RE:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?
回复:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?
有没有其它高级的中断源啊?
没其它中断源,只有这个。
还有STM8L运行的功耗比手册说的要大得多。
回复:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?
RTC闹钟中断,每次都要重新设置下一次中断的时间。
试过了,重装计数时间也不行,手册上说能自动重装计数器的。