Тихо сам с собою....
В принципе, нужную конструкцию я сварганил:
Код
TIM_TimeBaseStructInit(&TIM_InitStructure);
TIM_InitStructure.TIM_Prescaler = 10000-1;
TIM_InitStructure.TIM_Period = 1;
TIM_TimeBaseInit(TIM2, &TIM_InitStructure);
TIM_OCStructInit(&TIM_OCConfig);
TIM_OCConfig.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM2, &TIM_OCConfig);
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
TIM_Cmd(TIM2, ENABLE);
TIM_TimeBaseStructInit(&TIM_InitStructure);
TIM_InitStructure.TIM_Prescaler = 2-1;
TIM_InitStructure.TIM_Period =10;
TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
TIM_OCStructInit(&TIM_OCConfig);
TIM_OCConfig.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM3, &TIM_OCConfig);
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);
TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);
TIM_ITConfig(TIM3, TIM_DIER_UIE, ENABLE);
TIM_Cmd(TIM3, ENABLE);
.........................................................
void TIM3_IRQHandler(void)
{
TIM_Cmd(TIM2, DISABLE);
ClockON_FLAG=0;
TIM3->SR &= ~TIM_SR_UIF; //reset interrupt flag
}
............................................................
while(1) // ЭТО ВМЕСТО ФУНКЦИИ. ПОКА ПРОСТО ЗАЦИКЛИЛ ЗАПУСК ТАЙМЕРА
{
ClockON_FLAG=1;
TIM_Cmd(TIM2,ENABLE);
while(ClockON_FLAG);
delay_ms(5);
}
Осталось понять что не так с TIM1. Он работает, генерирует прерывания, но не дергает ножкой. Сама ножка в режиме OUT_PP выдает импульсы. НИкакая другая перферия не включена.
У меня контроллер STM32F103RET6, если что...
Сообщение отредактировал zheka - Mar 4 2015, 18:35