当前位置: 首页 > article >正文

【MCU】GD32H7定时器使用外部时钟源

1、定时器可以使用系统内部的mcuclk,也可以通过管脚使用外部输入的时钟源
2、GD32H7怎么使用外部的源来驱动定时器呢
3、GD32H7通用定时器的框图如下:

这是官方手册上的图,不得不说,画的不够详细,只是一个大概的框图,内部细节完全不知。具体的通路如下:

4、选择与配置:

我们选择这个模式

看寄存器TSCFG6[4:0],,说明如下:

滤波后的通道只有0,1啊,没有2,3通道。

所以CH2,CH3通道没法选择,实测也是这样,选择2通道时,定时器无法正常工作,在这里调试浪费了很多时间,大坑啊

5、代码

1》配置外部管脚属性:Timer3的CH1通道,映射到PD13上

2》配置定时器,通用的

3》配置通道采样属性

4》选择通道和模式:这里选择CI1通道,外部事件0模式

具体的:

	//输入频率引脚配置,选择PD13-af2,作为定时器3的ch1通道为时钟输入源
	rcu_periph_clock_enable(RCU_GPIOD);
	gpio_mode_set(IO_MCUTM3_ExTCLK_Port, GPIO_MODE_AF, GPIO_PUPD_NONE, IO_MCUTM3_ExTCLK_Num);
	gpio_output_options_set(IO_MCUTM3_ExTCLK_Port, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, IO_MCUTM3_ExTCLK_Num);
	gpio_af_set(IO_MCUTM3_ExTCLK_Port, GPIO_AF_2, IO_MCUTM3_ExTCLK_Num);		//TIMER3_CH1

	//timer2
	timer_parameter_struct timer_initpara;
	rcu_periph_clock_enable(RCU_TIMER3);	//开时钟,(TM1是CK_APB1;TM0是CK_APB2)*1/2/4,最大是300M
	rcu_periph_clock_enable(RCU_SYSCFG);
	//	nvic_irq_enable(TIMER1_IRQn, 2, 0);		//设置中断优先级
	timer_deinit(STP_Timer);
	/* TIMER configuration */
	timer_struct_para_init(&timer_initpara);
	//timer_initpara.prescaler = 19999;						//预分频值,300M/20k = 300 000 000 /20 000 = 300 000/20 = 15 000HZ=15khz
	timer_initpara.prescaler = 999;//29999;						//10k,1个clk周期100us
	timer_initpara.alignedmode = TIMER_COUNTER_EDGE;		//边沿对齐
	timer_initpara.counterdirection = TIMER_COUNTER_UP;		//往上++计数,从0+到19999共 20000个周期
	//timer_initpara.period = 14999;							//周期?:10000/15k=666.6667ms
	timer_initpara.period = (15000 - 1);						//中断1s钟,1.5s试试:配置的是自动重装寄存器CAR
	timer_initpara.clockdivision = TIMER_CKDIV_DIV1;		//clk分频系数,1分频
	timer_initpara.repetitioncounter = 200;					//更新事件的产生速率,重复计数器计数值减为 0 时产生更新事件,TM1好像没有,这里无需配置
	timer_init(STP_Timer, &timer_initpara);	//600多ms的中断



	/* TIMER3 CH1 input capture configuration */
	timer_ic_parameter_struct timer_icinitpara;
	//timer_channel_input_struct_para_init(&timer_icinitpara);
	timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING;
	timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
	timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
	timer_icinitpara.icfilter = 0x01;
	timer_input_capture_config(STP_Timer, TIMER_CH_0, &timer_icinitpara);

	/* slave mode selection : TIMER3 */
	/* TIMER3 input trigger : external trigger connected to CI1*/
	timer_input_trigger_source_select(STP_Timer, /*TIMER_SMCFG_TRGSEL_CI0FE0*/TIMER_SMCFG_TRGSEL_CI1FE1);
	timer_slave_mode_select(STP_Timer, TIMER_SLAVE_MODE_EXTERNAL0);
	
	/* auto-reload preload enable */
	timer_auto_reload_shadow_enable(STP_Timer);

	/* auto-reload preload enable */
	timer_enable(STP_Timer);

这里没有配置中断,可以自己添加中断使能


http://www.kler.cn/a/401580.html

相关文章:

  • pytest结合allure做接口自动化
  • NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐
  • 一些任务调度的概念杂谈
  • vue 常用特性 ( 计算属性 | 侦听器 | 过滤器 )
  • [代码随想录Day16打卡] 找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树
  • linux004.在ubuntu中smb.conf配置文件中配置内容详解
  • 01 IP路由基础
  • 集群聊天服务器(13)redis环境安装和发布订阅命令
  • 电子应用设计方案-13:智能消毒柜系统方案设计
  • 【LangChain】LangChain框架快速入门
  • html本地离线引入vant和vue2(详细步骤)
  • 《Python制作动态爱心粒子特效》
  • 【C语言】操作符2(含操作符的应用)
  • 小学知识相关链接
  • 阿里云轻量应用服务器可以用在哪些场景呢
  • 《YOLO:目标检测领域的璀璨之星》
  • 网络安全之信息收集-实战-2
  • 青训营刷题笔记09
  • 【mongodb】社区版8:改变配置bindip和授权
  • Spire.PDF for .NET【页面设置】演示:更改 PDF 页面大小
  • 外汇市场中的羊群效应:如何克服盲目追随
  • CC工具箱使用指南:【CAD导出界址点Excel】
  • Windows多JDK版本管理工具JVMs
  • 了解鱼叉式网络钓鱼攻击的社会工程学元素
  • 软件工程期末复习-用例建模
  • 适应等保的Windows系统和Linux系统安全加固V1.2.0版本