一、基础知识及原理

​​【STM32小案例 04 】STM32简单使用L298N电机驱动模块 控制直流电机正反转​​

二、连线图

​连线图​

三、遇到问题的解决办法

​​L298N——真正的玄学驱动板​​

四、程序源码

附主函数:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
#include "timer.h"
#include "stm32f4xx_rcc.h"

RCC_ClocksTypeDef get_rcc_clock; //获取系统时钟状态

int main(void)
{
RCC_GetClocksFreq(&get_rcc_clock);

int encoder;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
LED_Init();
delay_init(168); //初始化延时函数
uart_init(115200);//初始化串口波特率为115200
TIM14_PWM_Init(500-1,84-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.

encoder_tim3_init();

while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
{
GPIO_SetBits(GPIOF,GPIO_Pin_0); //正转
GPIO_ResetBits(GPIOF,GPIO_Pin_1);

TIM_SetCompare1(TIM14,0); //修改比较值,修改占空比
delay_ms(1000);
encoder = read_encoder();
printf("t:%d\r\n",encoder);

TIM_SetCompare1(TIM14,400); //修改比较值,修改占空比
delay_ms(1000);
encoder = read_encoder();
printf("t:%d\r\n",encoder);

GPIO_ResetBits(GPIOF,GPIO_Pin_0); //停止
GPIO_ResetBits(GPIOF,GPIO_Pin_1);
delay_ms(1000);
encoder = read_encoder();
printf("t:%d\r\n",encoder);

GPIO_ResetBits(GPIOF,GPIO_Pin_0); //反转
GPIO_SetBits(GPIOF,GPIO_Pin_1);

TIM_SetCompare1(TIM14,0); //修改比较值,修改占空比
delay_ms(1000);
encoder = read_encoder();
printf("t:%d\r\n",encoder);

TIM_SetCompare1(TIM14,400); //修改比较值,修改占空比
delay_ms(1000);
encoder = read_encoder();
printf("t:%d\r\n",encoder);
}
}