主函数开始后的处理流程:

1.外设初始化:HAL_Init()

2.系统时钟配置

  • RCC振荡器初始化:HAL_RCC_OsConfig()
  • RCC时钟初始化:HAL_RCC_ClockConfig()
  • 系统滴答定时器初始化:HAL_SYSTICK_Config()

3.按键GPIO初始化

  • GPIO端口时钟使能:__HAL_RCC_GPIOA_CLK_ENABLE()
  • 工作模式
  • 激活下拉或上拉
  • 引脚初始化:HAL_GPIO_Init()

4.串口初始化

  • 串口GPIO端口使能:__HAL_RCC_GPIOA_CLK_ENABLE()
  • 串口初始化(包含串口硬件初始化):HAL_UART_Init()

5.编码器定时器初始化

  • 定时器时钟使能:__HAL_RCC_TIM3_CLK_ENABLE()
  • 编码器GPIO引脚初始化
    • GPIO端口时钟使能:__HAL_RCC_GPIOB_CLK_ENABLE()
    • 工作模式
    • 激活下拉或上拉
    • 引脚初始化:HAL_GPIO_Init()
  • 编码器中断优先级配置
    • 设置中断优先级:HAL_NVIC_SetPriority()
    • 使能中断请求:HAL_NVIC_EnableIRQ()
  • 定时器基本环境初始化:HAL_TIM_Base_Init()
  • 定时器时钟源配置:HAL_TIM_ConfigClockSource()
  • 定时器输入捕获环境初始化:HAL_TIM_IC_Init()
  • 定时器主输出模式同步:HAL_TIMEx_MasterConfigSynchronization()
  • 定时器输入捕获配置:HAL_TIM_IC_ConfigChannel()

6.编码器定时器启动:HAL_TIM_Base_Start()

7.L298N定时器初始化

  • 基本环境初始化:HAL_TIM_Base_Init()
  • 时钟源配置:HAL_TIM_ConfigClockSource()
  • 比较输出初始化(包含mcu硬件初始化):HAL_TIM_PWM_Init()
    • 初始化:HAL_TIM_Base_MspInit()
    • 反初始化:HAL_TIM_Base_MspDeInit()
  • 主输出模式同步:HAL_TIMEx_MasterConfigSynchronization()
  • 刹车和死区时间配置:HAL_TIMEx_ConfigBreakDeadTime()
  • 通道比较输出配置:HAL_TIM_PWM_ConfigChannel()
    • 定时器实际时钟频率为:72MHz/(定时器预分频+1)=36MHz
    • PWM频率为:定时器实际时钟频率/(定时器周期+1),[定时器周期为900的话,36MHz/(900+1)=40Khz]
    • 实际PWM频率为:PWM频率/(高级定时器重复计数寄存器值+1),[高级定时器重复计数寄存器值为0的话,40KHz/0+1=40KHz]
    • PWM占空比为:定时器通道比较输出脉冲/定时器周期*100%,占空比为50%时电机不转。[定时器通道比较输出脉冲为450,定时器周期为900的话,则占空比为50%,电机不转]
  • GPIO引脚初始化
    • a.GPIO端口时钟使能:__HAL_RCC_GPIOA_CLK_ENABLE()
    • b.设置IO引脚:Pin
    • c.设置工作模式:Mode
    • d.设置速度:Speed
    • e.完成初始化:HAL_GPIO_Init()

8.编码器定时器中断捕获启动:HAL_TIM_IC_Start_IT()

9.L298N定时器通道和互补通道PWM输出(可控制电机正反转)

  • HAL_TIM_PWM_Start() 、
  • HAL_TIMEx_PWMN_Start()

10.循环:while(1){}

备注:

系统滴答定时器中断回调函数(每发生一次滴答定时器中断进入该回调函数一次):HAL_SYSTICK_Callback()

定时器输入捕获中断回调函数:HAL_TIM_IC_CaptureCallback()

重定向C库函数printf:int fputc(int ch, FILE *f){}

重定向C库函数getchar、scanf:int fgetc(FILE * f){}

