GD32F405RGT6定时器固件库(所有定时器的配置(12个))

2023-11-19

GD32F405RGT6所有定时器的配置

GD32F4XXX系列拥有12个定时器,定时器的类型如下表:

在这里插入图片描述

一般我们可以根据定时器的作用以及类型选取合适的定时器,在这次对GD的单片机而言我就将它所拥有的12个定时器撸了一遍。通用定时器以及高级定时器的配置我都配置成为了PWM输出模式,对于其他功能的配置后续会持续更新。上代码:
1.定时器0(高级定时器):

void Timer0_Init(unsigned short arr, unsigned short psc)
{
	timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;

	rcu_periph_clock_enable(RCU_GPIOA);

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_8);
	
    rcu_periph_clock_enable(RCU_TIMER0);
	
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);

    timer_deinit(TIMER0);
	
	timer_initpara.prescaler         = psc;  	
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;	
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;	
    timer_initpara.period            = arr; 	
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
	timer_initpara.repetitioncounter = 0; 
    timer_init(TIMER0,&timer_initpara);

    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;

    timer_channel_output_config(TIMER0,TIMER_CH_0,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,arr/2);
	
    timer_channel_output_mode_config(TIMER0,TIMER_CH_0,TIMER_OC_MODE_PWM0);
	
    timer_channel_output_shadow_config(TIMER0,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);

    timer_auto_reload_shadow_enable(TIMER0);
	
    timer_enable(TIMER0);
	
	timer_interrupt_flag_clear(TIMER0,TIMER_INT_UP);
	
	timer_interrupt_enable(TIMER0, TIMER_INT_UP);
	
	nvic_irq_enable(TIMER0_UP_TIMER9_IRQn, 0, 2); 
	
}

//中断服务函数 
void TIMER0_UP_TIMER9_IRQHandler(void)
{
	if(timer_interrupt_flag_get(TIMER0,TIMER_INT_FLAG_UP) != RESET)
	{
		 timer_interrupt_flag_clear(TIMER0,TIMER_INT_FLAG_UP);	
	}
	else if(timer_interrupt_flag_get(TIMER9,TIMER_INT_FLAG_UP) != RESET)
	{
		 timer_interrupt_flag_clear(TIMER9,TIMER_INT_FLAG_UP);
	}
}


2.定时器2:通用定时器

void Timer2_Init(unsigned short arr, unsigned short psc)
{
	timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;

	rcu_periph_clock_enable(RCU_GPIOC);
    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

    gpio_af_set(GPIOC, GPIO_AF_1, GPIO_PIN_9);
	
    rcu_periph_clock_enable(RCU_TIMER2);
	
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);

    timer_deinit(TIMER2);
	
	timer_initpara.prescaler         = psc;  	
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;	
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;	
    timer_initpara.period            = arr; 	
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
	timer_initpara.repetitioncounter = 0; 
    timer_init(TIMER2,&timer_initpara);

    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
	timer_channel_output_config(TIMER2,TIMER_CH_3,&timer_ocintpara);
	timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_3,arr/2);
	timer_channel_output_mode_config(TIMER2,TIMER_CH_3,TIMER_OC_MODE_PWM0);timer_channel_output_shadow_config(TIMER2,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE);
    timer_auto_reload_shadow_enable(TIMER2);
    timer_enable(TIMER2);
	timer_interrupt_flag_clear(TIMER2,TIMER_INT_UP);
	timer_interrupt_enable(TIMER2, TIMER_INT_UP);
	nvic_irq_enable(TIMER2_IRQn, 0, 4); 
}

//中断服务函数
void TIMER1_IRQHandler(void)
{
	if(timer_interrupt_flag_get(TIMER1,TIMER_INT_FLAG_UP) != RESET)
	{
		 timer_interrupt_flag_clear(TIMER1,TIMER_INT_FLAG_UP);
	}
}


3.基本定时器:定时器5

void Timer5_Init(unsigned short arr, unsigned short psc)
{
	timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
	rcu_periph_clock_enable(RCU_TIMER5);
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
    timer_deinit(TIMER5);
	timer_initpara.prescaler         = psc;  	
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;	
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;	
    timer_initpara.period            = arr; 	
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
	timer_initpara.repetitioncounter = 0; 
    timer_init(TIMER5,&timer_initpara);
	timer_auto_reload_shadow_enable(TIMER5);
    timer_enable(TIMER5);
	timer_interrupt_flag_clear(TIMER5,TIMER_INT_UP);
	timer_interrupt_enable(TIMER5, TIMER_INT_UP);
	nvic_irq_enable(TIMER5_DAC_IRQn, 0, 7); 
}

定时器2、3、4、8、11、9、10、12皆为通用定时器,配置与定时器1大体相似。定时器6也是基本定时器,其中配置与定时器5大体相同。有不懂的道友,可以参考文末附上的工程链接。

附上完整工程链接:GD32F405RGT6定时器固件库(所有定时器的配置(12个))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32F405RGT6定时器固件库(所有定时器的配置(12个)) 的相关文章

