0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MindSDK应用基础—TIM模块样例

灵动MM32MCU 来源:灵动MM32MCU 2023-06-29 17:16 次阅读

引言

MindSDK为MM32使用星辰处理器内核的系列微控制器,实现了一组TIM样例工程,MindSDK中的TIM模块对应硬件定时器TIM外设。本文通过讲解TIM模块的样例工程,介绍TIM模块的功能和用法。关于TIM模块对应的驱动程序,以及TIM外设模块硬件的实现细节,可具体查阅MindSDK工程的源文件,以及MM32微控制器(例如MM32F5270)的用户手册。

样例工程

MindSDK中为TIM驱动设计的样例工程包括:

tim_basic

tim_one_time_run

tim_output_compare_pwm

tim_input_capture

tim_external_trigger_input

tim_slave_mode

tim_slave_mode_encoder

tim_comp_output_compare_pwm

其中,tim_basic、tim_one_time_run、tim_output_compare_pwm、tim_input_capture和tim_external_trigger_input 分别演示了定时器最典型的功能,包括定时、输出比较、输入捕捉,以及对外部脉冲进行计数等。另外,还有一些不大典型,用在特殊应用场景的功能,例如,使用“从机”模式干预常规的定时器计数,通过硬件实现互补的PWM输出(常用于电机控制应用中控制驱动桥)。

tim_basic

tim_basic 描述了使用TIM模块最基本的方式,周期定时器。在样例工程中,通过 TIM_Init() 函数,配置一个选定的TIM外设模块的计数引擎,为连续计数模式 TIM_PeriodMode_Continuous ,并指定计数周期为 APP_TIM_UPDATE_PERIOD 。然后,启用选定TIM外设模块对应的NVIC中断。最后,通过调用 TIM_Start() 驱动函数,启动定时器开始计数。

每当定时器计数到达预设的计数周期值后,计数值折返为0,重新开始计数。同时,TIM会触发NVIC中断, tim_basic 样例工程中为TIM中断实现的服务程序中,实现了通过串口发送字符*的操作。

最终程序运行时,可以在PC机上的串口通信终端看到以指定周期输出的字符 * ,验证定时器中断被周期触发。

tim_one_time_run

tim_one_time_run 相对于 tim_basic 样例工程实现周期触发定时器中断服务,实现了每次启动定时器后,仅触发一次中断的用法。

其实现原理,是在 tim_basic 配置定时器周期运行的基础之上,修改初始化配置 .PeriodMode 的值为 TIM_PeriodMode_OneTimeRun。之后,每次通过 TIM_Start() 函数启动定时器后,定时器仅计数一个周期后,触发中断,然后停止计数。

实际运行程序时,用户在串口调试终端中每次输入任意字符,程序均会调用一次 TIM_Start() 函数,延时指定计数周期后,在定时器中断服务程序中打印字符 * 到串口终端界面。

tim_output_compare_pwm

tim_output_compare_pwm 实现的是一个通过输出比较功能产生PWM输出信号的样例工程。

其实现原理,是在 tim_basic 基础之上,额外通过驱动函数 TIM_EnableOutputCompare(),启动并配置给定通道 BOARD_TIM_CHANNEL 为输出比较功能。其中,指定通道的配置属性 .PinPolarity 的值为 TIM_PinPolarity_Rising,.RefOutMode 值为 TIM_OutputCompareRefOut_FallingEdgeOnMatch,设定同通道绑定的硬件引脚信号在计数初始的阶段为高电平,当计数值达到通道数据寄存器中设定的匹配值时,输出下降沿信号,输出低电平。

实际运行程序时,用户通过 TIM_Init() 函数配置定时器的基本定时单元,对应的计数周期即为输出PWM信号波形的周期,启用输出比较的指定通道绑定的引脚即为输出PWM信号的引脚,通过 TIM_PutChannelValue() 函数设定输出波形在整个周期下降沿的位置,进而调整PWM输出信号波形的占空比。通道引脚在每次定时器周期的开始输出为高电平,在周期内设定的匹配值的位置产生下降沿,转而输出低电平,再计数周期结束折返为0时,恢复为高电平。如此周而复始,实现输出PWM信号波形。

tim_input_capture

