STM32F103+L298N驱动直流电机#ifndef__MOTOR_H#define__MOTOR_H#includestm32f10x.h#defineA1_OnGPIO_SetBits(GPIOE,GPIO_Pin_0)#defineA1_OffGPIO_ResetBits(GPIOE,GPIO_Pin_0)#defineA2_OnGPIO_SetBits(GPIOE,GPIO_Pin_2)#defineA2_OffGPIO_ResetBits(GPIOE,GPIO_Pin_2)#defineB1_OnGPIO_SetBits(GPIOE,GPIO_Pin_4)#defineB1_OffGPIO_ResetBits(GPIOE,GPIO_Pin_4)#defineB2_OnGPIO_SetBits(GPIOE,GPIO_Pin_6)#defineB2_OffGPIO_ResetBits(GPIOE,GPIO_Pin_6)voidMotor_Init(void);//控制引脚设置voidMotor_Forward(void);//前进voidMotor_Back(void);//后退voidMotor_Stop(void);//暂停voidMotor_TurnRight(void);//右转弯voidMotor_TurnLeft(void);//左转弯#endif#includeMotor.hvoidMotor_Init(void){GPIO_InitTypeDefGPIO_Initstructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_Initstructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;GPIO_Initstructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_Initstructure);}voidMotor_Forward(void){A1_On;A2_Off;B1_On;B2_Off;}voidMotor_Back(void){A1_Off;A2_On;B1_Off;B2_On;}voidMotor_Stop(void){A1_Off;A2_Off;B1_Off;B2_Off;}voidMotor_TurnRight(void){A1_On;A2_Off;B1_Off;B2_Off;}voidMotor_TurnLeft(void){A1_Off;A2_Off;B1_Off;B2_On;}#includeMotor.h#includesys.hvoidDelay_ms(uint32_tms)//利用系统SysTick延时{uint32_ti;SysTick_Config(72000);for(i=0;ims;i++){while(!((SysTick-CTRL)&(116)));}SysTick-CTRL&=SysTick_CTRL_ENABLE_Msk;}intmain(void){Motor_Init();while(1){Motor_Forward();Delay_ms(5000);Motor_Stop();Delay_ms(2000);Motor_Back();Delay_ms(5000);Motor_Stop();Delay_ms(2000);Motor_TurnRight();Delay_ms(5000);Motor_Stop();Delay_ms(2000);Motor_TurnLeft();Motor_Stop();Delay_ms(2000);}}网上很多关于L298N(我用的是可以驱动两路直流电机的模块)的说明文档可以查找,这里就不上接线图了。不过关于L298驱动电压12V的事情到可以对我的做法做个说明,我是用STM32开发板的输出5V接入L298的逻辑接口和驱动接口的,这样驱动两路电机完全没有问题,同样在Arduino中也可以将输出5V接L298的逻辑及驱动接线口。如果开发板或者采用Arduino板,其实不用用电池盒装5或者7号电池,直接用手机充电板供电也非常好的。