OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6816|回复: 1

求教关于定时器中断服务函数的使用

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2012-11-6
在线时间
7 小时
发表于 2012-11-28 21:19:45 | 显示全部楼层 |阅读模式

写了一个如下定义的函数

int CountdownTimer_Init(u32 settime,u32 period,FunType fp)
{
    
if (countdowntimer_on==TRUE) return 1;//计时器正被使用
    countdowntimer_on=TRUE;
    
tick_settime=settime;
    
RCC->APB1ENR|=1<<2;//TIM4时钟使能
    TIM4->ARR=10000*period;  //设定计数器自动重装值//刚好1ms    
    TIM4->PSC=Clock_PLL*800;  //预分频器,得到10Khz的计数时钟
    //这两个东东要同时设置才可以使用中断
    TIM4->DIER|=1<<0;   //允许更新中断                
    TIM4->DIER|=1<<6;   //允许触发中断
                                        
    
TIM4->CR1|=0x01;    //使能定时器4
  MY_NVIC_Init(2,3,TIM4_IRQChannel,2);//抢占1,子优先级3,组2    

    
tick_start=tick_now;
    
funcp=fp;
    
return 0;
}

void TIM4_IRQHandler(void)
{
    
tick_now++;
    
(*funcp)();
    
TIM4->SR&=~(1<<0);//清除中断标志位     
    if(tick_now-tick_start>=tick_settime) 
    
{
        
RCC->APB1RSTR|=1<<2;//TIM4复位
        RCC->APB1RSTR&=~(1<<2);
        
countdowntimer_on=FALSE;
    
}
}


这样可以通过fp传入另外的函数指针来实现相应的中断服务

现在的问题是函数指针在声明的时候形式就已经定死了,也没法传入不同的参数个数
有什么方法能使中断服务可以灵活地执行不同形式的外部函数?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-28 23:31:56 | 显示全部楼层
参考下printf的实现方法
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表