首页 > 编程语言 >HAL库源码移植与使用之高级定时器REP寄存器

HAL库源码移植与使用之高级定时器REP寄存器

时间:2024-07-11 14:29:54浏览次数:11  
标签:handle npwm HAL REP TIM 源码 chy timx

高级定时器的溢出中断信号与更新要想输出,要经过一个重复计数寄存器,该寄存器由REP控制并由TIMX_RCR控制计数值

它的原理是计数器每次上溢或下溢而输出中断信号和更新都能使重复计数器值减1,减到0时,再发生一次溢出就会产生更新事件

所以如果设置RCR为N, 更新事件将在N+1 次溢出时发生输出中断与更新

其最总共八位所以最多输出255+1个pwm波形

要注意的是,高级定时器想要正常运行需要将MOE位置一,该步骤在初始化定时器时若为高级定时器会自动打开

#include "./BSP/TIMER/atim.h"


TIM_HandleTypeDef g_timx_npwm_chy_handle;     /* 定时器x句柄 */

static uint8_t g_npwm_remain = 0;

 /* 高级定时器TIMX 通道Y 输出指定个数PWM 初始化函数 */
void atim_timx_npwm_chy_init(uint16_t arr, uint16_t psc)
{
    TIM_OC_InitTypeDef timx_oc_npwm_chy = {0};

    g_timx_npwm_chy_handle.Instance = TIM8;                            /* 定时器x */
    g_timx_npwm_chy_handle.Init.Prescaler = psc;                       /* 定时器分频 */
    g_timx_npwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP;      /* 递增计数模式 */
    g_timx_npwm_chy_handle.Init.Period = arr;                          /* 自动重装载值 */
    g_timx_npwm_chy_handle.Init.RepetitionCounter = 0;                 /* 重复计数器初始值 */
    HAL_TIM_PWM_Init(&g_timx_npwm_chy_handle);                         /* 初始化PWM */


    timx_oc_npwm_chy.OCMode = TIM_OCMODE_PWM1;                         /* 模式选择PWM 1*/
    timx_oc_npwm_chy.Pulse = arr / 2;                                  /* 设置比较值,此值用来确定占空比 */
                                                                       /* 这里默认设置比较值为自动重装载值的一半,即占空比为50% */
    timx_oc_npwm_chy.OCPolarity = TIM_OCPOLARITY_HIGH;                 /* 输出比较极性为高 */
    HAL_TIM_PWM_ConfigChannel(&g_timx_npwm_chy_handle, &timx_oc_npwm_chy, TIM_CHANNEL_1);

    __HAL_TIM_ENABLE_IT(&g_timx_npwm_chy_handle, TIM_IT_UPDATE);
    HAL_TIM_PWM_Start(&g_timx_npwm_chy_handle, TIM_CHANNEL_1);
}

/* 定时器 PWM输出 MSP初始化函数 */
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM8)
    {
        GPIO_InitTypeDef gpio_init_struct;
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_TIM8_CLK_ENABLE();

        gpio_init_struct.Pin = GPIO_PIN_6;
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;        /* 推挽式复用功能 */
        gpio_init_struct.Pull = GPIO_PULLUP;            /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;  /* 高速 */
        HAL_GPIO_Init(GPIOC, &gpio_init_struct);
        
        HAL_NVIC_SetPriority(TIM8_UP_IRQn, 1, 3);
        HAL_NVIC_EnableIRQ(TIM8_UP_IRQn);
    }
}

/* 高级定时器TIMX NPWM设置PWM个数函数 */
void atim_timx_npwm_chy_set(uint8_t npwm)
{
    if(npwm == 0) return;
    
    g_npwm_remain = npwm;
    HAL_TIM_GenerateEvent(&g_timx_npwm_chy_handle, TIM_EVENTSOURCE_UPDATE);
    __HAL_TIM_ENABLE(&g_timx_npwm_chy_handle);
}

/* 定时器8中断服务函数 */
void TIM8_UP_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&g_timx_npwm_chy_handle);
}

