新手上路,十几天的学习感觉弯路走了不少,所以打算把学习的知识记录下来,和大家分享,不要嫌弃我,我从非常新手的角度来写。

1、STM32F103RCT6

我也是第一次学习单片机,选择了正点原子家的迷你版,学习到后面才发现什么板子都差不多,只要学会看手册就好了。推荐论坛:CSDN、正点原子官网、51黑论坛等。可以跟着正点原子提供的手把手视频教程把基本的实验做出来再去学习更深入的原理,就能得到事半功倍的效果。不要因为自己不会而畏怯,一旦遇到不懂的知识就马上查资料,还是不懂就去问,好了,感想有点多了。

2、L298N电机驱动模块


以后不要只认为淘宝是买东西的,上面可以找到的资料也很多。解释一下:
马达A输出(OUT1和OUT2):就是接电机的正负线,无所谓哪个正哪个负,后期如果想让它反转再改回来即可,当你接上后你会发现两个是导通的,这就是电机的知识了,如果想了解电机内部结构,REFER[1]传送门。
12V电源、地线:12V电源接口接12V电池正线,负线接地,同时这个地还要接到单片机的地才行,关于这个12V电源,只要电压尽量不要高于16V不要低于8V就好啦。
5V输出:这是因为L298N模块里自带了稳压功能,可以供出5v电压,以后要是做车,单片机的供电选择可以选这个,但是对于初学者应该还没用到,暂且不理。
A通道使能(EN1):使能是什么……我刚开始学的时候也不懂,但是如果你学了点灯实验,就会知道要配置IO口,使能时钟什么的,这是使能的意思就是让它开启工作状态。这个使能接口是用来控制PWM输入的,如果你还不知道PWM到底是个什么东西,你就先把它理解成一个可以控制电机转速的东西。也就是说,如果单纯只想让电机转动起来,可以不用管这个EN1先,把那个帽子给它盖上,它就和5v接上了,也就是它不使能了。以后如果想用PWM来控制,那就把帽子拔了,把EN脚接到单片机的PWM输出口。
单片机IO口控制输入(IN1、IN2):这两个脚是接到单片机某两个IO口的,只要你分别给个高给个低电平,电机就可以转了。

所以,剩下的IN3、IN4、EN1、OUT1和OUT2都同理了咯。

3、软件实现

先给大家分享个关于Keil5的小技巧,在界面edit里找到configuration点击去

学习了点灯实验,就知道怎么配置引脚了,然后也知道怎么给引脚高低电平了,注意工程的创建,c文件和h文件都加上去

没有 PWM 控制.