HAL库直流电机编码测速(L298N驱动)笔记的更多相关文章

  1. HAl库控制L298N直流电机旋转笔记

    主函数开始后的处理流程: 1..所有外设初始化:HAL_Init() 2.系统时钟配置 RCC振荡器初始化:HAL_RCC_OsConfig() RCC时钟初始化:HAL_RCC_ClockConfi ...

  2. 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)

    说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...

  3. 【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-11-04)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件 ...

  4. 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...

  5. 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)

    l  STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l  STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l  编程使用STM32 HAL库 l  IIC OLED界面编程,动画实 ...

  6. 【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章       STM32H7的FMC总线基础知识和HA ...

  7. 电机AB相编码器测速

    控制任务 检测编码器的脉冲并测速 电路设计 图1 直流电机带减速器和编码器 图2  编码器接线定义 编码器接线定义如下 M1:电机电源接口,绿色的 GND:编码器电源负极输入口,橙色的 C1:编码器A ...

  8. 微型直流电机控制基本方法 L298N模块

    控制任务 让单个直流电机在L298N模块驱动下,完成制动.自由停车,正反转,加减速等基本动作 芯片模块及电路设计 图1 L298N芯片引脚 图2 L298N驱动模块 表1 L298N驱动模块的控制引脚 ...

  9. 【HAL库每天一例】freemodbus移植

    例程下载:资料包括程序.相关说明资料以及软件使用截图 百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1 360云盘:https://yunpan.cn/OcP ...

随机推荐

  1. 根据swagger.json生成flutter model,暂无空安全支持

    一般的服务端类型都有泛型支持,对于flutter来说虽然也支持泛型,但是在序列化这里却始终存在问题,flutter不允许用反射,对于flutter项目的开发来说除了画页面,可能最烦人的就是跟服务端打交 ...

  2. 对狂神说的MybatisPlus的学习总结

    1.什么是MybatisPlus? 需要的基础:spring,spring mvc,mybatis 作用:可以节省大量的工作时间,所有的CRUD代码都可以自动完成,简化Mybatis MyBatis- ...

  3. PyTorch 自动微分示例

    PyTorch 自动微分示例 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后训练第一个神经网络.autograd 软件包为 Tensors 上的所有算子提供自动微分 ...

  4. zookeeper命令行练习,熟练节点权限, 数组越界异常解决方案

    https://www.cnblogs.com/qlqwjy/p/10517231.html zookeeper 创建持久有序节点时候报错,我的版本号是3.4.12, 亲测有效 https://blo ...

  5. BIO/NIO/ANO笔记

    一: netty服务器启动过程 serverBootstrap.bind(hostname, port)---> doBind(localAddress);--> 1.1: initAnd ...

  6. 简单理解数据库连接池(JDBC)

    为什么要使用连接池? 在我们写代码的时候,写了很多类,假如这些类都和数据库打交道.这样的话每个类都要去获取数据库连接,操作完了之后就把连接释放了. 要知道,获取数据库连接的操作其实是向操作系统底层去获 ...

  7. 【NX二次开发】基准特征

    创建基准特征UF_MODL_create_fixed_daxis 创建一个固定的基准轴特征,方向由点1指向点2UF_MODL_create_fixed_dplane 创建一个固定的基准面特征,输入点和 ...

  8. 点分治&cdq分治 总结

    游荡的孤高灵魂不需要羁绊之处. 洛谷题单 点分治 前置芝士 树的重心 树分治 例题略解 P3806 [模板]点分治1 板子题,先暴力找到整棵树的重心,然后先求出重心到各点的距离,进而算出他所在树的各个 ...

  9. ld-linux-x86-64消耗大量的CPU

    1.现象: 服务器CPU使用率很高 top查看cpu使用进程: 2.进程用户是oracle,根据spid查看是否是数据库进程,经过查询发现:不是数据库内部的进程 select a.sql_id,a.s ...

  10. 冷饭新炒 | 深入Quartz核心运行机制

    目录 Quartz的核心组件 JobDetail Trigger 为什么JobDetail和Trigger是一对多的关系 常见的Tigger类型 怎么排除掉一些日期不触发 Scheduler List ...