Код:
CODE
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_ICInitTypeDef TIM_ICInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; // íàñòðîéêà ñ÷¸òà ââåðõ
TIM_TimeBaseInitStruct.TIM_Period=150;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; // ïðåääåëèòåëü òàêòèðîâàíèÿ òàéìåðà
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_Prescaler=49;
TIM_TimeBaseInitStruct.TIM_Period=1500;
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct); // ÷àñòîòà ïåðåïîëíåíèÿ 10Ãö
TIM_TimeBaseInitStruct.TIM_Prescaler=9;
TIM_TimeBaseInitStruct.TIM_Period=0xFFFF;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_CenterAligned3; // íàñòðîéêà ñ÷¸òà ââåðõ-âíèç
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_Period=4000; // ïðèìåðíî 3000 Ãö
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 4000;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Falling;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStruct.TIM_ICFilter=0xF;
TIM_ICInit(TIM2, &TIM_ICInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Disable;
TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStruct.TIM_Pulse=3000; // 75% ØÈÌ
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM3, &TIM_OCInitStruct);
TIM_OC1Init(TIM1, &TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC1FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC1FastConfig(TIM1,TIM_OCFast_Enable);
TIM_OC2Init(TIM3, &TIM_OCInitStruct);
TIM_OC2Init(TIM1, &TIM_OCInitStruct);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC2FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC2FastConfig(TIM1,TIM_OCFast_Enable);
TIM_OC3Init(TIM3, &TIM_OCInitStruct);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC3FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC4Init(TIM3, &TIM_OCInitStruct);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1FastConfig(TIM3,TIM_OCFast_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;
TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;
TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStruct.TIM_DeadTime = 0;
TIM_BDTRInitStruct.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStruct);
TIM_ICInitTypeDef TIM_ICInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; // íàñòðîéêà ñ÷¸òà ââåðõ
TIM_TimeBaseInitStruct.TIM_Period=150;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; // ïðåääåëèòåëü òàêòèðîâàíèÿ òàéìåðà
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_Prescaler=49;
TIM_TimeBaseInitStruct.TIM_Period=1500;
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct); // ÷àñòîòà ïåðåïîëíåíèÿ 10Ãö
TIM_TimeBaseInitStruct.TIM_Prescaler=9;
TIM_TimeBaseInitStruct.TIM_Period=0xFFFF;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_CenterAligned3; // íàñòðîéêà ñ÷¸òà ââåðõ-âíèç
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_Period=4000; // ïðèìåðíî 3000 Ãö
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 4000;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Falling;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStruct.TIM_ICFilter=0xF;
TIM_ICInit(TIM2, &TIM_ICInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Disable;
TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStruct.TIM_Pulse=3000; // 75% ØÈÌ
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM3, &TIM_OCInitStruct);
TIM_OC1Init(TIM1, &TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC1FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC1FastConfig(TIM1,TIM_OCFast_Enable);
TIM_OC2Init(TIM3, &TIM_OCInitStruct);
TIM_OC2Init(TIM1, &TIM_OCInitStruct);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC2FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC2FastConfig(TIM1,TIM_OCFast_Enable);
TIM_OC3Init(TIM3, &TIM_OCInitStruct);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC3FastConfig(TIM3,TIM_OCFast_Enable);
TIM_OC4Init(TIM3, &TIM_OCInitStruct);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1FastConfig(TIM3,TIM_OCFast_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;
TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;
TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStruct.TIM_DeadTime = 0;
TIM_BDTRInitStruct.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStruct);
код инициальзации пинов:
Код:
CODE
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
Именно включение ШИМ в коде дальше: TIM_CCxCmd(TIM1,TIM_Channel_1,ENABLE); или BIT-BANG: SETBIT_REG_PERIPH((TIM1->CCER),0), но не суть. Единичка пишиться проверял в отладке. Использую первый и второй каналы.