STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
初始化:void TIM1_Init(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(7,TIM1_COUNTERMODE_UP,65535,0);
TIM1_PrescalerConfig(7,TIM1_PSCRELOADMODE_IMMEDIATE);
TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
TIM1_OC1Init(TIM1_OCMODE_TIMING, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 1000, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);
TIM1_OC1PreloadConfig(DISABLE);
TIM1_ITConfig(TIM1_IT_CC1,ENABLE);
TIM1_Cmd(ENABLE);
}
比较中断函数:
#ifdef _COSMIC_
@far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
#else /* _RAISONANCE_ */
void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) interrupt 11
#endif /* _COSMIC_ */
{
capture_data=TIM1_GetCounter();
if(TIM1_GetITStatus(TIM1_IT_CC1))
{
TIM1_SetCompare1((capture_data+256)); // TIM1_SetCompare1((capture_data+255));
TIM1_ClearITPendingBit(TIM1_IT_CC1);//RESET_CCR1_INT_FLAG;
LED_XOR;
}
}
经测试,中断函数中 TIM1_SetCompare1((capture_data+256));正确; TIM1_SetCompare1((capture_data+255));错误!
调用的结果是不一样的。也就是TIM1->CCR1H有可能不变的前提下,程序就会出问题了。不知道大家是否遇到如此奇怪现象!
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
CCR1: 捕获/比较1的高8位值若CC1通道配置为输出(TIM1_CCMR1的CC1S位):
CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。
如果在TIM1_CCMR1寄存器(OC1PE位)中未选择预装载功能,写入的数值会立即传输至当前寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。
当前捕获/比较寄存器的值同计数器TIM1_CNT的值相比较,并在OC1端口上产生输出信号。
若CC1通道配置为输入:
CCR1包含了上一次输入捕获1事件(IC1)发生时的计数器值(此时该寄存器为只读)。:D
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
我的配置使用的是Output compare mode ,用来定时用的,代表一定的时间到来。 我要得就是能随时更新CCR1里面的数值,以达到任意定时的效果——TIM1_OC1PreloadConfig(DISABLE);就是未选择预装载功能,每次MATCH的时候,先把COUNTER读出来,加上所需要的延时时间,写入CCR1中去,使得下次能够再MATH,以达到我所要求的定时时间,问题就是写入CCR1值的时候,当高位不变,仅低位变就存在写错的问题——这里我是通过LED灯的变化测试出来的,程序我无法确切定位。如我的时基是1US,我定时256US(100H),高位变了,就OK,如果定时小于等于255(FFH),则出错!我的问题你明白了吗?
回复:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
:o楼上的,我不太明白你得意思,我把我的问题重新阐述一下:<span style="font-size: medium">我的配置,可以看出来用的是OUTPUT COMPARE MODE,其实起了一个定时作用,用CCR1里的值和COUNTER进行MATCH,我用TIM1_OC1PreloadConfig(DISABLE);就是想直接更改CCR1的数值,在每次MATCH中断 的时候,读COUNTER的数值,写入CCR1的新数值,写入的数值没能使高位TIM1->CCR1H发生变化,就出问题了——当然程序无法确切定位,只能通过LED灯用示波器测试来判断,如写入100H,CCR1H变化了,就OK,写入
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。回复:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
你写入数值后用软件设置更新事件试试看RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
会不会跟你这个函数有关系呢?TIM1_SetCompare1((capture_data+256));
你把这个函数也贴出来看看
页:
[1]