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

news/2024/11/20 7:01:20/
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//timer2timer_parameter_struct timer_initpara;rcu_periph_clock_enable(RCU_TIMER3);	//开时钟,(TM1是CK_APB1;TM0是CK_APB2)*1/2/4,最大是300Mrcu_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=15khztimer_initpara.prescaler = 999;//29999;						//10k,1个clk周期100ustimer_initpara.alignedmode = TIMER_COUNTER_EDGE;		//边沿对齐timer_initpara.counterdirection = TIMER_COUNTER_UP;		//往上++计数,从0+到19999共 20000个周期//timer_initpara.period = 14999;							//周期?:10000/15k=666.6667mstimer_initpara.period = (15000 - 1);						//中断1s钟,1.5s试试:配置的是自动重装寄存器CARtimer_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.ppmy.cn/news/1548435.html

相关文章

kafka-clients之max.block.ms

max.block.ms 是 Kafka 客户端Producer配置中的一个参数,决定了客户端阻塞的最大时间。当生产者调用某些方法(如 send() )时,如果客户端在内部遇到某些资源(如元数据或可用的缓冲区空间)不可用,…

关于adb shell登录开发板后terminal显示不完整

现象 今天有个同事跟我说,adb shell 登录开发板后,终端显示不完整,超出边界后就会出现奇怪的问题,比如字符覆盖显示等。如下图所示。 正常情况下应该如下图所示: 很明显,第一张图的显示区域只有完整区域…

自己编写的前后端分离程序,解决跨域问题

跨域问题在前端解决很麻烦,既然前后端都是自己编写的,就直接在后端解决了。 1. 后端中 在controller文件中加上 CrossOrigin // 解决跨域问题,不加的话虽然数据能正常传输,但是前端页面会没有正常响应 2. 前端中 可以正常访问…

Mac安装Docker Desktop搭建K8s集群,解决镜像无法下载的问题

使用 Docker Desktop可以在本地方便地搭建出 K8s集群,但开启 K8s集群后往往会遇到 K8s 镜像拉取失败问题,本文旨在解决该问题,从而在本地搭建 K8s 集群。 安装Docker Desktop 安装 Docker Desktop 建议安装历史版本, 不建议安装最新版。因为…

CentOS使用中遇到的问题及解决方法

一、CentOS 7网络配置(安装后无法联网问题) 现象说明 在安装CentOS系统后,有可能出现无法联网的问题,虚拟机中的网络配置并没有问题,而系统却无法联网,也ping不同。 原因描述 CentOS默认开机不启动网络,因…

vmware虚拟机安装Windows11提示电脑不符合要求?

vmware虚拟机安装Win11提示电脑不符合要求? 安装问题能进入选择语言界面,请看这不能进入选择语言界面,请看这 安装问题 Vmware虚拟机安装Windows11时提示电脑不符合要求,如下: 修改了虚拟机的硬件配置还是不行&#x…

【Linux从青铜到王者】详解ip协议(待完善)

前言 之前我们讲的udp和tcp协议,是处于传输层的协议 而ip协议,是处于传输层下面的网络层的协议 一个报文传输的时候,表面上是一个主机的传输层运输到另一个主机的传输层,本质是其实是由应用层不断向下交付到数据链路层&#xff…

CTFL(六)测试工具

测试工具 测试自动化(test automation) 测试活动中的工具支持 测试工具支持并促进许多测试活动。示例包括但不限于: 管理工具 — 通过促进 SDLC、需求、测试、缺陷和配置的管理,提高测试过程的效率。静态测试工具 — 支持测试人…