最近做了一个电路,TIM1的通道1PWM输出,TIM1的通道2PWM输入,捕获高电平时间,通道1的PWM信号转换成三角波后,通过比较器转换成PWM信号。
初始化程序:
TIM1_ARRH = 0xff; //分频
TIM1_ARRL = 0xff;
TIM1_PSCRH = 0;
TIM1_PSCRL = 14;
TIM1_CCR1H = 0; //占空比
TIM1_CCR1L = 0;
TIM1_CCMR1_OC1M = 6; //PWM模式1
TIM1_CCMR1_OC1PE = 1; //开启TIM1_CCR1寄存器的预装载功能
TIM1_CCER1_CC2E = 0; //禁止通道2
TIM1_CCMR2_CC2S = 1; //通道2输入,TI2FP2
TIM1_CCER1_CC2P = 0; //高电平有效
TIM1_CCMR2 &= 0x03; //捕获滤波、分频
//TIM1_SMCR_TS = 6; //滤波后的定时器输入2(TI2FP2)
//TIM1_SMCR_SMS = 4;
//000:时钟/触发控制器禁止 – 如果CEN=1,则预分频器直接由内部时钟驱动。
//001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。
//010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。
//011:编码器模式3 – 根据另一个输入的电平,计数器在TI1FP1和TI2FP2的边沿向上/下计数。
//100:复位模式 – 在选中的触发输入(TRGI)的上升沿时重新初始化计数器,并且产生一个更新寄存器的信号。
//101:门控模式 – 当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计数器停止(但不复位)。计数器的启动和停止都是受控的。
//110:触发模式 – 计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控的。
//111:外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器。
// TIM1_EGR_UG = 1; //用于产生更新事件
TIM1_CCER1_CC1P = 0; //OC1高电平有效
TIM1_CCER1_CC1E = 1; //开启OC1信号输出到对应的输出引脚,其输出电平依赖于MOE,OSSI,OSSR,OIS1,OIS1N和CC1NE位的值
TIM1_CCER1_CC1NE = 0; //开启OC1N信号输出到对应的输出引脚,其输出电平依赖于MOE,OSSI,OSSR,OIS1,OIS1N和CC1N位的值
TIM1_OISR_OIS1 = 0;
TIM1_OISR_OIS1N = 0;
TIM1_BKR_OSSR = 0; //定时器不工作时禁止输出
TIM1_BKR_OSSI = 0;
TIM1_CR1_CMS = 0; //边沿对齐模式
TIM1_CR1_DIR = 0; //计数器向上计数
TIM1_CR1_UDIS = 0; //使能更新事件
TIM1_BKR_LOCK = 2;
TIM1_IER_CC2IE = 1; //允许捕获比较2中断
TIM1_CCER1_CC2E = 1; //使能输入捕获
TIM1_CR1_CEN = 1; //使能计数器
TIM1_BKR_MOE = 1; //使能PWM输出
整完之后发现TIM1_CCR2H,L的值很稳定,就比TIM1_CCR1H,L大2,开中断和不开中断一个效果,能进中断,但是SR1,SR2的标志位很诡异,明明是0了还进中断,主程序也能跑到,修改TIM1_SMCR寄存器,不是没有PWM输出了,就是跟以前效果一样,各位大神,有没有人给点意见啊!! |