以定时器2为例,定时器初始化后,发现第一次进入中断的时间不是定时时间到后才进入的,似乎是20多us 就立即进入了中断。以后的中断时间就正常了。这个可以通过在中断里关闭定时器,只让定时器运行一次,来发现这个问题。
这个还不知道是怎么回事。由于我是要每次定时器只定时一次,只能是在中断里判断进入两次后再关闭定时器。
解决办法是,开启定时器后,先不开中断,死等中断标志,清除标志后再开中断即可。
定时器计数初值由TIM2_EGR 初始化,他会引起更新事件中断,所以第一次中断是不准确的。这和51单片机不同。
/********设置定时器2,是向上计数的,自动和装载值比较******/
void SetTimer2(unsigned short val)
{
TIM2_IER=0x00; //禁止中断
TIM2_SR1=0x00;
TIM2_PSCR=0x01; //2分频 内部RC是16M,默认CLK_DIVR分频8 2M/2= 1M
//TIM2_CNTRH=val/256;//设置计数器寄存器初值
//TIM2_CNTRL=val%256;//这里寄存器根本不用初始化, 下面有初始化计数器TIM2_EGR=0X01; 会自动装载,并引起中断
TIM2_ARRH=val/256; //设置自动装载寄存器
TIM2_ARRL=val%256; //这个值就是计数最大值
TIM2_CR1=0x01; //启动定时器
TIM2_EGR=0x01; //重新初始化计数器,产生新事件,这会引起中断
while((TIM2_SR1&0x01)==0);//第一次更新事件标志会立即进入,所以第一次计数不准,这里等待他
if(TIM2_SR1)
TIM2_SR1=0x00;//清除第一次无效中断
TIM2_IER = 0x01; //开中断
}
/*******************定时器2初始化,比较计数值,自动重装**************************/
void Init_Tim2(void)
{
TIM2_CR1=0x00; //关闭定时器
TIM2_SR1=0x00;
TIM2_PSCR=0x01; //2分频 内部RC是16M,默认CLK_DIVR分频8 2M/2= 1M
TIM2_CNTRH=65530/256; //设置计数器寄存器初值
TIM2_CNTRL=65530%256;//这两个寄存器根本不用初始化,和51不同,由TIM2_EGR 初始化,他会引起中断,所以第一次不准确
TIM2_ARRH=65530/256; //设置自动装载寄存器
TIM2_ARRL=65530%256; //这个值就是计数最大值
TIM2_CR1=0x01;
TIM2_EGR=0x01; //重新初始化计数器,产生新事件
TIM2_IER=0x01; //开启中断
}
/****************定时器2中断****************************/
@far @interrupt void TIM2_UPD_OVF_IRQHandler (void)
{
TIM2_SR1=0x00;
Tim2Cnt++;
if(Tim2Cnt>=2)
{
TIM2_IER=0x00;
TIM2_CR1=0x00; //关闭定时器
PA1_ODR=!PA1_ODR;
Tim2Cnt=0;
AllowSetTim2=1;
}
return;
}
上一篇:STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确
下一篇:STM8定时器TIM1-TIM6使用详解与实验程序
设计资源 培训 开发板 精华推荐
- 东拼西凑一个控温加热板/加热台
- LTC1625,同步 12V 输出降压/升压转换器
- 使用 ON Semiconductor 的 STK403-450 的参考设计
- TDA3676 低压降电压/静态电流 10 V 稳压器的典型应用
- LT1173CN8 高功率、低静态电流降压转换器的典型应用电路
- LTC6990CDCB#TRMPBF 扬声器警报的典型应用。在 500Hz 至 8kHz 范围内使用 RVCO 调制音调
- OM13074: 面向LPC11U37H的LPCXpresso电路板
- 【高速数模转换器】AD9714高速DAC模块
- ADR3425 2.5V 输出微功率、高精度电压基准的典型应用
- ADL5304-EVALZ,用于 ADL5304 高速、200 DB 范围、对数转换器的评估板
- "error LNK2019: unresolved external symbol _HookZwCreateProcess@0 "如何解决?谢谢!
- 购买:mp3+耳机 生产方案:10000元
- 直播 FAQ|富士通FRAM无加密算法(频谱)的真赝验证解决方案
- 基于STM32F303双电机FOC驱动: 无感原理图/BOM表/代码等开源分享
- PT6311器件子程序集
- 發一個自己編寫的 MSP430 LaunchPad 的 PC 端溫度顯示程式 + 源代碼
- 50hz3v左右正弦波变方波
- DIY分享《VLMC激光雕刻机》DIY中........持续更新............
- Q2406B型GPRS模块在三害预防系统中的应用
- 简单的学过画pcb板 现在需要画四层板