tim_intput_capture 实现的是一个使用定时器为外部输入的触发信号记录时刻的样例工程。

其实现原理,是在 tim_basic 基础之上,额外通过驱动函数 TIM_EnableInputCapture(),启动并配置给定通道 BOARD_TIM_CHANNEL 为输入捕获功能。其中,指定给定通道的捕获输入信号极性 .PinPolarity 的值为 TIM_PinPolarity_Falling,表示在该给定通道绑定的引脚上出现下降沿信号时,触发捕获事件。此时,捕获计数器当前的计数值到给定通道的通道数据寄存器中,这个值就可以作为该捕获事件的时刻记录。

实际运行程序时,用户通过 TIM_Init() 函数配置定时器的基本定时单元,此时定时器的计数周期,就是可能捕获时刻值的有效范围。然后在电路上使用一个按键接入到指定通道绑定的引脚上,模拟产生下降沿触发信号。当按下按键时,触发信号到来,触发程序中的通道事件中断服务程序,在其中可以通过 TIM_GetChannelValue() 函数读取本次输入捕获事件发生时的计数时刻。

tim_external_trigger_input

相对于 tim_basic 中,使用芯片内部的时钟源脉冲进行计数,tim_external_trigger_input 样例工程可以对用户指定引脚上的脉冲进行计数,计数的脉冲来自于芯片外部的信号源。

其实现原理,是在 tim_basic 基础上,额外通过驱动函数 TIM_EnableExtTriggerIn(),配置启用外部对外部输入的脉冲信号进行计数的功能,固定从TIM外设模块的 ETR 引脚捕获来自外部的脉冲信号。每次捕获到一个脉冲信号,等同于使用芯片内部时钟源的脉冲,计数器自增计数。此时,还可以基于这个新的时钟源,使用周期计数中断等功能。

实际运行程序时,用户可以将一个按键接入到指定TIM外设模块的 ETR 引脚上,用手动按按键产生脉冲信号。在程序中指定定时器的计数周期 APP_TIM_UPDATE_PERIOD 值为2,意味着每输入两次脉冲,就会触发一次定时器周期中断。

tim_slave_mode

tim_slave_mode 实现的是一个使用从机TIM从机模式的样例工程。实际上,这里的“从机”同从属关系的的“从”是没关系的,而是可以理解为更丰富的可由用户控制的工作模式。

tim_slave_mode 工程,在 tim_basic 基础上,额外通过驱动函数 TIM_EnableSlaveMode(),配置了其中一种“从机”模式:使用 ETR 作为控制信号(下降沿)的引脚 TIM_SlaveIn_Alt7,当控制信号到来时,选择暂停计数 TIM_SlaveResp_Alt5。

实际运行程序时,用户可以将一个按键接入到指定TIM外设模块的 ETR 引脚上,用手动按按键产生电平控制信号。当按下按键时,控制定时器暂停计数,松开按键时,定时器恢复计数。正常计数到一整个周期时,会产生中断。如此,当按下按键时,会影响定时器中断的周期。

tim_slave_mode_encoder

tim_slave_mode_encoder 工程基于 tim_input_capture 工程,通过额外调用 TIM_EnableSlaveMode() 并传入一组特定的配置,启用了一种特殊的“从机”模式,从而实现了编码器的功能。

tim_comp_output_compare_pwm

tim_comp_output_compare_pwm 基于tim_output_compare_pwm 工程,通过额外的驱动函数 TIM_EnableCompOutput(),实现了PWM信号的互补输出,这意味着当使用正常的输出比较通道输出PWM信号时,还开启了硬件设计的,使用对应的另一个通道,输出电平极性刚好相反的PWM信号。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7483

    浏览量

    151019
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229059
  • 电机控制
    +关注

    关注

    3525

    文章

    1855

    浏览量

    268337
  • PWM输出
    +关注

    关注

    1

    文章

    66

    浏览量

    5120

