TIM1 16位高级控制定时器
高级控制定时器具有不同的用途:
1、基本的定时。
2、测量输入信号的脉冲宽度(输入捕获)
3、产生输出波形(输出比较,PWM和单脉冲模式)
4、对应不同的事件(捕获、比较、溢出、刹车、触发)的中断。
高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。
多达4个独立通道可以配置
1、输入捕获
2、输出比较
3、PWM生成
4、单脉冲模式输出
static void TIM1_Init(void)
{
/* Set the Prescaler value */
TIM1->PSCRH = (u8)(Prescaler_tim1 >> 8);//f_time1 = f_sys/(Prescaler_tim1 + 1)
TIM1->PSCRL = (u8)(Prescaler_tim1);
/* Set the Autoreload value */
TIM1->ARRH = (u8)(0xffff >> 8);
TIM1->ARRL = (u8)(0xffff);
/* Select the Counter Mode */
TIM1->CR1 = (u8)(((TIM1->CR1) & (u8)(~(TIM1_CR1_CMS | TIM1_CR1_DIR))) | TIM1_COUNTERMODE_UP);//控制寄存器
/* Set the Repetition Counter value */
TIM1->RCR = 0;
}
@far @ interrupt void TIM1_CAP_COM_IRQHandler(void)
{
volatile u16 last, width;
volatile static u16 cur;
u8 ret;
/* chn1 interrupt */ //TIM1->IER中断使能寄存器
if ((TIM1->IER & TIM1_IER_CC1IE) && (TIM1->SR1 & TIM1_SR1_CC1IF))
{
TIM1->SR1 &= (u8) (~TIM1_SR1_CC1IF);// TIMA_SR1 TIM1状态寄存器
TIM1->CCER1 ^= TIM1_CCER1_CC1P; //reverse the capture edge
last = cur;
cur = TIM1_GetCapture1();
ir_eng.g_overflow_cnt = 0;
if (ir_eng.g_ir_state == IR_START)
{
/* start to receive wave */
ir_eng.g_ir_state = IR_ING;
return;
}
else if (ir_eng.g_ir_state == IR_ING)
{
width = cur - last;
ret = push_wave(&_irwave, width);
if (ret == 0)
{
/* type ahead upper limit */
ir_eng.g_ir_state = IR_SUCC;
notify(EV_IR_FINISH);
stop_capture();
}
return;
}
}
/* chn1 interrupt */
if ((TIM1->IER & TIM1_IER_CC2IE) && (TIM1->SR1 & TIM1_SR1_CC2IF))
{
TIM1->SR1 &= (u8) (~TIM1_SR1_CC2IF);
ret = get_nth_width(&_irwave, ir_eng._cur_send_bit, &width);
if ((0x00 == ret) || (ir_eng._cur_send_bit >= ir_eng._cur_wave_bit))
{
stop_compare();
ir_eng.g_ir_state = IR_IDLE;
return;
}
ir_eng._cur_send_bit++;
if (width & 0x8000)
{
pwm_stop();
}
else
{
pwm_start();
}
next_lbl:
cur = TIM1_GetCapture2();
width &= 0x7FFF;
cur += width;
TIM1_SetCompare2(cur);
}
}
TIM1_CR1:TIM1控制寄存器1
TIM1_CR2:TIM1控制寄存器2
TIM1_SMCR:TIM1从模式控制寄存器
TIM1_ETR:TIM1外部触发寄存器
TIM1_IER:中断使能寄存器
TIM1_SR1:状态寄存器1
TIM1_SR2:状态寄存器2
当捕获事件发生时该位由硬件置1,它由软件清0
TIM1_EGR:事件产生寄存器
TIM1_CCMR1:捕获/比较模式寄存器1
TIM1_CCMR2:捕获/比较模式寄存器2
TIM1_CCMR3:捕获/比较模式寄存器3
TIM1_CCMR4:捕获/比较模式寄存器4
TIM1_CCER1:捕获/比较使能寄存器1
TIM1_CCER2:捕获/比较使能寄存器2
TIM1_CNTRH:计数器高8位
TIM1_CNTRL:计数器低8位
TIM1_PSCRH:预分频器高8位
TIM1_PSCRL:预分频器低8位
TIM1_ARRH:自动重装载寄存器高8位
TIM1_ARRL:自动重装载寄存器低8位
当自动重装载的值为空时,计数器不工作。
TIM1_RCR:重复计数寄存器
TIM1_CCR1H:捕获/比较寄存器1高8位
TIM1_CCR1L:捕获/比较寄存器1低8位
TIM1_CCR2H:捕获/比较寄存器2高8位
TIM1_CCR2L:捕获/比较寄存器2低8位
TIM1_CCR3H:捕获/比较寄存器1高8位
TIM1_CCR3L:捕获/比较寄存器1低8位
TIM1_CCR4H:捕获/比较寄存器1高8位
TIM1_CCR4L:捕获/比较寄存器1低8位
TIM1_BKR:刹车寄存器
TIM1_DTR:死区寄存器
TIM1_OISR:输出空闲状态寄存器
上一篇:STM8 I2C的学习
下一篇:STM8中 TIME4寄存器的应用
推荐阅读最新更新时间:2024-03-16 16:05
- 热门资源推荐
- 热门放大器推荐