【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

这篇具有很好参考价值的文章主要介绍了【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这两天在调步进电机,希望是使得步进电机每次都达到期望的高度。在查了一天的资料,发现大部分上传的资料都是使用CubeMX生成的,可复制性很高,但未免有失可读性,故上传我的心得经验。

本来原子哥的例程里有整合度很高的,已经封装好的精确控制步进电机前进距离的函数。无奈例程使用了高级定时器TIM8,TIM8需要复用的引脚会影响到CAN的通讯,无奈自行研究,最终决定通过PWM中断,计数脉冲数,以此实现精确控制步进电机的步距角。

话不多说,先谈谈我遇到的坑吧,我个人算是新手,所以在一开始调步进电机时,连初始化和基本步骤都不是很明白,所以下文会从最基础的地方开始。

第一次我选择了定时器4的通道2作为PWM的输出口,然而很快我就发现了TIM4_ CHANNEL2的对应引脚是PD13,复用了PD13 作为PWM输出口后,步进电机出现了上下乱移,不受程序控制的情况,无奈作罢。

第二次,我选择了定时器4通道1,引脚是PD12。于是进入了正常设置环节,

【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

第一个Driverinit,初始化了PF7,PF9作为编码器的DIR+,和DIR-来控制方向。具体可参见备注。

第二个是定时器中断处理函数,调用的是TIM4的句柄。

第三个是TIM4的PWM波初始化。

其中关于2,3点的理解出了偏差,这是我踩得最大的坑!!!没有之一!!!

首先我要强调的是HAL_TIM_PWM_StartHAL_TIM_PWM_Start_IT的区别。在我的理解中,使用前者只能成功设置时钟输出PWM波,而不能调用中断。而后者才是时钟中断的开启门户。

由于想要使用PWM中断,又因为对定义的不明确,我认为的是,既然在TIM4的PWMinit中,已经使用了HAL_TIM_PWM_Start_IT(&TIM4_Handler,TIM_CHANNEL_1)这个函数来开启了时钟4和时钟4的pwm通道中断,那么当然不需要再对定时器本身的中断处理函数进行设置。

也就是说,一开始我想当然地忘记了调用TIM4_IRQHandler设置定时器中断。

实际上,PWM中断应该是这样的一个调用过程。

首先进入时钟4的时钟中断,然后通过对各种电平的变化读取,会调用到图中重点标注的

HAL_TIM_PWM_PulseFinishedCallback函数,即我们控制PWM精确脉冲数的核心回调函数。

如上,这也就是必须要调用定时器中断处理函数的原因。

【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机
 

其次要强调的是PWM的MSP回调函数设置问题,如下图:

【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

 PWM_MspInit是定时器的底层驱动,值得注意的是,此函数会被HAL_TIM_PWM_Init()函数调用。

如图所示,我们首先定义一个GPIO类型的结构体,然后使能引脚所属的GPIOD时钟。

然后对PD12进行各种初始化设置,最后在HAL_GPIO_Init函数中对引脚初始化。

最后也是很容易踩坑的一点,忘记设置中断优先级,即

HAL_NVIC_SetPriority(TIM4_IRQn,2,2);    //设置中断优先级,抢占优先级1,子优先级2
    HAL_NVIC_EnableIRQ(TIM4_IRQn);          //开启TIM4中断   

这也是值得很多和我一样忽视了初始化重要性的新人朋友值得注意的一点,有中断,就要使能中断,并且设置优先级。

最后是HAL_TIM_PWM_PulseFinishedCallback的,没有什么技术化的细节。定义一个静态变量i,产生一个脉冲就i++一次。达到1000时,使能HAL_TIM_PWM_Stop_IT函数,直接关闭时钟4通道一的PWM输出。

最后的最后,还有一个小问题,这样设置的话,HAL_TIM_PWM_Start_IT在初始化时就被调用了,所以如果你设置正确,一打开板子就会使得步进电机前进。所以我们可以先在TIM4_PWM_INIT中注释掉这个函数,或者在main函数中先调用一次HAL_TIM_PWM_Stop_IT,停止PWM输出。

