首页 > 其他分享 >GD32F407 timer延迟函数,非中断

GD32F407 timer延迟函数,非中断

时间:2023-03-06 16:58:20浏览次数:37  
标签:prescaler GD32F407 TIMER DELAY timer time ptr 延迟

void dri_timer_delay_init(dri_timer_calc_type type)
{
	timer_parameter_struct ptr_time;
	
	rcu_periph_clock_enable(PERIPH_DELAY_TIMER);
	rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
	
	timer_deinit(DELAY_TIMER);
    
    /* Time base configuration */
    ptr_time.clockdivision = TIMER_CKDIV_DIV1;
    ptr_time.counterdirection = TIMER_COUNTER_DOWN;
    ptr_time.period = 1;
	
	if(type == DRI_TIMER_CALC_TYPE_S)	
    {	
		//预分频 168MHz / 1680 = 100kHz(1ms),计数值设置为1000则为1S延时
		ptr_time.period = 1000;
        ptr_time.prescaler = 1680-1; 	
    } 
	else if(type == DRI_TIMER_CALC_TYPE_MS)	
    {	
        ptr_time.prescaler = 1680-1; //100kHz ,定时器计数1次为ms
    }
	else if(type == DRI_TIMER_CALC_TYPE_US)
    {	
        ptr_time.prescaler = 168-1; //1MHz ,计数1次为us  
    }
	else  
    {  
        ptr_time.prescaler = 1680-1;  
    } 
	
    timer_init(DELAY_TIMER, &ptr_time);
	
    
    /* TIM interrupt enable */
//    __TIM_INTR_ENABLE(DELAY_TIMER, TIM_INTR_UPDATE);
    
    /* TIM enable */
    timer_enable(DELAY_TIMER);
}

/************************************************
函数名称 : TIMDelay_us
功    能 : 定时器延时 N us
参    数 : Times --- N值
返 回 值 : 无
作    者 :
*************************************************/
void dri_timer_delay_us(uint32_t Times)	
{  	
    uint32_t counter = Times & 0xFFFFFFFF;
 	
	TIMER_CNT(TIMER3) = counter; //设置计数值
    TIMER_CTL0(TIMER3) |= TIMER_CTL0_CEN;  	
    while(TIMER_CNT(TIMER3) > 1);
 	TIMER_CTL0(TIMER3) &= (uint16_t)(~TIMER_CTL0_CEN);
}

纯属记录学习,如有问题,欢迎指正!

标签:prescaler,GD32F407,TIMER,DELAY,timer,time,ptr,延迟
From: https://www.cnblogs.com/blog-xh/p/17184460.html

相关文章

  • GD32F407 ADC+DMA
    #defineVDDA_APPLI((uint32_t)3300)/*ValueofanalogvoltagesupplyVdda(unit:mV)*/#defineRANGE_12BITS((uint8......
  • .NET7依赖注入 延迟加载模式
    .NET7依赖注入延迟加载模式延迟加载(LazyLoading)模式是指在服务被首次请求时,才对其进行初始化。这种模式可以减少程序启动时间和资源消耗。示例代码如下://MyService类......
  • always非阻塞赋值延迟的周期数
    always@(posedgeclkornegedgerst_n)if(!rst_n)beginin_reg=0;out=0;endelsebeginin_reg<=in;out<=in_reg;end    分析:中间变量in_reg在in......
  • alarm和setitimer
    Linux提供了alarm系统调用和SIGALRM信号。alarm系统调用unsignedintalarm(unsignedintseconds);​-功能:设置定时器(闹钟)。函数调用,开始倒计时,当倒计时为0......
  • Android的延迟实现的几种解决方案以及原理分析
    写这篇文章的目的,是看到群里有人在实现延迟的时候,用如下的第四种方法,个人感觉有点不妥,为了防止更多的人有这种想法,所以自己抽空深入分析,就分析的结果,写下此文,希望对部分人......
  • 延迟队列实现订单超时自动取消
    在上一篇Java实现订单未支付超时自动取消,使用Java自带的定时任务TimeTask实现订单超时取消,但是有小伙伴提出这种实现,会有以下几个问题:线上服务挂了,导致服务下所有的定......
  • 2023年排名Top 5的 React 延迟加载库!
    2023年排名Top5的React延迟加载库!原创2023-02-2406:20·高级前端进阶大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,......
  • 目标库DML 堵塞(dblink)导致OGG延迟
    [[toc]]#问题概述xx库OGG延迟超过8个小时,但进程处于RUNNING。#问题原因定位到有人通过A库的DBLINK修改目标库的数据。OGG同步的表,目标的端也在做修改相同数据,无法保证......
  • PHP基于Redis实现延迟队列
    PHP基于Redis实现延迟队列标签(空格分隔):php,redis,linux解决思路1.基于Redis过期key事件2.基于RedisZset特征处理Redis-ZsetZset首先它是一个set,这保证了内部......
  • 如何实现延迟任务,这11种方式才算优雅!
    大家好,我是三友~~延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。所以本篇文章就来从实现到原理来盘点延迟任务的11种实......