请问这个怎么写pwm波,基于32f407ze单片机直流电机控制(IR2104S驱动H桥)



选毕设的时候,本来感觉不难,但是连电机动没转起来,本人基本代码全靠copy,换过好几个代码了,就是没一点动静
我干脆只搞了个主函数,只试一个电机,也动不起来。
#include "stm32f4xx.h" // Device header
#include "main.h"
void ledrun(void);
void TIM1_PWM_Init() ;
int main(void)
{
TIM1_PWM_Init();
ledrun();
}
void TIM1_PWM_Init(uint16_t period, uint16_t prescaler) {
// 开启TIM1时钟
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
// 初始化TIM1
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = period; // 设置周期
TIM_TimeBaseStructure.TIM_Prescaler = prescaler; // 设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分频因子
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
// 初始化TIM1的CH1和CH2N为PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出
TIM_OCInitStructure.TIM_Pulse = period / 2; // 设置脉冲宽度,这里设置为50%占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性为高
// 配置TIM1的CH1
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能预装载寄存器
// 配置TIM1的CH2N(需要额外配置为互补输出)
TIM_OC2Init(TIM1, &TIM_OCInitStructure); // 先按常规初始化CH2
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能预装载寄存器
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; // 使能运行时的输出
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; // 使能空闲时的输出
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; // 没有锁定
TIM_BDTRInitStructure.TIM_DeadTime = 0; // 无死区时间
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; // 禁用刹车功能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low; // 刹车极性为低
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; // 禁用自动输出
// 设置CH2为互补输出并映射到对应的引脚(PE10)
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
TIM_OC2NPolarityConfig(TIM1, TIM_OCNPolarity_High); // 设置CH2N的输出极性为高
// 使能TIM1的CH1和CH2N输出
TIM_CtrlPWMOutputs(TIM1, ENABLE);
// 开启TIM1
TIM_Cmd(TIM1, ENABLE);
}
void ledrun(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 开启GPIOB的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
// 配置PB12为输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 更正为输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 选择一个适当的速度
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}
就希望搞个函数给我,让电机转起来先,或者告诉我是不是我对原理图理解有问题怎么让电机转起来,坐两天了,不知道问题在哪,
想用mdk5的仿真器检查波形也看不了,太难熬了。唯一的进展是点了四个灯,我是点灯大师