【N32L40X】学习笔记10-外部触发方式计数

news2024/11/26 0:57:41

定时器采用外部触发方式计数

也就是外部时钟源模式2

此模式由 TIMx_SMCTRL .EXCEN 选择等于 1。计数器可以在外部触发输入 ETR 的每个上升沿或下降沿

计数。

  1. 极性选择
  2. 分频选择
  3. 过滤选择
  4. 选择外部时钟ETR模式

在这里插入图片描述

bsp_time_counter_ETR.h

#ifndef _BSP_TIME_COUNTER_ETR_H_
#define _BSP_TIME_COUNTER_ETR_H_

#include <stdint.h>
#include "n32l40x.h"
typedef enum
{
	
	TIME2_ETR,
	
	TIME_COUNT_ETR_NUM
}em_tim_count_etr;
//初始化函数
void bsp_timer_count_etr_all_init(void);
//获取计数值
uint32_t bsp_timer_count_etr_get_count(em_tim_count_etr id);


#endif


bsp_time_counter_ETR.c


#include "timer_counter_ETR/bsp_time_counter_ETR.h"
#include "bsp_include.h"


typedef struct
{
    GPIO_Module* gpio_grp;
    uint16_t pin;
    uint32_t gpio_rcc;
    uint8_t gpio_af;

    TIM_Module* time;
  
    uint32_t time_rcc;
    uint16_t irq_x;
    uint32_t period;//重载值
    uint32_t prescaler;//预分频器
    uint8_t it_update;
} time_counter_etr;


static time_counter_etr s_times_etr[TIME_COUNT_ETR_NUM] = {


	{GPIOA,GPIO_PIN_0, RCC_APB2_PERIPH_GPIOA,GPIO_AF5_TIM2,TIM2,RCC_APB1_PERIPH_TIM2,TIM2_IRQn,0xffff,0,1},


};

/**
 * 中断相关初始化.
 */
