|
STM32F103T8, Ride7, ШИМ на PB7 |
|
|
|
Aug 17 2010, 09:23
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(AHTOXA @ Aug 17 2010, 15:14)  А куда делась строка Код RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); ? ...остальные: последний файл хеадер:
|
|
|
|
|
Aug 17 2010, 09:54
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
И, кстати, откуда вдруг появилась строка Код AFIO->MAPR|=0x00001000; ? Вам же не нужен ремап. Вы что, методом научного тыка пытаетесь запустить PWM?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 17 2010, 10:15
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(AHTOXA @ Aug 17 2010, 15:50)  Да не. Где вызов этой функции? В файле "stm32f10x_rcc" Цитата(AHTOXA) И, кстати, откуда вдруг появилась строка Код AFIO->MAPR|=0x00001000;
? Вам же не нужен ремап. Вы что, методом научного тыка пытаетесь запустить PWM? ...  я уж и не знаю что делать. Подозреваю, что что-то до настроек таймера не сделал. Цитата(adnega @ Aug 17 2010, 15:52)  Попробывал код из сообщения #8. Все работает и в симуляторе (Keil) и в железе (STM32F103T8U6)! здесь не полный код. Нет настроек каких-то,которые идут до таймера.
|
|
|
|
|
Aug 17 2010, 10:58
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(AndreyKeil @ Aug 17 2010, 14:15)  здесь не полный код. Нет настроек каких-то,которые идут до таймера. Здесь достаточный код для генерации ШИМ сигнала на ноге PB7 указанного МК) А Вы его уже запускали? Достаточно: 1. Включить тактовые частоты таймера, порта, альтернативных функций; 2. Настроить порт на альтернативную функцию; 3. Настроить таймер на генерацию ШИМ; 4. Зациклится на месте. 0. Не использовать библиотеку от ST (опционально)
|
|
|
|
|
Aug 17 2010, 11:30
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(AndreyKeil @ Aug 17 2010, 16:15)  В файле "stm32f10x_rcc" У-у-у, как всё запущено  В файле stm32f10x_rcc.c - не вызов, а определение этой функции. Давайте по порядку. Вот наш main(): Код void main() { // 1. Инициализируем клоки: RCC_Configuration();
// 2. Инициализируем контроллер прерываний: NVIC_Configuration();
// 3. Включаем порт B: RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
// 4. Включаем альтернативные функции: RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
// 5. Включаем таймер4: RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
// 6. Сконфигурируем ногу PB7 как альтернативный output: GPIOB->CRL=0xB0000000;
// 7. Теперь займёмся конфигурированием таймера: TIM4->CR1 = TIM_CR1_ARPE; // считаем вверх, автоперезагрузка, без делителя TIM4->CR2 = 0; // здесь ничего не нужно TIM4->ARR = 36; // период таймера TIM4->PSC = 0; // прескалер TIM4->EGR = TIM_EGR_UG; // обновим прескалер немедленно
// 8. А теперь сконфигурим 2й канал таймера: TIM4->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P); // отключим вывод TIM4->CCR2 = 18; // период TIM4->CCMR1 = TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE; // PWM 1 (0x6000), предзагрузка; TIM4->CCER |= TIM_CCER_CC2E; // включаем вывод 2
// 9. И, наконец, запустим таймер: TIM4->CR1 |= TIM_CR1_CEN; } И всё!
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 17 2010, 20:15
|
Частый гость
 
Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118

|
А это - не то, что требуется? Код /******************************************************************************* * Function Name : RCC_SYSCLKConfig * Description : Configures the system clock (SYSCLK). * Input : - RCC_SYSCLKSource: specifies the clock source used as system * clock. This parameter can be one of the following values: * - RCC_SYSCLKSource_HSI: HSI selected as system clock * - RCC_SYSCLKSource_HSE: HSE selected as system clock * - RCC_SYSCLKSource_PLLCLK: PLL selected as system clock * Output : None * Return : None *******************************************************************************/ void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource) { u32 tmpreg = 0;
/* Check the parameters */ assert(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
tmpreg = RCC->CFGR;
/* Clear SW[1:0] bits */ tmpreg &= CFGR_SW_Mask;
/* Set SW[1:0] bits according to RCC_SYSCLKSource value */ tmpreg |= RCC_SYSCLKSource;
/* Store the new value */ RCC->CFGR = tmpreg; }
--------------------
ASB
|
|
|
|
|
Aug 18 2010, 02:34
|
Частый гость
 
Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118

|
Цитата(Aleksandr Baranov @ Aug 17 2010, 16:15)  А это - не то, что требуется? Код /******************************************************************************* * Function Name : RCC_SYSCLKConfig * Description : Configures the system clock (SYSCLK). * Input : - RCC_SYSCLKSource: specifies the clock source used as system * clock. This parameter can be one of the following values: * - RCC_SYSCLKSource_HSI: HSI selected as system clock * - RCC_SYSCLKSource_HSE: HSE selected as system clock * - RCC_SYSCLKSource_PLLCLK: PLL selected as system clock * Output : None * Return : None *******************************************************************************/ void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource) { u32 tmpreg = 0;
/* Check the parameters */ assert(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
tmpreg = RCC->CFGR;
/* Clear SW[1:0] bits */ tmpreg &= CFGR_SW_Mask;
/* Set SW[1:0] bits according to RCC_SYSCLKSource value */ tmpreg |= RCC_SYSCLKSource;
/* Store the new value */ RCC->CFGR = tmpreg; } И еще кусок из void RCC_DeInit(void): Код /* Set HSION bit */ RCC->CR |= (u32)0x00000001;
/* Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], ADCPRE[1:0] and MCO[2:0] bits*/ RCC->CFGR &= 0xF8FF0000; /* Reset HSEON, CSSON and PLLON bits */ RCC->CR &= 0xFEF6FFFF;
--------------------
ASB
|
|
|
|
|
Aug 18 2010, 07:45
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Решил оставить в покое ШИМ и выдать простой меандр на ту же ножку PB7. Сконфигурил ее на выход и вот что получилось: ..и все равно не работает
Прикрепленные файлы
Aok_mn.txt ( 7.43 килобайт )
Кол-во скачиваний: 97
|
|
|
|
|
Aug 18 2010, 18:15
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Нашел ошибку У меня была строчка: GPIOB->CRL|=0xB0000000; //выход 50МГц, общее назначение вывода После сброса в регистре GPIOB_CRL не нулевое значение,поэтому я получал не то что хотел. Правильное значение: GPIOB->CRL=0xB0000000; //выход 50МГц, альтернативная функция push-pull. После этой строчки ШИМ появился. Большое спасибо всем ответившим за помощь!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|