|
ШИМ в STM32F4 |
|
|
|
Aug 13 2012, 11:45
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098

|
Всем привет!Битый час сижу и не могу настроить ШИМ( Пытаюсь настроить шим на ноге РА2, вроде все сделал как в даташите, но............. Код //***********TIM2*************** RCC->APB1ENR |=RCC_APB1ENR_TIM2EN; // тактирование таймера GPIOA->MODER |=0x4; TIM2->CR1 |= TIM_CR1_CMS; // выравнивание по центру TIM2->PSC = 16000-1; TIM2->ARR = 0xFF; // счетный регистр (период шима) TIM2->CCMR2 |= TIM_CCMR2_OC3CE; // ! TIM2->CCMR2 |= TIM_CCMR2_OC3M; // инвертированный шим TIM2->CCER |= TIM_CCER_CC3E; // разрешаем таймеру использование ШИМ TIM2->CR1 |= TIM_CR1_CEN; // запуск таймера TIM2->CR1 |= TIM_CR1_ARPE; // разрешаем перезагрузку ARR TIM2->CCR3 =0x1F; Я правильно понимаю?, чтобы запустить шим на ноге РА2(канал СН3) мне нужно работать с регистроми CCMR2, ну и CCR3 !
Сообщение отредактировал stm32f4 - Aug 13 2012, 11:47
|
|
|
|
|
 |
Ответов
|
Aug 14 2012, 10:23
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098

|
Цитата(adnega @ Aug 14 2012, 13:39)  Код GPIOA->AFR[1] Нужно GPIOA->AFR[0] Воу, работает! По видимому, это глупый вопрос, но все же! Если чесн то я не оч понимаю что этот регистр вообще делает( что означают все эти значения? Код AFRLy selection: 0000: AF0 0001: AF1 0010: AF2 0011: AF3 0100: AF4 0101: AF5 0110: AF6 0111: AF7 1000: AF8 1001: AF9 1010: AF10 1011: AF11 1100: AF12 1101: AF13 1110: AF14 1111: AF15
|
|
|
|
|
Aug 14 2012, 11:25
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(stm32f4 @ Aug 14 2012, 14:23)  Воу, работает! По видимому, это глупый вопрос, но все же! Если чесн то я не оч понимаю что этот регистр вообще делает( что означают все эти значения? Это не глупый, а правильный вопрос (которого от Вас ждут второй день). Набор регистров AFR выбирает для пина необходимую альтернативную функцию. Например, на выбранном Вами пине PA2 "сидит" еще: - TIM2_CH3; - TIM5_CH3; - TIM9_CH14 - USART2_TX; - ETH_MDIO. Каким образом камень узнает, что вы хотите видеть на пине PA2? Никаким! Для этого Вы настраиваете PA2 для работы, скажем, с TIM2_CH3 (а это AF1) в регистре альтернативных функций AFR. Поглядеть на каком пине что сидит и номер альтернативной функции можно в datasheet в таблице "Alternate function mapping". Справедливости ради замечу, что раньше выбор той или иной альтернативной функции определялся тактированием того или иного периферийного узла и не было возможности частично задействовать некоторые пины в группе выводов для SPI, а некоторые для TIMER. От этого errata у STM32F1xx разрасталась. И слава Инженерам STM, что в F4 нет такого гемора.
|
|
|
|
|
Aug 14 2012, 12:58
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098

|
Цитата(adnega @ Aug 14 2012, 15:25)  Это не глупый, а правильный вопрос (которого от Вас ждут второй день).
Набор регистров AFR выбирает для пина необходимую альтернативную функцию. Например, на выбранном Вами пине PA2 "сидит" еще: - TIM2_CH3; - TIM5_CH3; - TIM9_CH14 - USART2_TX; - ETH_MDIO.
Каким образом камень узнает, что вы хотите видеть на пине PA2? Никаким!
Для этого Вы настраиваете PA2 для работы, скажем, с TIM2_CH3 (а это AF1) в регистре альтернативных функций AFR. Поглядеть на каком пине что сидит и номер альтернативной функции можно в datasheet в таблице "Alternate function mapping".
Справедливости ради замечу, что раньше выбор той или иной альтернативной функции определялся тактированием того или иного периферийного узла и не было возможности частично задействовать некоторые пины в группе выводов для SPI, а некоторые для TIMER. От этого errata у STM32F1xx разрасталась. И слава Инженерам STM, что в F4 нет такого гемора. Ого, тк это еще и очень важный регистр) Странно, почему при включении в регистре AFR, любого, второго ШИМ-а, МК начинает себя вести фантастическим образом. Все зависает!!! кроме того ШИМ-а, которому последним установили AFR. Код //***********TIM2*************** RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // тактирование таймера GPIOA->MODER |= 0x20; // Alternate function mode GPIOA->AFR[0] |= (1 << (2 * 4)); // TIM2->CR1 |= TIM_CR1_CMS; // выравнивание по центру TIM2->PSC = 0; TIM2->ARR = 1000; // счетный регистр (период шима) TIM2->CCMR2 |= TIM_CCMR2_OC3CE; // ! TIM2->CCMR2 |= TIM_CCMR2_OC3M; // инвертированный шим TIM2->CCER |= TIM_CCER_CC3E; // разрешаем таймеру использование ШИМ TIM2->CR1 |= TIM_CR1_ARPE; // разрешаем перезагрузку ARR TIM2->CCR3 =222; //----------------- GPIOA->MODER |= 0x2; // Alternate function mode GPIOA->AFR[0] |= 1; // TIM2->CCMR1 |= TIM_CCMR1_OC1M; // инвертированный шим TIM2->CCER |= TIM_CCER_CC1E; // разрешаем таймеру использование ШИМ TIM2->CCR1 = 22; TIM2->CR1 |= TIM_CR1_CEN; // запуск таймера
Сообщение отредактировал stm32f4 - Aug 14 2012, 12:59
|
|
|
|
|
Aug 14 2012, 16:27
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(stm32f4 @ Aug 14 2012, 16:58)  Ого, тк это еще и очень важный регистр) Странно, почему при включении в регистре AFR, любого, второго ШИМ-а, МК начинает себя вести фантастическим образом. Все зависает!!! кроме того ШИМ-а, которому последним установили AFR. Код //----------------- GPIOA->MODER |= 0x2; // Alternate function mode GPIOA->AFR[0] |= 1; // TIM2->CCMR1 |= TIM_CCMR1_OC1M; // инвертированный шим TIM2->CCER |= TIM_CCER_CC1E; // разрешаем таймеру использование ШИМ TIM2->CCR1 = 22; TIM2->CR1 |= TIM_CR1_CEN; // запуск таймера Может Вы запустили ШИМ на ноге PA0, которая в STM32F4DISCOVERY соединена с питанием через резистор (330 Ом) и конденсатор (100 нФ)?
|
|
|
|
|
Aug 15 2012, 10:50
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098

|
Цитата(adnega @ Aug 14 2012, 20:27)  Может Вы запустили ШИМ на ноге PA0, которая в STM32F4DISCOVERY соединена с питанием через резистор (330 Ом) и конденсатор (100 нФ)? Спасибо большое за помощь, Вы снова оказались правы)
Сообщение отредактировал stm32f4 - Aug 15 2012, 10:54
|
|
|
|
Сообщений в этой теме
stm32f4 ШИМ в STM32F4 Aug 13 2012, 11:45 sidy Тактирование порта GPIOA разрешено? Счет таймера T... Aug 13 2012, 15:21 stm32f4 Цитата(sidy @ Aug 13 2012, 19:21) Тактиро... Aug 13 2012, 15:22  adnega Цитата(stm32f4 @ Aug 13 2012, 19:22) угу)... Aug 13 2012, 15:33   stm32f4 Цитата(adnega @ Aug 13 2012, 19:33) Да ну... Aug 13 2012, 16:11    adnega Цитата(stm32f4 @ Aug 13 2012, 20:11) ну ч... Aug 13 2012, 16:35     stm32f4 Цитата(adnega @ Aug 13 2012, 20:35) Вы же... Aug 14 2012, 09:24 BlackOps тут небольшой вопрос хотел бы уточнить, чтоб новой... Aug 23 2012, 05:11 BlackOps мне кажется что клок таймера ТИМ3 = клок периферии... Aug 23 2012, 06:23 adnega Цитата(BlackOps @ Aug 23 2012, 10:23) мне... Aug 23 2012, 07:08 BlackOps ясно, спасибо. Aug 23 2012, 07:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|