// 先配置引脚
void Motor_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;//端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //50MGPIO_Init(GPIOB, &GPIO_InitStructure);       //根据设定参数初始化GPIOB //暂时先把IO口拉低电平,也可以不拉GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13);
}
//在main函数里
void main(void)
{Motor_Init();while(1){delay_ms(1000);GPIO_ResetBits(GPIOB,GPIO_Pin_12);//正转GPIO_SetBits(GPIOB,GPIO_Pin_13);delay_ms(6000);GPIO_ResetBits(GPIOB,GPIO_Pin_13);//反转GPIO_SetBits(GPIOB,GPIO_Pin_12);delay_ms(1000);}
}

通过上面的代码就可以实现电机简单地转动了,还可以让电机左转右转,看你实现吧
这里的接线是PB12->IN1、PB13->IN2,EN1的帽子要盖上。

有 PWM 控制.

//定义电机,左电机为A(PB12,PB13,PA8),右电机为B(PB14,PB15,PA11)
//PB(12,13,14,15)接驱动模块IN脚,PA(8,11)接EN脚用来PWM输出
/在.c文件里
void Motor_Init(void)
{RCC->APB2ENR|=1<<3;       //PORTB时钟使能 ,位2  GPIOB->CRH&=0X0000FFFF;   //PORTB12 13 14 15推挽输出GPIOB->CRH|=0X22220000;   //PORTB12 13 14 15推挽输出
}
void PWM_Init(u16 arr,u16 psc)
{                            MiniBalance_Motor_Init();  //初始化电机控制所需IORCC->APB2ENR|=1<<11;       //使能TIM1时钟    RCC->APB2ENR|=1<<2;        //PORTA时钟使能     GPIOA->CRH&=0XFFFF0FF0;    //PORTA8 11复用输出GPIOA->CRH|=0X0000B00B;    //PORTA8 11复用输出TIM1->ARR=arr;             //设定计数器自动重装值 TIM1->PSC=psc;             //预分频器不分频TIM1->CCMR2|=6<<12;        //CH4 PWM1模式  TIM1->CCMR1|=6<<4;         //CH1 PWM1模式      7<<4是PWM2模式TIM1->CCMR2|=1<<11;        //CH4预装载使能  TIM1->CCMR1|=1<<3;         //CH1预装载使能      TIM1->CCER|=1<<12;         //CH4输出使能       TIM1->CCER|=1<<0;          //CH1输出使能   TIM1->BDTR |= 1<<15;       //TIM1必须要这句话才能输出PWM,MOE主输出使能TIM1->CR1=0x8000;          //ARPE使能 TIM1->CR1|=0x01;           //使能定时器1
}/在.h文件里
#ifndef __MOTOR_H
#define __MOTOR_H
#include <sys.h>
#define AIN1   PBout(12)
#define AIN2   PBout(13)
#define BIN1   PBout(14)
#define BIN2   PBout(15)
#define PWMA   TIM1->CCR1  //赋值给PWMA就可以直接修改寄存器,发出不同PWM了
#define PWMB   TIM1->CCR4  void MiniBalance_PWM_Init(u16 arr,u16 psc);
void MiniBalance_Motor_Init(void);
#endif//在main函数里
void main(void)
{Motor_Init();PWM_Init(7199,0);while(1){IN1=1;IN2=0;//左电机IN3=1;IN4=0;//右电机PWMA=4000;PWMB=4000;//直接操作寄存器,改变PWM}
}

记得,如果使用PWM了,就要把EN的帽子拔了。可以是库函数版也可以用寄存器版,我比较喜欢寄存器点,很直接。

**对了,还要注意这个PWM值不能为负值。**到这里,电机可以动了,随你发挥吧。

STM32学习笔记-L298N驱动模块-电机相关推荐

  1. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  2. STM32学习笔记——基于正点原子例程编码器模式小结

    STM32学习笔记--基于正点原子例程编码器模式小结 最近一段时间学习了,STM32f4的编码器功能,经过自己探索和他人的热心帮助,对于编码器模式有了一定了解.STM32f4单片机提供编码器模式,以便 ...

  3. STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)

    本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...

  4. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  5. STM32学习笔记 | 引起电源和系统异常复位的原因

    关注+星标公众号,不错过精彩内容 每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种. STM32的复位功能非常强大,可通过软件.硬件和一些事件触发系统复位,而且通 ...

  6. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  7. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  8. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  9. STM32学习笔记(15)——SPI协议

    STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...

最新文章

  1. centos7 安装mysql php_Centos7安装mysql与php的方法
  2. Android登录拦截器实现方式(二)
  3. Spring boot日志关系
  4. python扩展库简介_python非官方扩展库
  5. arthas使用示例:trace追踪方法调用路径及统计方法耗时
  6. python计算机知识点,最新最全Python基础的知识点复习完整版.pdf
  7. 转:如何求出grid图像每个cell对应的x,y坐标?
  8. easy-ui的datagrid
  9. 如何抓获JVM crash的幕后黑手
  10. 做系统ghost步骤图解_u盘装系统步骤
  11. qcow2、raw、vmdk等镜像格式
  12. Git Windows下安装配置
  13. 软件类配置(六)【ubuntu16.04安装opencv3.4.1】
  14. css字体样式加粗变大,css怎么设置字体加粗样式
  15. 西奥电梯服务器无响应,干货│西奥电梯故障分析和技术文件
  16. 色彩配色基础泛谈《第一天》到底说了麻?
  17. 用python对股票期货做时序分析
  18. 基于android的教育机构家校通系统app
  19. 【1945. 字符串转化后的各位数字之和】
  20. 理解条件概率的链式法则

热门文章

  1. c语言函数中使用指针变量,C语言函数指针变量
  2. vue的父传子 与子传父
  3. mysql 数据筛选功能_关于数据筛选的详细介绍
  4. 纯css代码画的铅笔
  5. 如何连接上隐藏WiFi
  6. 电脑无法连接隐藏式wifi
  7. Fedora 33 KED 版 配置记录
  8. Python常用库整理(给自己看的)
  9. CorelDRAW结合Photoshop绘制女性服装效果图
  10. C语言入门-MOOC-作业-鞍点