原子哥我想请教下,STM32f103ZET6是有TIM8定时器的吧?我写了个用TIM8做编码器的接口的程序。
//TIME8 编码器接口模式
//编码器模式初始化
void encoder_Init2()
{
RCC->APB2ENR|=1<<13;//TIM8时钟使能
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRL&=0XF0FFFFFF;//PC6
GPIOC->CRL|=0X04000000;//浮空输入
GPIOC->CRL&=0X0FFFFFFF;//PC7
GPIOC->CRL|=0X40000000;//浮空输入
TIM8->DIER|=1<<0; //允许更新中断
TIM8->DIER|=1<<6; //允许触发中断
MY_NVIC_Init(1,3,TIM8_CC_IRQChannel,2);
/* Timer configuration in Encoder mode */
TIM8->  SC = 0x00;//预分频器
TIM8->ARR = 43008;//设定计数器自动重装值
TIM8->CR1 &=~(3<<8);// 选择时钟分频:不分频
TIM8->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式
TIM8->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1
TIM8->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2
TIM8->CCER &= ~(1<<1); //CC1P='0' IC1FP1不反相,IC1FP1=TI1
TIM8->CCER &= ~(1<<5); //CC2P='0' IC2FP2不反相,IC2FP2=TI2
TIM8->CCMR1 |= 3<<4; // IC1F='1000' 输入捕获1滤波器
TIM8->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
TIM8->CNT = 0x0000; //计数器初始值
TIM8->CR1 |= 1<<0; //CEN=1,使能定时器
}
这个程序是可以运行,因为计数器是可以工作的,但是就是当计数完以后计数器自动重装但不能进入中断。但是这个程序换成TIM4是可以的。为什么TIM8就不能进入中断呢?看了下,TIM4的中断函数是TIM4_IRQChannel,是全局中断,而TIM8有好几个,我每个都试过,但是都不行。想问问这是什么一回事?谢谢! |