#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
TIMER_CntInitTypeDef sTIM_CntInit;
TIMER_ChnInitTypeDef sTIM_ChnInit;
TIMER_ChnOutInitTypeDef sTIM_ChnOutInit;
PORT_InitTypeDef PORT_InitStructure;
uint16_t CCR1_Val = 1000; // для PB0/PB1
uint16_t CCR2_Val = 3000; // для PB2/PB3
int main(void)
{
RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER3, ENABLE);
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
// PB0, PB1, PB2, PB3 как альтернативная функция TIMER3
PORT_StructInit(&PORT_InitStructure);
PORT_InitStructure.PORT_Pin = PORT_Pin_0 | PORT_Pin_1 | PORT_Pin_2 | PORT_Pin_3;
PORT_InitStructure.PORT_OE = PORT_OE_OUT;
PORT_InitStructure.PORT_FUNC = PORT_FUNC_ALTER;
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
PORT_Init(MDR_PORTB, &PORT_InitStructure);
// Настройка TIMER3
TIMER_CntStructInit(&sTIM_CntInit);
sTIM_CntInit.TIMER_Prescaler = 0;
sTIM_CntInit.TIMER_Period = 4000;
sTIM_CntInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir;
sTIM_CntInit.TIMER_CounterDirection = TIMER_CntDir_Up;
sTIM_CntInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately;
TIMER_CntInit(MDR_TIMER3, &sTIM_CntInit);
// Каналы 1 и 2 в режим PWM
TIMER_ChnStructInit(&sTIM_ChnInit);
sTIM_ChnInit.TIMER_CH_Mode = TIMER_CH_MODE_PWM;
sTIM_ChnInit.TIMER_CH_REF_Format = TIMER_CH_REF_Format6;
sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL1;
TIMER_ChnInit(MDR_TIMER3, &sTIM_ChnInit);
sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL2;
TIMER_ChnInit(MDR_TIMER3, &sTIM_ChnInit);
// Значения сравнения
TIMER_SetChnCompare(MDR_TIMER3, TIMER_CHANNEL1, CCR1_Val);
TIMER_SetChnCompare(MDR_TIMER3, TIMER_CHANNEL2, CCR2_Val);
// Настройка прямого и инверсного выходов
TIMER_ChnOutStructInit(&sTIM_ChnOutInit);
sTIM_ChnOutInit.TIMER_CH_DirOut_Polarity = TIMER_CHOPolarity_NonInverted;
sTIM_ChnOutInit.TIMER_CH_DirOut_Source = TIMER_CH_OutSrc_REF;
sTIM_ChnOutInit.TIMER_CH_DirOut_Mode = TIMER_CH_OutMode_Output;
sTIM_ChnOutInit.TIMER_CH_NegOut_Polarity = TIMER_CHOPolarity_NonInverted;
sTIM_ChnOutInit.TIMER_CH_NegOut_Source = TIMER_CH_OutSrc_REF;
sTIM_ChnOutInit.TIMER_CH_NegOut_Mode = TIMER_CH_OutMode_Output;
sTIM_ChnOutInit.TIMER_CH_Number = TIMER_CHANNEL1;
TIMER_ChnOutInit(MDR_TIMER3, &sTIM_ChnOutInit);
sTIM_ChnOutInit.TIMER_CH_Number = TIMER_CHANNEL2;
TIMER_ChnOutInit(MDR_TIMER3, &sTIM_ChnOutInit);
TIMER_BRGInit(MDR_TIMER3, TIMER_HCLKdiv1);
TIMER_Cmd(MDR_TIMER3, ENABLE);
while (1)
{
}
}