ʹ

ʹ
void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; // 启用 GPIOD 时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // 配置 PD11~PD14 为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); // OLED 复位 OLED_RST_Clr(); delay_ms(100); // 延时 100ms OLED_RST_Set(); // OLED 寄存器初始化 OLED_WR_Byte(0xAE, OLED_CMD); // 关闭显示 OLED_WR_Byte(0xD5, OLED_CMD); // 设置时钟分频 OLED_WR_Byte(80, OLED_CMD); // 推荐值:80 OLED_WR_Byte(0xA8, OLED_CMD); // 设置驱动路数 OLED_WR_Byte(0x3F, OLED_CMD); // 默认 1/64 OLED_WR_Byte(0xD3, OLED_CMD); // 设置显示偏移 OLED_WR_Byte(0x00, OLED_CMD); // 默认 0 OLED_WR_Byte(0x40, OLED_CMD); // 设置起始行 OLED_WR_Byte(0x8D, OLED_CMD); // 充电泵 OLED_WR_Byte(0x14, OLED_CMD); // 开启充电泵 OLED_WR_Byte(0x20, OLED_CMD); // 内存地址模式 OLED_WR_Byte(0x02, OLED_CMD); // 页地址模式 OLED_WR_Byte(0xA1, OLED_CMD); // 段重定义 OLED_WR_Byte(0xC0, OLED_CMD); // COM 扫描方向 OLED_WR_Byte(0xDA, OLED_CMD); // COM 硬件配置 OLED_WR_Byte(0x12, OLED_CMD); // 默认配置 OLED_WR_Byte(0x81, OLED_CMD); // 对比度设置 OLED_WR_Byte(0xEF, OLED_CMD); // 默认值(可调整) OLED_WR_Byte(0xD9, OLED_CMD); // 预充电周期 OLED_WR_Byte(0xF1, OLED_CMD); // 默认值 OLED_WR_Byte(0xDB, OLED_CMD); // VCOMH 电压 OLED_WR_Byte(0x30, OLED_CMD); // 默认值 OLED_WR_Byte(0xA4, OLED_CMD); // 全局显示开启 OLED_WR_Byte(0xA6, OLED_CMD); // 正常显示模式 OLED_WR_Byte(0xAF, OLED_CMD); // 开启显示 OLED_Clear(); // 清屏 }void TIM6_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); TIM_TimeBaseInitTypeDef timer = {0}; timer.TIM_Prescaler = SystemCoreClock / 1000000 - 1; // 1μs分辨率 timer.TIM_Period = 0xFFFFFFFF; // 最大计数值 timer.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM6, &timer); TIM_Cmd(TIM6, ENABLE); } uint32_t Get_TIM6_Count(void) { return TIM6->CNT; } float Get_Encoder_Speed(uint8_t timer_id) { // 1. 获取当前计数和时间戳 int32_t current_count = Read_Encoder(timer_id); uint32_t now = Get_System_Time_us(); uint8_t idx = timer_id - 2; // 转换为数组索引(TIM2→0, TIM3→1) // 2. 计算时间差(秒) uint32_t delta_time = now - last_time[idx]; float dt = delta_time / 1000000.0f; // 转换为秒 if (dt <= 0) dt = 1e-6f; // 避免除零 // 3. 计算速度(计数/秒) float speed = (current_count - last_count[idx]) / dt; // 4. 更新历史值 last_count[idx] = current_count; last_time[idx] = now; return speed; }void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM8ʱדʹŜ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //ʹŜPORTCʱד GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_TIM1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14; //GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //شԃ٦Ŝ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //̙׈100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ΆάشԃˤԶ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ʏ- GPIO_Init(GPIOE,&GPIO_InitStructure); //ԵʼۯPCࠚ //Sets the value of the auto-reload register cycle for the next update event load activity //ʨ׃՚Ђһٶټт˂ݾװɫܮ֯քؔ֯טװ՘݄զǷלǚքֵ TIM_TimeBaseStructure.TIM_Period = arr; //Sets the pre-divider value used as the TIMX clock frequency divisor //ʨ׃ԃ4طΪTIMxʱדƵÊԽ˽քԤؖƵֵ TIM_TimeBaseStructure.TIM_Prescaler =psc; //Set the clock split :TDTS = Tck_tim //ʨ׃ʱדؖٮ:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_ClockDivision = 1; //Up counting mode //вʏ݆˽ģʽ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //Initializes the timebase unit for TIMX based on the parameter specified in TIM_TIMEBASEINITSTRUCT //ٹߝTIM_TimeBaseInitStructאָ֨քӎ˽ԵʼۯTIMxքʱݤܹ˽եλ TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //Select Timer mode :TIM Pulse Width Modulation mode 1 //ѡձ֨ʱǷģʽ:TIMöԥ࠭׈ַ׆ģʽ1 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Compare output enablement //҈ޏˤԶʹŜ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //Output polarity :TIM output polarity is higher //ˤԶܫє:TIMˤԶ҈ޏܫєٟ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Initialize the peripheral TIMX based on the parameter specified in TIM_OCINITSTRUCT //ٹߝTIM_OCInitStructאָ֨քӎ˽Եʼۯ΢ʨTIMx TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OC3Init(TIM1, &TIM_OCInitStructure); TIM_OC4Init(TIM1, &TIM_OCInitStructure); // Advanced timer output must be enabled //ٟܶ֨ʱǷˤԶҘѫʹŜ֢ߤ TIM_CtrlPWMOutputs(TIM1,ENABLE); //CH1 is pre-loaded and enabled //CH1Ԥװ՘ʹŜ TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // Enable the TIMX preloaded register on the ARR //ʹŜTIMx՚ARRʏքԤװ՘݄զǷ TIM_ARRPreloadConfig(TIM1, ENABLE); //Enable TIM8 //ʹŜTIM8 TIM_Cmd(TIM1, ENABLE); } void TIM9_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);/*ʹŜGPIOFʱד*/ GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);/*شԃ*/ GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9);/*شԃ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //شԃ٦Ŝ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //̙׈100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ΆάشԃˤԶ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ʏ- GPIO_Init(GPIOE,&GPIO_InitStructure); //ԵʼۯPF9 TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM9,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM9,&TIM_OCInitStructure); TIM_OC2Init(TIM9,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM9,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_OC2PreloadConfig(TIM9,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_ARRPreloadConfig(TIM9,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM9,ENABLE);/*݆˽ʹŜ*/ } void TIM10_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);/*ʹŜGPIOFʱד*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM10);/*شԃ*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/*شԃ*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;/*ΆάˤԶ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;/*PF7*/ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/*ʏ-*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;/**/ GPIO_Init(GPIOB,&GPIO_InitStructure);/*ԵʼۯIO*/ TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM10,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM10,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM10,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ //TIM_CtrlPWMOutputs(TIM10,ENABLE); TIM_ARRPreloadConfig(TIM10,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM10,ENABLE);/*݆˽ʹŜ*/ } void TIM11_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);/*ʹŜGPIOFʱד*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_TIM11);/*شԃ*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/*شԃ*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;/*ΆάˤԶ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;/*PF7*/ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/*ʏ-*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;/**/ GPIO_Init(GPIOB,&GPIO_InitStructure);/*ԵʼۯIO*/ TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM11,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM11,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM11,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_CtrlPWMOutputs(TIM11,ENABLE); TIM_ARRPreloadConfig(TIM11,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM11,ENABLE);/*݆˽ʹŜ*/ } void TIM2_IRQHandler(void); void TIM3_IRQHandler(void); void TIM4_IRQHandler(void); void TIM5_IRQHandler(void);这些代码的初始化有冲突吗
07-06
void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM8ʱדʹŜ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //ʹŜPORTCʱד GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_TIM1); GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_TIM1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14; //GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //شԃ٦Ŝ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //̙׈100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ΆάشԃˤԶ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ʏ- GPIO_Init(GPIOE,&GPIO_InitStructure); //ԵʼۯPCࠚ //Sets the value of the auto-reload register cycle for the next update event load activity //ʨ׃՚Ђһٶټт˂ݾװɫܮ֯քؔ֯טװ՘݄զǷלǚքֵ TIM_TimeBaseStructure.TIM_Period = arr; //Sets the pre-divider value used as the TIMX clock frequency divisor //ʨ׃ԃ4طΪTIMxʱדƵÊԽ˽քԤؖƵֵ TIM_TimeBaseStructure.TIM_Prescaler =psc; //Set the clock split :TDTS = Tck_tim //ʨ׃ʱדؖٮ:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_ClockDivision = 1; //Up counting mode //вʏ݆˽ģʽ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //Initializes the timebase unit for TIMX based on the parameter specified in TIM_TIMEBASEINITSTRUCT //ٹߝTIM_TimeBaseInitStructאָ֨քӎ˽ԵʼۯTIMxքʱݤܹ˽եλ TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //Select Timer mode :TIM Pulse Width Modulation mode 1 //ѡձ֨ʱǷģʽ:TIMöԥ࠭׈ַ׆ģʽ1 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Compare output enablement //҈ޏˤԶʹŜ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //Output polarity :TIM output polarity is higher //ˤԶܫє:TIMˤԶ҈ޏܫєٟ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Initialize the peripheral TIMX based on the parameter specified in TIM_OCINITSTRUCT //ٹߝTIM_OCInitStructאָ֨քӎ˽Եʼۯ΢ʨTIMx TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OC3Init(TIM1, &TIM_OCInitStructure); TIM_OC4Init(TIM1, &TIM_OCInitStructure); // Advanced timer output must be enabled //ٟܶ֨ʱǷˤԶҘѫʹŜ֢ߤ TIM_CtrlPWMOutputs(TIM1,ENABLE); //CH1 is pre-loaded and enabled //CH1Ԥװ՘ʹŜ TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // Enable the TIMX preloaded register on the ARR //ʹŜTIMx՚ARRʏքԤװ՘݄զǷ TIM_ARRPreloadConfig(TIM1, ENABLE); //Enable TIM8 //ʹŜTIM8 TIM_Cmd(TIM1, ENABLE); } void TIM9_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);/*ʹŜGPIOFʱד*/ GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);/*شԃ*/ GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9);/*شԃ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //شԃ٦Ŝ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //̙׈100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ΆάشԃˤԶ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ʏ- GPIO_Init(GPIOE,&GPIO_InitStructure); //ԵʼۯPF9 TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM9,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM9,&TIM_OCInitStructure); TIM_OC2Init(TIM9,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM9,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_OC2PreloadConfig(TIM9,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_ARRPreloadConfig(TIM9,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM9,ENABLE);/*݆˽ʹŜ*/ } void TIM10_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);/*ʹŜGPIOFʱד*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM10);/*شԃ*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/*شԃ*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;/*ΆάˤԶ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;/*PF7*/ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/*ʏ-*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;/**/ GPIO_Init(GPIOB,&GPIO_InitStructure);/*ԵʼۯIO*/ TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM10,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM10,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM10,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ //TIM_CtrlPWMOutputs(TIM10,ENABLE); TIM_ARRPreloadConfig(TIM10,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM10,ENABLE);/*݆˽ʹŜ*/ } void TIM11_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);/*ʹŜGPIOFʱד*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11,ENABLE);/*ʹŜ֨ʱǷ11ʱד*/ GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_TIM11);/*شԃ*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/*شԃ*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;/*ΆάˤԶ*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;/*PF7*/ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/*ʏ-*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;/**/ GPIO_Init(GPIOB,&GPIO_InitStructure);/*ԵʼۯIO*/ TIM_TimeBaseInitStructure.TIM_Period = arr;/*ؔ֯טװ՘*/ TIM_TimeBaseInitStructure.TIM_Prescaler = psc;/*ԤؖƵ*/ TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;/*ʱדؖƵ*/ TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;/*вʏ݆˽*/ TIM_TimeBaseInit(TIM11,&TIM_TimeBaseInitStructure);/*Եʼۯ*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/*PWMģʽ*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/*ˤԶ*/ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/*҈ޏܫєٟ*/ TIM_OC1Init(TIM11,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM11,TIM_OCPreload_Enable);/*ˤԶ҈ޏԤװ՘ʹŜ*/ TIM_CtrlPWMOutputs(TIM11,ENABLE); TIM_ARRPreloadConfig(TIM11,ENABLE);/*ؔ֯ט՘Ԥװ՘ʹŜ*/ TIM_Cmd(TIM11,ENABLE);/*݆˽ʹŜ*/ }
07-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值