初始化: 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有可能不变的前提下,程序就会出问题了。不知道大家是否遇到如此奇怪现象! |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
若CC1通道配置为输出(TIM1_CCMR1的CC1S位):
CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。
如果在TIM1_CCMR1寄存器(OC1PE位)中未选择预装载功能,写入的数值会立即传输至当前寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。
当前捕获/比较寄存器的值同计数器TIM1_CNT的值相比较,并在OC1端口上产生输出信号。
若CC1通道配置为输入:
CCR1包含了上一次输入捕获1事件(IC1)发生时的计数器值(此时该寄存器为只读)。
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
我的问题你明白了吗?
回复:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
<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出错? 【悬赏问答】
回复:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
RE:STM8:TIM1,难道寄存器TIM1->CCR,高位不变,低位变化就会COMPARE出错? 【悬赏问答】
TIM1_SetCompare1((capture_data+256));
你把这个函数也贴出来看看