原文标题:灵动微课堂 (第261讲)|MindSDK应用基础——TIM模块样例

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Hardware Semaphore 2 工程

    介绍了Hardware Semaphore 2的使用方法以及工作模式(Direct和Indirect),本工程基于CCSv4,可在C6678EVM板上运行,内附模块介绍以及代码流程的PPT文件。
    发表于 06-21 14:21

    7改成数码管秒表显示TIM5~TIM7不行

    我把7改成数码管秒表显示,试了TIM2,TIM3,TIM4都可以,但试TIM5~TIM7就不行
    发表于 05-21 21:06

    MindSDKTIM定时器测试步骤分享

    定时器是MCU常用的,这篇测试下MindSDK例程下的tim定时器。开发环境按照论坛的教程安装完成,下面就直接打开例程编译。1、例程下载:网站注册下载MindSDK例程包。2、打开TIM
    发表于 08-23 15:37

    STM32单片机TIM模块定时器向上溢出的输出比较

    首先有一点需要注意:FWLib固件库目前的最新版应该是V2.0.x,V1.0.x版本固件库中,TIM1模块被独立出来,调用的函数与其他定时器不同;在V2.0系列版本中,取消了TIM1.h,所有
    发表于 11-22 16:20 3705次阅读

    AMetal适配:以TIM来展示如何开发通用驱动外设代码

    基于定时器、RTC、WDT本质上均是计数器的共性,本次将这三种通用外设统一为TIM。以TIM,来展示如何开发通用驱动外设代码。对于AMetal所提供的标准层驱动文件,均存放于ametal
    的头像 发表于 05-12 17:08 1808次阅读
    AMetal适配:以<b class='flag-5'>TIM</b>为<b class='flag-5'>例</b>来展示如何开发通用驱动外设代码

    MindSDK概述、使用方法及应用案例

    MindSDK(mm32-mcu-sdk)是由灵动官方的软件团队开发和维护的基于灵动微控制器的软件开发平台。
    的头像 发表于 08-12 09:10 1343次阅读

    基于OpenHarmony开发的步骤

    单丝不成线,独木不成林,一个社区想要健康蓬勃发展离不开社区参与者的持续贡献。而社区贡献点有很多种,本文以贡献OpenAtom OpenHarmony(以下简称“OpenHarmony”)开发,围绕以下5个问题,带大家了解
    的头像 发表于 09-20 10:30 1328次阅读

    31107液晶C语言编程

    31107液晶 C语言编程
    发表于 10-17 15:17 4次下载

    MindSDK搭建Keil MDK开发环境

    本文介绍基于Windows操作系统构建嵌入式系统开发环境过程中需要使用的主要软件Keil MDK,并对一些需要特别关注的要点重点说明。Keil MDK是灵动官方的软件开发平台MindSDK支持的主要编译工具之一。
    的头像 发表于 05-04 10:42 1558次阅读
    为<b class='flag-5'>MindSDK</b>搭建Keil MDK开发环境

    MindSDK中FlexCAN驱动程序及工程

    和MM32F0140微控制器,其中就有FlexCAN外设模块的驱动程序以及工程,以及对CAN总线通信协议CANopen的适配工程。本文将介绍MindSDK中FlexCAN驱动程序及
    的头像 发表于 06-23 15:41 1158次阅读
    <b class='flag-5'>MindSDK</b>中FlexCAN驱动程序及<b class='flag-5'>样</b><b class='flag-5'>例</b>工程

    MindSDK为MM32实现了一组TIM工程

    MindSDK为MM32使用星辰处理器内核的系列微控制器,实现了一组TIM工程,MindSDK中的T
    的头像 发表于 06-30 17:32 862次阅读

    STM32 TIM—基本定时器

    STM32F4xx系列控制器有共有14个TIM定时器。其中2个高级控制定时器TIM1和TIM8、10 个通用定时器TIM2TIM5和TIM9TIM
    的头像 发表于 07-22 17:05 4835次阅读
    STM32 <b class='flag-5'>TIM</b>—基本定时器

    MindSDK应用基础—SPI模块简介

    MindSDK为MM32主流的微控制器,实现了一系列SPI驱动的工程。本文通过讲解 SPI 模块
    的头像 发表于 08-10 17:14 1035次阅读

    MindSDK应用基础—ADC模块

    MindSDK为MM32主流的微控制器,实现了一组ADC工程。本文通过讲解ADC模块
    的头像 发表于 08-17 17:16 895次阅读

    MindSDK应用基础——TIM模块

    MindSDK应用基础——TIM模块
    的头像 发表于 10-25 16:25 548次阅读