打印
[STM32L4]

关于stm32L476的TIM2 输出PWM波形

[复制链接]
2145|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Alisa_song|  楼主 | 2016-7-21 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我配置TIM2的通道输出PWM波形,用寄存器操作的,但是怎么输出一直是个高电平,求高手指点,谢谢!配置程序如下:
void PWM_Timer2_Init(void)
{
GPIO_Pin_Init(PORTA,GPIO_Pin_3,GPIO_MODE_AF_PP,GPIO_PULLUP, GPIO_SPEED_HIGH,AF1);

TIM_TypeDef *Timer = TIM2;
/* Enable the Low Speed APB (APB1) peripheral clock  */
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM2EN;            //__TIM2_CLK_ENABLE()
/* Timer2 control register 1 (TIMx_CR1) */
Timer->CR1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);    // Clear direcion and center aligned mode bits
Timer->CR1 |= TIM_COUNTERMODE_CENTERALIGNED1;
Timer->CR1 &= ~TIM_CR1_CKD;                             // clesr clock division bits
     Timer->CR1 |= TIM_CLOCKDIVISION_DIV1;          // division = 1
// Timer2 prescaler (TIMx_PSC)
Timer->PSC = TIM2_PRESCALER_VALUE;                 // initialize Timer2 prescale value = 1
   
// TIM2 capture/compare mode register 4  (TIMx_CCMR2)
Timer->CCMR2 &= ~TIM_CCMR2_CC4S;                // Capture/Compare Channel4 is configured as output
// Timer->CCMR2 &= ~TIM_CCMR2_OC4PE;           // Output Compare Channel4 Preload disabled, TIMx_CCR1 can be written at anytime
Timer->CCMR2 |=  TIM_CCMR2_OC4PE;                // Output Compare 4 preload enable
Timer->CCMR2 &= ~TIM_CCMR2_OC4M;               // clear Output compare 4 mode
Timer->CCMR2 |=  TIM_CCMR2_OC4M_1;              // OC1M: Output compare 4 mode = 6, PWM mode 1
Timer->CCMR2 |=  TIM_CCMR2_OC4M_2;

Timer->CCER  |=  TIM_CCER_CC4P;
Timer->CCMR2 &=  ~TIM_CCMR2_OC4FE;
Timer->CR2  &=  ~TIM_CR2_OIS1;

Timer->CCMR2 |=  TIM_CCMR2_OC4CE;               // Output Compare Ch4 Clear Enable
     
     // TIM2 auto-reload register (TIM2_ARR)           // initialize PWM frequency
     Timer->ARR = 699;                                        // initialize Timer2 Auto Reload Register
// TIM2 capture/compare register 4 (TIM2_CCR4)          // initialize duty cycle
     Timer->CCR4 = 200;                                       // initialize Timer2 Capture/Compare Register 4
     
// TIM2 control register 1 (TIMx_CR1)   
     Timer->CR1 |= TIM_CR1_CEN;         // Timer2 enable
     // TIM2 capture/compare enable register (TIMx_CCER)
Timer->CCER = Timer->CCER |=  TIM_CCER_CC4E;
}
沙发
mmuuss586| | 2016-7-21 19:18 | 只看该作者
寄存器一下子看不出来;
换成库函数试下,再一句句对比,是不是少了什么没操作;

使用特权

评论回复
板凳
Alisa_song|  楼主 | 2016-7-22 08:54 | 只看该作者
mmuuss586 发表于 2016-7-21 19:18
寄存器一下子看不出来;
换成库函数试下,再一句句对比,是不是少了什么没操作; ...

版主,你好,谢谢你的回复,我也感觉用库函数的会好看许多,但是想在做的这个项目是用寄存器开发的,我也和网上的用库开发的例子比较了,没发现什么不对,但是看输出始终就是输出高电平!不知楼主有没有做过stm32L4的 ,能否帮忙看看,谢谢!

使用特权

评论回复
地板
Li-ion| | 2016-7-22 08:59 | 只看该作者
端口设置为推挽输出啊  
现在代码是上拉?

使用特权

评论回复
5
Alisa_song|  楼主 | 2016-7-22 10:40 | 只看该作者
Li-ion 发表于 2016-7-22 08:59
端口设置为推挽输出啊  
现在代码是上拉?

谢谢你的回复,那就是不应该上拉对吗?我试试看!感谢

使用特权

评论回复
6
xmshao| | 2016-7-22 10:50 | 只看该作者
配置代码的确没看出啥问题,
确认下硬件线路和管脚,也别搞错脚位置了。

使用特权

评论回复
7
Alisa_song|  楼主 | 2016-7-22 15:18 | 只看该作者
xmshao 发表于 2016-7-22 10:50
配置代码的确没看出啥问题,
确认下硬件线路和管脚,也别搞错脚位置了。 ...

问题找到了,是一个要开启的标志位没有enable,谢谢支持!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

94

帖子

1

粉丝