铭天 发表于 2014-5-14 14:51 
问题找到了,选了一个复用功能,糗大了。。。
你好,我现在也是用STM8S103F3P的TIM1_CH1的输入捕获来做红外解码的,进不了输入捕获中断函数,初始化代码为:
void Driver_Time10msON(void)
{
CLK_PCKENR1 |= 0x80; //开TIM1时钟
TIM1_EGR = 0x01; //允许产生更新事件
TIM1_PSCRH = 0x00; //2M时钟 设定计数时钟的分频,计数周期为1us
//TIM1_PSCRL = 0x0f;
TIM1_PSCRL = 0x01; //计数器的时钟频率(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。
//初始化计数器值,设定自动重载寄存器值
/*TIM1_ARRH = 0x04; TIM1_ARRL = 0xe2; TIM1_CNTRH = 0x04; TIM1_CNTRL = 0xe2;*/
TIM1_ARRH = 0x27;
TIM1_ARRL = 0x10;
TIM1_CNTRH = 0x27;
TIM1_CNTRL = 0x10;
TIM1_CR1 = 0x01; //使能计数器
TIM1_IER = 0x01; //允许更新中断
}
void Driver_capture_riseON(void)
{
TIM1_IER&=0xfd; //0 :disable 捕获中断
TIM1_CCMR1|=0x01; //位1:0 CC1S[1:0]01: CC1 channel is configured as input, IC1 is mapped on TI1FP1
TIM1_CCMR1&=0x0f; //位7:4
//TIM1_CCMR1|=0x30; //位7:4 IC1F[3:0]:输入捕获1滤波器,0x11只有连续采样到8个相同的TI1信号,信号才为有效(采样频率为fMASTER)。
TIM1_CCER1&=0xfd; //bit1 cc1p :0 rise或高电平 1 down 或低电平
TIM1_CCMR1&=0xf3; //捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIM1_CCMR1寄存器的IC1PS=00)
// 位3:2 IC1PSC[1:0]:输入/捕获1预分频器 00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
TIM1_CCER1|=0x01; //This bit0 determines if a capture of the counter value can be made in the input capture/compare
//register 1 (TIM1_CCR1) or not. //0: Capture disabled //1: Capture enabled
TIM1_SR1&=0xfd; // 清CC1IF标志位 位1CC1IF:捕获/比较1中断标记
TIM1_SR2=0;
TIM1_IER|=0x02; //bit1 1:enable 0 :disable 捕获中断
}
中断向量表的配置如下: {0x82, Driver_Time_Interrupt}, /* irq11 */
{0x82, Driver_Time_capture_Interrupt}, /* irq12 */
看到你的帖子已经解决了这个输入捕获的问题,能帮我看下吗,最好能提供你这么初始化的代码给我,不胜感激,我的872968469@qq.com
|