谢谢各位了,最后还是我的hxd提醒我了我的错误,我才能正常驱使步进电机前进固定距离。有什么问题,也欢迎大家在评论区和我交流。

附上约尔美图一张,希望大家天天开心,每天都有新进步新收获。

【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

 文章来源地址https://www.toymoban.com/news/detail-473936.html

到了这里,关于【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103xx / STM32F429VET6最小系统原理图

    STM32F429VET6核心板原理图 2023.12.09修改内容:打板后由于更换学习方向并未进行测试,所给原理图仅供参考,给出PDF下载链接,未设置积分和会员下载:https://download.csdn.net/download/m0_51294753/88611702。 一、前言 先前使用过的是STM32F1系列,只使用和绘制过STM32F103C8T6和STM32F103ZET6的板

    2023年04月24日
    浏览(37)
  • RT-Thread STM32F429 armfly-v6开发板BSP说明

    本文档为 RT-Thread 开发团队为 STM32F429 armfly-v6 开发板提供的 BSP (板级支持包) 说明。 主要内容如下: 开发板资源介绍 BSP 快速上手 进阶使用方法 通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮

    2024年01月18日
    浏览(44)
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收

      参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866 目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。 现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。   MCU:STM32F429ZIT6 开发环境:

    2024年02月08日
    浏览(42)
  • STM32F429 Discovery开发板应用:实现SPI-SD Card文件写入(搭载FatFS文件系统)

    MCU:STM32F429ZIT6 开发环境:STM32CubeMX+MDK5   外购了一个SPI接口的SD Card模块,想要实现SD卡存储数据的功能。 首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。   此时,双击完后会关闭此界面,然后打开一个新界面。

    2024年02月08日
    浏览(44)
  • STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)

    1、硬件电路 需要系统性的看一下W25Q256芯片手册  2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置SPI 4、生成工程配置   5、读写流程图 5、相关代码 6、实验现象 没有问题!

    2024年02月12日
    浏览(37)
  • STM32基于HAL库的串口接受中断和空闲中断

    在通信方面。UART由于全双工通信,可以同时接受数据和发送数据而被广泛使用。 而接受数据则又有很多种方法 比如: 1根据结束符判断,数据是字符串形式,所以一般串口接受的接受符就是 \\\"rn\\\"  换成16进制ascil码显示就是 0X0D   0X0A (对应rn)  2定时器中断,设计\\\"喂狗信号量

    2023年04月08日
    浏览(36)
  • 【STM32】基于HAL库的中断详细学习

    1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数据类型 3.2. 外部中断的接口函数 在计算机系统中,处理器常常需要与外部设备进行数据传输。常见的数据传输方式有以下四种:

    2024年02月02日
    浏览(77)
  • STM32 HAL库的串口中断服务函数详解

    最近在实现利用上位机通过串口发送指令给下位机执行操作的实验,在之前学习串口的过程中我就一直有一个疑惑,那就是为什么在串口中断回调函数内除了要加上自己的操作以外还要在末尾再执行一次 接收中断 ,在查阅了一些资料后我才发现原来和 中断服务函数 有关 我

    2024年02月10日
    浏览(33)
  • 【stm32开发笔记】基于HAL库的STM32F4添加DSP库

    本文分两种方法添加DSP库:1.CubeMX直接配置ioc添加; 2.KEIL内添加; 简述:补齐全部lib库-添加DSP包-使能DSP勾选-添加头文件及魔术棒配置-测试 1.补齐lib库。( 如果使用直接默认添加的库,是不支持FPU的,所以需要补齐后找到所需的lib文件进行替换,在MX的工程管理栏,选择复制所

    2024年02月16日
    浏览(44)
  • STM32:基于HAL 库的外部中断按键以及消抖

    第一次写博客,有错误与问题欢迎指正。 这部分直接上代码,假设PB5为输入端且上拉,PB11为输出。 在CubeMx中配置完引脚(下降沿触发)并在NVIC中开启外部中断后,我们注意到,上一个程序有5个要素(我写了注释的5个): 中断回调函数HAL_GPIO_EXTI_Callback是一个虚函数,我们

    2024年04月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包