随机推荐

  • 基础篇-常用对称、非对称、摘要加密算法介绍

    本文属于 OpenSSL加密算法库使用系列教程 之一 欢迎查看其它文章 也可以查看 GmSSL国密加密算法库使用系列教程 常见的加密算法可以分成三类 对称加密算法 非对称加密算法 Hash算法 一 对称加密算法 对称加密是使用同一个密钥对信
  • springMVC基于Session实现动态国际化

    1 在spring配置文件中配置资源文件properties的位置及公共名 下列配置指定的properties文件处于src目录下的resources文件夹中 名字为message info properties
  • Unity 反射绑定UI

    ui的名称和定义的字段名要保持一致 using System using System Collections using System Collections Generic using System Linq using System
  • 计算机f g 盘找不到了,电脑E/F盘符突然不见了怎么办

    随着分区工具的普及 越来越多的人起初自己对硬盘重新界定分区 由于目前这些分区软件和平台不兼容造成再次分区的之后 分区会重叠 这会导致以后使用电脑的之后 会时常丢失一个或几个分区 1 首先开启磁盘管理 打开的步骤 右击桌面的计算机界面 管理
  • Compiler- volatile关键字

    为了直观的感受编译器为程序所做的编译优化 我们通过以下的C 程序来进行演示 只能体现编译优化的一小部分hh 请大家预测一下下面代码的输出结果 include
  • didChangeDependencies什么时候被调用

    参考 我先上一个Demo 这个Demo也就是网上面传的比较广的 我们就以这个来举例子说明网上的结论 父级结构中的层级发生变化时didChangeDependencies被调用 这个结论为什么是不完整 import package flutt
  • (2022 COLING)Context-Tuning情景化提示

    论文题目 Title Context Tuning Learning Contextualized Prompts for Natural Language Generation 研究问题 Question 自然语言生成 生成长文本 研究动
  • 5G+边缘计算,对于VR移动电竞游戏来说意味着什么?

    这是一个5G 边缘计算意义的问题 其实对VR游戏 特别是电竞游戏 这类大流量 低延迟的应用服务来说 大多数人第一时间想到的优点会是高达1Gbps s的数据传输速度 虽然事实确实如此 但并不是全部 从技术上讲 无线传输性能的进步能给我们带来更
  • element 可移动dialog

    import Vue from vue v dialogDrag 弹窗拖拽属性 Vue directive dialogDrag bind el binding vnode oldVnode const dialogHeaderEl el
  • ES6数组方法总结

    1 forEach let array 1 2 3 4 array forEach item index array gt console log item forEach会遍历数组 没有返回值 不允许在循环体内写return 不会改变原来
  • 小程序自定义导航栏返回主页

    小程序自定义导航栏返回主页 效果图 在app js中获取状态栏的高度statusBarHeight 自定义组件navbar wxml 自定义组件navbar wxss 自定义组件navbar json 自定义组件navbar js 调用组件
  • 睿智的目标检测60——Tensorflow2 Focal loss详解与在YoloV4当中的实现

    睿智的目标检测60 Tensorflow2 Focal loss详解与在YoloV4当中的实现 学习前言 什么是Focal Loss 一 控制正负样本的权重 二 控制容易分类和难分类样本的权重 三 两种权重控制方法合并 实现方式 学习前言
  • 如何用Stata完成(shui)一篇经济学论文(九):画线性图

    目录 普通线性图 多图并列 一图多线 什么 为什么只讲线形图 因为我只用过线形图 言归正传 我的确只用过线形图 说了跟没说一样 Stata画图给我的感觉一直都是很复杂 很多命令 我觉得好像也没有很多的地方要画图 一般就画个线形图看看趋势 如
  • 2023年,想要年赚百万必懂的道理?

    1 一个人只有经历过风雨沧桑 才会明白一个道理 这个世界最大的监狱就是人的思维 而越狱最好的方式就是人的觉醒 2 人活明白了就会知道 不要拿自己去跟别人比较 后果不是忘记了自己 就是让自己失落 3 如果一个人不向内求 总是拿自己的一点优势去
  • 机器学习可解释性

    20210508 随笔 后续有时间在对概念有了深入理解之后再进行整理 0 引言 今天不想写论文 就想起了之前关注的一个内容 机器学习的可解释性 在之前的时候 或多或少了解这个东西 发现他更多的是从特征的角度来解释 这个特征怎么影响了模型 但
  • python实现货币转换

    实现美元与人民币的转换 2022 4 16 1美元 6 37人民币 moneyStr input 请输入带有标志 RMB rmb USD usd 的钱数 if moneyStr 3 in RMB rmb dollar eval moneyS
  • [java]线程安全问题

    线程安全问题产生有五个产生原因 1 线程的随机调度和抢占式执行 就是这个机制使得线程安全问题产生 2 代码结构 多个线程对同一个变量进行修改 3 原子性 修改操作的是可拆分的 导致脏读问题 4 内存可见性问题 一个线程读一个线程写 5 指令
  • 自定义屏幕保护

    一 设计器页面及代码 Form2 Designer cs namespace 自定义屏保 partial class Form2
  • 直接执行:sudo su 就可以了。

    直接执行 sudo su 就可以了
  • GD32F405RGT6定时器固件库(所有定时器的配置(12个))

    GD32F405RGT6所有定时器的配置 GD32F4XXX系列拥有12个定时器 定时器的类型如下表 一般我们可以根据定时器的作用以及类型选取合适的定时器 在这次对GD的单片机而言我就将它所拥有的12个定时器撸了一遍 通用定时器以及高级定时