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

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

也就是外部时钟源模式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.mzph.cn/news/7811.shtml

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

相关文章

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…

在Ubuntu 系统下开发GUI,用哪种开发工具比较好?

在Ubuntu系统下开发GUI&#xff0c;你可以考虑使用以下几种开发工具&#xff1a;Qt Creator&#xff1a;Qt Creator是一个跨平台的集成开发环境&#xff0c;专门用于开发基于Qt框架的应用程序。它提供了丰富的图形界面设计工具和代码编辑器&#xff0c;支持C和QML编程。Qt Crea…

UI 自动化稳定性用例实战经验分享!

目录 前言&#xff1a; 大家常说 UI 自动化不稳定&#xff0c;那又如何提高稳定性呢&#xff1f; 操作界面非预期的弹框、广告、浮层 测试系统的 A/B 策略 总结&#xff1a; 前言&#xff1a; 稳定性测试是软件测试的一个重要方面&#xff0c;它旨在评估软件在不同负载和…

一起学SF框架系列5.8-spring-Beans-注解bean解析4-bean解析

前面三节主要讲了如何加载注解Bean的BeanDefinition&#xff0c;执行环节是在DefaultBeanDefinitionDocumentReader.parseBeanDefinitions中用BeanDefinitionParserDelegate.parseCustomElement(ele)加载的&#xff0c;实际上没对注解真正进行解析。本节主要讲述注解bean如何被…

Mysql关于进程中的死锁和解除锁

Mysql 经常会遇到语句或者存储过程长时间没有反应&#xff0c;大概率就是挂掉了&#xff0c;或者死锁了。 可通过如下几种方式来查看当前进程状态 1. 查询数据库所有的进程状态 SHOW PROCESSLIST SELECT * FROM information_schema.PROCESSLIST; 2. 查询在锁的事务 SELECT…

opencv 图像腐蚀膨胀 erode dilate

#include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dstbin, distancetransform,rel, rel2;img imread("m3.jpg");//转为灰度图cvtColor(img, dst, COLOR_BGR2GRAY);//二…

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09;从Vue2到Vue3【二】Composition API&#xff08;第二章&#xff09;从Vue2到Vue3【三】Composition API&#xff08;第三章&#xff09;从Vue2到Vue3【四】C…

网络通信原理(第十八课)

网络通信原理(第十八课) 4.1 回顾 1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网…

10分钟内入门 ArcGIS Pro

本文来源&#xff1a;GIS荟 大家好&#xff0c;这篇文章大概会花费你10分钟的时间&#xff0c;带你入门 ArcGIS Pro 的使用&#xff0c;不过前提是你有 ArcMap 使用经验。 我将从工程文件组织方式、软件界面、常用功能、编辑器、制图这5个维度给大家介绍。 演示使用的 ArcGI…

【Nodejs】nodejs内置模块(中)

1.路劲处理模块 path 1.1 模块概览 在nodejs中&#xff0c;path是个使用频率很高&#xff0c;但却让人又爱又恨的模块。部分因为文档说的不够清晰&#xff0c;部分因为接口的平台差异性。将path的接口按照用途归类&#xff0c;仔细琢磨琢磨&#xff0c;也就没那么费解了。 1.…

计算机网络模型

计算机网络模型 网络模型网络模型中各层对应的协议封装与分用TCP/IP协议簇的组成 网络模型 OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP四层模型 应用层、传输层、网络层、网络接口层 TCP/IP五层模型 应用层、传输层、网络层、数据链路…

iOS transform rotate总结

研究了一下transform的旋转设置&#xff0c;调了半天还以为是旋转写错了&#xff0c;发现是两个不同的view对象写错了&#xff0c;不管怎么说&#xff0c;还是记录一下旋转相关的操作吧。 参数都是弧度。 以一个图片来举例。 let img UIImageView.init() img.image UIImage…

k8s集群环境的搭建

1.环境规划 1.1 集群类型 Kubernetes集群大致分为两类&#xff1a;一主多从和多主多从。 一主多从&#xff1a;一个Master节点和多台Node节点&#xff0c;搭建简单&#xff0c;但是有单机故障风险&#xff0c;适合用于测试环境。 多主多从&#xff1a;多台Master和多台Node节点…

ubuntu与windows之间的文件共享

最近在做项目&#xff0c;需要用到ubuntu进行代码编译生成可执行文件&#xff0c;但是我个人阅读和编写代码喜欢用source insight这个软件IDE。安利一下这个软件&#xff0c;阅读代码和编辑代码真的很棒啊&#xff0c;谁用谁知道吧&#xff01; 由于在ubuntu中安装source insig…

RocketMQ基本概念与入门

文章目录 MQ基本结构依赖案例:productConsumer 核心概念1.nameserver2.broker3.主题队列4.queue队列5. 生产者6.消费者分组和生产者分组7.消费点位 MQ基本结构 message: 消息数据对象product: 程序代码,生成消息,发送消息到队列consumer: 程序代码,监听(绑定)队列,获取消息,执行…

全志F1C200S嵌入式驱动开发(spi-nor image制作)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 一般soc系统里面添加spi-nor flash芯片,特别是对linux soc来说,都是把它当成文件系统来使用的。spi-nor flash和spi-nand flash相比,虽然空间小了点,但是胜在稳定,这是很多工业…

(二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】 文章目录 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】**安装Erlang**安装RabbitMQ账户管理管控台Docker安装RabbitM…

大数据技术之Hive2

目录标题 3、Hive 数据类型3.1 基本数据类型&#xff1a;3.2 集合数据类型&#xff1a;3.3 类型转化 4、DDL数据定义4.1 创建数据库4.2 查询数据库4.3 创建表4.4 管理表4.5 外部表4.6 管理表与外部表的相互转换4.7 分区表4.7.1 分区表基本操作4.7.2 分区表注意事项 4.7 修改表4…

【后端面经】微服务架构(1-4) | 降级:为什么每次大促的时候总是要把退款之类的服务停掉?

文章目录 一、 前置知识1、什么是降级?2、降级的典型应用3、为什么要降级?4、降级的分类5、如何降级?A) 降级的应用场景B) 跨服务降级C) 提供有损服务二、面试环节1、面试准备2、基本流程3、亮点方案A) 读写服务降级写服务B) 快慢路径降级慢路径三、章节汇总 在熔断章…

Flutter Widget Life Cycle 组件生命周期

Flutter Widget Life Cycle 组件生命周期 视频 前言 了解 widget 生命周期&#xff0c;对我们开发组件还是很重要的。 今天会把无状态、有状态组件的几个生命周期函数一起过下。 原文 https://ducafecat.com/blog/flutter-widget-life-cycle 参考 https://api.flutter.dev/f…