static void bsp_time_count_etr_nvic_config(time_counter_etr *ptime)
{
    NVIC_InitType NVIC_InitStructure;

    /* Enable the TIM1 global Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel                   = ptime->irq_x;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_ClrIntPendingBit(ptime->time, TIM_INT_UPDATE);
    TIM_ConfigInt(ptime->time, TIM_INT_UPDATE, ENABLE);

}

static void bsp_time_count_etr_rcc_config(time_counter_etr *ptime)
{
    if(ptime->time==TIM1||ptime->time==TIM8)
    {
        RCC_EnableAPB2PeriphClk(ptime->time_rcc, ENABLE);
    }
    else
    {
        RCC_EnableAPB1PeriphClk(ptime->time_rcc, ENABLE);
    }

}


static  void  bsp_time_count_etr_gpio_config(time_counter_etr *ptime)
{
    GPIO_InitType GPIO_InitStructure;
  
    GPIO_InitStruct(&GPIO_InitStructure);
	
	RCC_EnableAPB2PeriphClk(ptime->gpio_rcc, ENABLE);
	
    GPIO_InitStructure.Pin        = ptime->pin;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
    GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
    GPIO_InitStructure.GPIO_Alternate = ptime->gpio_af;
    GPIO_InitPeripheral(ptime->gpio_grp, &GPIO_InitStructure);

}


/**
 * 基本定时器初始化
 */
static void bsp_time_count_etr_init(time_counter_etr *ptime)
{
    TIM_TimeBaseInitType TIM_TimeBaseStructure;

  
  
    bsp_time_count_etr_gpio_config(ptime);
    /* 1.时钟使能 */
    bsp_time_count_etr_rcc_config(ptime);



    /* Time 2.基本配置 */
    TIM_TimeBaseStructure.Period    = ptime->period;
    TIM_TimeBaseStructure.Prescaler = ptime->prescaler;//预分频器
    TIM_TimeBaseStructure.ClkDiv    = 0;
    TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
    TIM_InitTimeBase(ptime->time, &TIM_TimeBaseStructure);



	//配置外部触发
	TIM_ConfigExtClkMode1(ptime->time,TIM_EXT_TRG_PSC_OFF,TIM_EXT_TRIG_POLARITY_NONINVERTED,0);



    //3.使能更新中断
    if(ptime->it_update)
    {
        bsp_time_count_etr_nvic_config(ptime)	;
    }
    /* 4.TIM1 使能计数 */

    TIM_Enable(ptime->time, ENABLE);
}

//一键初始化所有定时器
void bsp_timer_count_etr_all_init(void)
{
    for(int i=0; i<TIME_COUNT_ETR_NUM; i++)
    {
        bsp_time_count_etr_init(s_times_etr+i);
    }
}



uint32_t bsp_timer_count_etr_get_count(em_tim_count_etr id)
{
    uint32_t count;

    if(TIME_COUNT_ETR_NUM>id)
    {
        time_counter_etr *ptime = s_times_etr+id;
        count = TIM_GetCnt(ptime->time);
    }
    return count;
}


//定时器中断集中处理函数
static void bsp_time_count_etr_irq(time_counter_etr *ptime)
{
    if (TIM_GetIntStatus(ptime->time, TIM_INT_UPDATE) != RESET)
    {
        TIM_ClrIntPendingBit(ptime->time, TIM_INT_UPDATE);
    }

}
void TIM2_IRQHandler(void)
{

    bsp_time_count_etr_irq(s_times_etr+TIME2_ETR);

}







本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/782418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32(HAL库)驱动AD8232心率传感器

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置 2.4 GPIO配置 2.5 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代码整合 4 硬件连接 5 效果展示 1、简介 本文通过STM32…

【车载性能优化】将线程进程运行在期望的CPU核心上

车载Android应用开发中&#xff0c;可能会出现一种奇葩的要求&#xff1a;与用户交互时应用需要全速运行&#xff0c;保证交互的流畅性&#xff0c;但是如果应用进入后台就需要怠速运行&#xff0c;让出更多的资源保证系统或前台应用的流畅度。那么基于这种需求&#xff0c;我们…

深度学习(31)——DeformableDETR(2)

深度学习&#xff08;31&#xff09;——DeformableDETR&#xff08;2&#xff09; 文章目录 深度学习&#xff08;31&#xff09;——DeformableDETR&#xff08;2&#xff09;1. backbone——Resnet502. neck——Channel mapper3. DeformableDETRHead4. DeformableDetrTransf…

Linux:多进程和多线程回环socket服务器和客户端

多进程socket服务器代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <ctype.h> #include <sys/wait.h> #i…

JWT 使用

前端访问后台a系统和b系统访问 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。 JWT的本质就是一个…

记录安装DragGAN遇到的问题

首先第一个是安装的问题 安装的envirenment.yml有很多包过时了下载不了&#xff0c;可以参考以下文章写一个requirement.txt来下载依赖环境 --extra-index-url https://download.pytorch.org/whl/cu118 numpy1.23.5 click scipy pillow9.5.0 requests tqdm4.65.0 ninja matpl…

哪些语句会被waf屏蔽?

什么是waf&#xff1a;Web应用防火墙&#xff0c;Web Application Firewall的简称。 waf的功能&#xff1a;WAF可以发现和拦截各类Web层面的攻击&#xff0c;记录攻击日志&#xff0c;实时预警提醒&#xff0c;在Web应 用本身存在缺陷的情况下保障其安全。 封IP &#xff1a;…

Qt应用开发——QLineEdit

目录 一、概述 二、属性和方法 三、信号 一、概述 QLineEdit允许用户输入和编辑单行纯文本&#xff0c;并可以使用快捷编辑功能&#xff0c;包括复制、粘贴、剪切和拖放。是项目开发中最常用的输入控件。 默认键绑定描述如下。 Left Arrow //将光标向左移…

Fourier变换极其应用(Brad G. Osgood)——第1章——Fourier级数

目录 第1章 Fourier级数 1.1 选择&#xff1a;“欢迎入局”(Choices: Welcome Aboard) 1.2 周期性现象(Periodic phenomena) 1.2.1 时间和空间(time and space) 1.2.1.1 时间和空间周期性在波动中最自然地结合在一起 1.2.1.2 更多关于空间的周期性例子 1.2.2 定义&…

11 简单的Thymeleaf语法

11.1 spring-boot环境准备 重要依赖&#xff1a; <!--thymeleaf--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 11.2 转发消息不转义 就是如…

picgo Request failed with status code 404

今天写picgo的时候&#xff0c;出现了一个错误&#xff0c;如何解决&#xff1a; 这里是repo的配置出现了问题&#xff0c;不过我的是因为粗心&#xff0c;把master写成了mater&#xff0c;emmmm 这里的repo要跟仓库的地址相同就是这一块&#xff1a;把这一块填到repo就行 然…

Linux查看二进制文件

Linux查看二进制文件 hexdump、hd、od、xxd hexdump、hd 可以使用16进制、10进制、8进制、ascii码的形式查看文件。 执行 ls -al which hd就会看到hd其实只是hexdump的一个软链接。 使用man hexdump&#xff0c;可以查看hexdump的各种参数。 -b, --one-byte-octal 单字节…

使用SQL JOIN语句把来自两个或多个表的行结合起来

先创建一个表&#xff1a; 创建一个名为 websites 的表 CREATE TABLE websites ( id int, name varchar(255), url varchar(255), alexa varchar(255), country varchar(255) ); 然后给它插入一些数据&#xff08;插入了四行新数据&#xff09;&#xff1a; insert into we…

详解go的hex.Encode原理

简言 今天看nsq的messageID生成的时候&#xff0c;发现它使用了hex.Encode函数来产生编码&#xff0c;那就顺道研究一下这个编码方式。 原理 hex是16进制的意思&#xff0c;encode是进行编码的意思&#xff0c;内部实现也很简单&#xff0c;就是 每4位计算出十六进制的值&a…

Idea项目初始化配置

Idea项目初始化配置 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助请帮我…

Node.js: express + MySQL实现修改密码

实现修改密码&#xff0c;本篇文章实现修改密码只考虑以下几个方面&#xff1a; &#xff08;1&#xff09;&#xff0c;获取旧密码 &#xff08;2&#xff09;&#xff0c;获取新密码 &#xff08;3&#xff09;&#xff0c;将获取到的旧密码与数据库中的密码进行比对&#xf…

IC 后端 corner 介绍

在数字IC后端&#xff0c;有对晶体管的偏差建模的PVT corner&#xff0c;以及对互连线偏差建模的RC corner。 芯片的延迟一般受到三个因素的影响&#xff1a;工艺&#xff08;Process&#xff09;、电压&#xff08;Voltage&#xff09;、温度&#xff08;Temperature&#xff…

rabbitmq是什么?rabbitmq安装、原理、部署

rabbitmq是什么&#xff1f; MQ的全称是Messagee Queue&#xff0c;因为消息的队列是队列&#xff0c;所以遵循FIFO 先进先出的原则是上下游传递信息的跨过程通信机制。 RabbitMQ是一套开源&#xff08;MPL&#xff09;新闻队列服务软件由 LShift 提供的一个 Advanced Messag…

linux学成之路(基础篇)(二十一)nfs服务器

前言 NFS是Network File System的缩写&#xff0c;它是一种在计算机网络中共享文件和文件系统的协议。NFS允许不同的计算机系统之间通过网络访问、读取和写入远程文件&#xff0c;就像访问本地文件一样。它是一种基于客户端-服务器体系结构的协议&#xff0c;其中一个计算机充当…

Python(三十五)pass语句

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…