2016-02-08 08:03 AM
Hi,
I'm having an issue setting up TIM1 for PWM on the STM32F446.In the following code, the PWM works for TIM2 but not for TIM1.Any ideas?Thank you. RCC->APB1ENR |= (1UL << 0); // TIM2 clock enable TIM2->PSC = 89; // set prescaler = 1 MHz TIM2->ARR = 999; // set auto-reload = for 1 kHz TIM2->CCR2 = 15; // 1.5% duty cycle TIM2->CCMR1 |= 0x6800; TIM2->CR1 |= 0x80; TIM2->CCER |= 0x10; TIM2->EGR |= 0x01; TIM2->CR1 |= 0x01; RCC->AHB1ENR |= (1UL << 0); // GPIOA clock enable GPIOA->MODER |= (2UL << 2*1); // PA1 - is alt function GPIOA->OSPEEDR |= (3UL << 2*1); // PA1 - is high speed GPIOA->AFR[0] |= (1 << 4); // PA1 - AF1 mapping //================================================================ RCC->APB2ENR |= (1UL << 0); // TIM1 clock enable TIM1->PSC = 179; // set prescaler = 1 MHz TIM1->ARR = 999; // set auto-reload = for 1 kHz TIM1->CCR2 = 15; // 1.5% duty cycle TIM1->CCMR1 |= 0x6800; TIM1->CR1 |= 0x80; TIM1->CCER |= 0x10; TIM1->EGR |= 0x01; TIM1->CR1 |= 0x01; RCC->AHB1ENR |= (1UL << 0); // GPIOA clock enable GPIOA->MODER |= (2UL << 2*9); // PA9 - is alt function GPIOA->OSPEEDR |= (3UL << 2*9); // PA9 - is high speed GPIOA->AFR[1] |= (1 << 4); // PA9 - AF1 mapping2016-02-08 08:11 AM
Ah, the classical TIM1/TIM8 gotcha #1.
Set TIMx_BDTR.MOE. JW2016-02-08 08:32 AM
Do you love magic numbers? Why?
This code is not readable.2016-02-08 08:44 AM
Thank you, that was the issue, now working.
Well I started using STM32 back in 2009 when there was no HAL/CMIS stuff as far as I know. And I prefer setting values directly to registers (Although I do usually set #defines and is a bit better than this code I posted which was done in a hurry to see if it works).I really don't like HAL code where it has to run though so many lines of code (and jump through functions) just to set the value for 1 register (it is actually very hard to follow never mind the penalty in CPU time). Also, I never use STM's Init functions that you need to pass Init structures to, I like more control over what I'm doing.2016-02-08 08:52 AM
Use CMSIS vendor file for bits definition.