/* 定时器更新中断回调函数 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM8)
    {
        if(g_npwm_remain)
        {
            TIM8->RCR = g_npwm_remain - 1;
            HAL_TIM_GenerateEvent(&g_timx_npwm_chy_handle, TIM_EVENTSOURCE_UPDATE);
            __HAL_TIM_ENABLE(&g_timx_npwm_chy_handle);
            g_npwm_remain = 0;
        }
        else
        {
            TIM8->CR1 &= ~(1 << 0);
        }
    }
}


标签:handle,npwm,HAL,REP,TIM,源码,chy,timx
From: https://blog.csdn.net/2301_80317247/article/details/140347452

相关文章

  • HAL库源码移植解析与使用之捕获
    而且函数HAL__TIM_IRQHANDLER()函数里面也是放置了判断所有tim中会产生中断的标志位,然后执行该中断的回调函数callback并清除标志位#include"./BSP/TIMER/gtim.h"TIM_HandleTypeDefg_timx_cap_chy_handle;/*定时器x句柄*//*通用定时器通道y输入捕获初始化函......
  • HAL库源码移植与使用之HAL库中断机制剖析
    经过一段时间的学习,我对HAL库自带的中断回调机制深恶痛绝,个人认为你可以把HAL库当成标准库去编写,形成你自己的编译风格,不用执行HAL库官方给的模板。HAL库中断函数回调机制:首先每个芯片的中断处理机制都是一样的,一样的中断头,一样的存储地址块比如:HAL库中的voidTIM5_IRQHandl......
  • 零基础STM32单片机编程入门(十三) 红外避障传感器模块实战含源码
    文章目录一.概要二.红外避障模块主要参数1.模块引脚定义2.模块特点3.模块原理图三.STM32单片机红外避障模块检测实验四.CubeMX工程源代码下载五.小结一.概要红外避障模块具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测遇到障碍物时,红外线反射回来......
  • PlugLink 与 AI 大模型:深入 COZE API 链接实践(附源码)
    在这个技术日新月异的时代,AI不再是遥不可及的概念,而是逐渐成为我们日常生活与工作中不可或缺的一部分。作为技术领域的探路者,我深感荣幸地向大家介绍PlugLink——一个旨在简化AI应用集成并促进跨领域协作的开源平台,以及它如何与AI大模型及COZEAPI完美握手,共同编......
  • PlugLink的技术架构实例解析(附源码)
    在探讨PlugLink这一开源应用的实际应用与技术细节时,我们可以从其构建的几个核心方面入手,结合当前AI编程的发展趋势,为您提供既有实例又有深度解析的内容。PlugLink的技术架构实例解析前端技术选型——layui框架:PlugLink选择了轻量级且功能丰富的layui作为前端框架,它提......
  • AI 助力开发者:PlugLink 如何让技术与创意无缝对接(附源码)
    AI助力开发者:PlugLink如何让技术与创意无缝对接PlugLink,它是如何利用AI的力量简化开发流程,提升开发效率的。想象一下,当你手握一个工具,可以让你在不懂全部技术细节的情况下就能快速构建出复杂的应用,这该有多酷!首先,让我们从PlugLink的基本概念入手。如同其名,PlugLink是一......
  • 基于javaweb jsp ssm汽车服务商城系统设计与实现+vue录像(源码+lw+部署文档+讲解等)
    前言......
  • Springboot智能购房推荐系统 毕业设计-附源码09040
    摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智能购房推荐系统主要针对房屋......
  • ssm学科竞赛管理系统 毕业设计-附源码08604
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对学科竞赛管......
  • SSM电商微信小程序 毕业设计-附源码09228
    摘 要随着微信小程序的使用越来越广泛,在传统的商业模式中,对于各类生活日常商品,人们习惯于到各种商家店铺购买。然而在快节奏的新时代中,人们不一定能为购买商品腾出时间,更不会耐心挑选自己想要的商品。所以设计一个电商微信小程序,既是迎合电子商务的大潮流,也是传统商品行业......