Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А куда делась строка RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); ? ...остальные: последний файл хеадер: stm32f10x_gpio.txt stm32f10x_rcc.txt stm32f10x_gpio.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Да не. Где вызов этой функции? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Попробывал код из сообщения #8. Все работает и в симуляторе (Keil) и в железе (STM32F103T8U6)! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба И, кстати, откуда вдруг появилась строка AFIO->MAPR|=0x00001000; ? Вам же не нужен ремап. Вы что, методом научного тыка пытаетесь запустить PWM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Да не. Где вызов этой функции? В файле "stm32f10x_rcc" И, кстати, откуда вдруг появилась строка Код AFIO->MAPR|=0x00001000; ? Вам же не нужен ремап. Вы что, методом научного тыка пытаетесь запустить PWM? ... я уж и не знаю что делать. Подозреваю, что что-то до настроек таймера не сделал. Попробывал код из сообщения #8. Все работает и в симуляторе (Keil) и в железе (STM32F103T8U6)! здесь не полный код. Нет настроек каких-то,которые идут до таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба здесь не полный код. Нет настроек каких-то,которые идут до таймера. Здесь достаточный код для генерации ШИМ сигнала на ноге PB7 указанного МК) А Вы его уже запускали? Достаточно: 1. Включить тактовые частоты таймера, порта, альтернативных функций; 2. Настроить порт на альтернативную функцию; 3. Настроить таймер на генерацию ШИМ; 4. Зациклится на месте. 0. Не использовать библиотеку от ST (опционально) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба В файле "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; } И всё! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Я понял все с таймером(ШИМом). Спасибо. Теперь напишите подробнее, как сконфигурироваться от внутреннего HSI. Как сконфигурировать внутренние частоты. Заранее спасибо. То есть, интересует процедура RCC_Configuration(). В примерах что-то не нашел конфигурацию от внутреннего источника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А это - не то, что требуется? /******************************************************************************* * 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба А это - не то, что требуется? /******************************************************************************* * 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Сегодня узнал интересную особенность. Я отлаживаю программу в режиме симуляции. Я загружаю код в Ride7 и хочу увидеть там ШИМ в пошаговом режиме, а его там нет. Так вот мне сказали, среда Ride7 не покажет ШИМ.Так что смотреть надо на реальном контроллере. Может быть у меня уже получался ШИМ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Решил оставить в покое ШИМ и выдать простой меандр на ту же ножку PB7. Сконфигурил ее на выход и вот что получилось: ..и все равно не работает :laughing: Aok_mn.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Нашел ошибку :rolleyes: У меня была строчка: GPIOB->CRL|=0xB0000000; //выход 50МГц, общее назначение вывода После сброса в регистре GPIOB_CRL не нулевое значение,поэтому я получал не то что хотел. Правильное значение: GPIOB->CRL=0xB0000000; //выход 50МГц, альтернативная функция push-pull. После этой строчки ШИМ появился. Большое спасибо всем ответившим за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 19 августа, 2010 Опубликовано 19 августа, 2010 · Жалоба Ура! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться