flipback 0 5 июня, 2013 Опубликовано 5 июня, 2013 (изменено) · Жалоба Добрый день! Совсем недавно начал ковырять STM32F3Descovery и хочу ее подружить с сервомашинкой (пока одной). Не могу настроить ШИМ. Использую TIM3 и первый канал на PC6. Ниже код: int main(void) { RCC_Configuration(); GPIO_Configuration(); TIM3Configuration(); while(1) continue; /* Program will never run to this line */ return 0; } void RCC_Configuration() { /* TIM3 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* GPIOC clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); } void GPIO_Configuration() { GPIO_InitTypeDef gpio; gpio.GPIO_Pin = GPIO_Pin_6; gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_2MHz; GPIO_PinAFConfig(GPIOC, GPIO_Pin_6, GPIO_AF_2); GPIO_Init(GPIOC, &gpio); } void TIM3Configuration() { TIM_TimeBaseInitTypeDef timInit; TIM_OCInitTypeDef timChannelInit; /* Time base configuration */ timInit.TIM_Period = PWM_BASE; timInit.TIM_Prescaler = PRESCL; timInit.TIM_ClockDivision = TIM_CKD_DIV1; timInit.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &timInit); /* PWM1 Chanel1 (PC6) */ timChannelInit.TIM_OCMode = TIM_OCMode_PWM1; timChannelInit.TIM_OutputState = TIM_OutputState_Enable; timChannelInit.TIM_Pulse = PWM_MIN; TIM_OC1Init(TIM3, &timChannelInit); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable ); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); } При такой настройке таймер TIM3 работает (вижу изменения CNT в дебагере), но на выходе нечего (третье состояние). Измеряю выход, к сожалению, тестером - рассчитываю увидеть изменение уровня напряжения от заполнения ШИМ. Если PC6 настроить как выход, то он работать, т.е. 3в и 0 дает. Не могу понять, где я не прав. Очень нужна помощь. Заранее благодарен. Изменено 5 июня, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 5 июня, 2013 Опубликовано 5 июня, 2013 · Жалоба Не вижу собственно включения выхода, в библиотеке это функция TIM_CCxCmd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flipback 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Не вижу собственно включения выхода, в библиотеке это функция TIM_CCxCmd Добавил TIM_CCxCmd(TIM3, TIM_Channel_1, TIM_CCx_Enable); Не спасло :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_2); GPIO_Pin_6 это 1<<6, а GPIO_PinSource6 - просто 6. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flipback 0 10 июня, 2013 Опубликовано 10 июня, 2013 · Жалоба GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_2); GPIO_Pin_6 это 1<<6, а GPIO_PinSource6 - просто 6. Спасибо! Теперь работает! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться