一、基础知识和原则
【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);
}
}