Auratos 0 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба Добрый день. У меня контроллер STM32F107RCT6. Хочу сделать тактовый генератор на таймере TIM1 (на 1-й канал выдавать частоту). Вроде все инициализировал (таймер, ножку PA8 для Ch1), а на ножке все равно глухо. Частота кварца 72MГц. Т.е. при текущей настройке на выходе должна быть частота 100Гц. Подскажите, пожалуйста, в чем может быть загвоздка? С контроллером серии STM32L100 у меня получалось, там просто некоторые структуры библиотечные выглядят немного иначе. А вот с этим контроллером никак int main( void) { TIM_TimeBaseInitTypeDef timer; TIM_OCInitTypeDef TIM_OCConfig; SystemCoreClockUpdate (); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN, ENABLE); GPIO_mInit(GPIO_Speed_10MHz, GPIO_Mode_AF_PP, GPIOA, GPIO_Pin_8); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructInit(&timer); timer.TIM_Prescaler = 11000; timer.TIM_Period = 65; TIM_TimeBaseInit(TIM1, &timer); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_OCStructInit(&TIM_OCConfig); TIM_OCConfig.TIM_OCMode = TIM_OCMode_Toggle; TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable; TIM_OC1Init(TIM1, &TIM_OCConfig); TIM_Cmd(TIM1, ENABLE); // Включение таймера TIM1_CH1(F1) while(1) { wdt_reset(); // сброс WDT } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба Частота кварца 72MГц. Видимо ну очень редкий кварц! :biggrin: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба А как включить бит MOE в TIMx_BDTR ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба А как включить бит MOE в TIMx_BDTR ? "TIM1->BDTR |= TIM_BDTR_MOE;"? Вот эти зубодробительные инициализации при помощи "полезных" библиотек только всё запутывают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба Добрый день. У меня контроллер STM32F107RCT6. Хочу сделать тактовый генератор на таймере TIM1 (на 1-й канал выдавать частоту). Вроде все инициализировал (таймер, ножку PA8 для Ch1), а на ножке все равно глухо. Частота кварца 72MГц. Т.е. при текущей настройке на выходе должна быть частота 100Гц. Подскажите, пожалуйста, в чем может быть загвоздка? С контроллером серии STM32L100 у меня получалось, там просто некоторые структуры библиотечные выглядят немного иначе. А вот с этим контроллером никак Ну у меня делается, например, так: void HW_TIM_Init(void) { TIM_TimeBaseInitTypeDef TIM_Configure; TIM_Configure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_Configure.TIM_CounterMode = TIM_CounterMode_Up; TIM_Configure.TIM_Period = 100 - 1; TIM_Configure.TIM_Prescaler = 90 - 1; TIM_Configure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_Configure); TIM_OCInitTypeDef TIM_OC_Configure; TIM_OC_Configure.TIM_OCMode = TIM_OCMode_Toggle; TIM_OC_Configure.TIM_OutputState = TIM_OutputState_Enable; TIM_OC_Configure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OC_Configure.TIM_Pulse = 0; TIM_OC_Configure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC_Configure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OC_Configure.TIM_OCIdleState = TIM_OCIdleState_Reset; TIM_OC_Configure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; TIM_OC1Init(TIM2, &TIM_OC_Configure); TIM_SetCompare1(TIM2, 30); TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable); return; } После этого включаем таймер и поехали. Ключевой момент - установить значение сравнения TIM_SetCompare1(TIM2, ...) и включить сам канал захвата/сравнения TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Auratos 0 30 мая, 2018 Опубликовано 30 мая, 2018 · Жалоба "TIM1->BDTR |= TIM_BDTR_MOE;"? Вот эти зубодробительные инициализации при помощи "полезных" библиотек только всё запутывают. Спасибо большое. Помогло :biggrin: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться