TIM1 PWM通道12不能输出。但是34通道可以

2019-07-19 20:56发布

TIM1的PWM输出时,通道3、4管用,1、2不管用。
用的是官方库的例子,新建的工程,没有配置复用的问题。请教各位遇到过这种情况吗?是什么原因呢? [mw_shl_code=c,true]void main(void) { TIM1_DeInit(); TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,499,0); /* Channel 1, 2,3 and 4 Configuration in PWM mode */ /* TIM1_OCMode = TIM1_OCMODE_PWM2 TIM1_OutputState = TIM1_OUTPUTSTATE_ENABLE TIM1_OutputNState = TIM1_OUTPUTNSTATE_ENABLE TIM1_Pulse = CCR1_Val TIM1_OCPolarity = TIM1_OCPOLARITY_LOW TIM1_OCNPolarity = TIM1_OCNPOLARITY_HIGH TIM1_OCIdleState = TIM1_OCIDLESTATE_SET TIM1_OCNIdleState = TIM1_OCIDLESTATE_RESET */ TIM1_OC1Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_ENABLE,2000,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH,TIM1_OCIDLESTATE_SET,TIM1_OCNIDLESTATE_RESET); /*TIM1_Pulse = CCR2_Val*/ TIM1_OC2Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 1500, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_RESET); /*TIM1_Pulse = CCR3_Val*/ TIM1_OC3Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 2000, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_RESET); /*TIM1_Pulse = CCR4_Val*/ TIM1_OC4Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE,2000, TIM1_OCPOLARITY_LOW, TIM1_OCIDLESTATE_SET); /* TIM1 counter enable */ TIM1_Cmd(ENABLE); /* TIM1 Main Output Enable */ TIM1_CtrlPWMOutputs(ENABLE); while (1); }[/mw_shl_code]
然后我又在网上搜的别人配置通道1输出的,也是不行 [mw_shl_code=c,true]void Tim1_Init() { /* Set the Autoreload value */ TIM1->ARRH = (uint8_t)(1000 >> 8); //2M/1000=2K TIM1->ARRL = (uint8_t)(1000); /* Set the Prescaler value */ TIM1->SCRH = 0x00; //8分频 16M/8=2M TIM1->SCRL = 0x08; TIM1->CCR1H = (uint8_t)(200 >> 8); // 输出脉宽 TIM1->CCR1L = (uint8_t)(200); // 输出脉宽 TIM1->CCMR1 |= 0x60; // PC1脚PWM输出,PWM模式1 TIM1->CCER1 |= 0x01; // CH1/CH2/ 关闭互补输出;高电平有效输出高; TIM1->IER = 0x00; // 不允许产生更新事件中断 TIM1->CR1 = 0x01; //启动计数器 TIM1->BKR |= 0x80; //使能PWM输出 } void main() { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); asm("sim"); // 关全局中断 Tim1_Init(); //定时器时钟配置 asm("rim"); // 开全局中断 TIM1_CCR1L = 20; while(1) {} } [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。