OpenEdv-开源电子网

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

定时器4引脚复用后不能进中断,相同的配置方法定时器1没有复用引脚可以进中断,求助,是我哪里配置错了

[复制链接]

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-11-26
在线时间
10 小时
发表于 2015-12-19 09:58:56 | 显示全部楼层 |阅读模式
5金钱
程序如下:
void TIM4_CAP_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
RCC->APB2ENR|=1<<0;    //使能重映射时钟
AFIO->MAPR|=1<<12;  //TIM4通道重映射
RCC->APB2ENR|=1<<5;    //使能PORTD时钟

GPIOD->CRH&=0XFFF0FFFF; //PD12 清除之前设置  
GPIOD->CRH|=0X00080000; //PD12 输入   
GPIOD->ODR|=0<<12; //PD12 下拉

/*捕获1~25Hz*/
//////////////////////////////////////////////////////////
TIM4->ARR=arr;   //周期  
TIM4->SC=psc;   //时基  

TIM4->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1映射到TI1上,不滤波,不分频
  //TIM4->CCMR1|=1<<4; //IC1F=0001 配置输入滤波器 以Fck_int采样,2个事件后有效
  TIM4->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频 

TIM4->CCER|=0<<1; //CC1P=0 上升沿捕获
TIM4->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中

TIM4->DIER|=1<<1;   //允许捕获中断

TIM4->CR1=0x01;      //使能定时器1

MY_NVIC_Init(1,3,TIM4_IRQn,2);//抢占2,子优先级0,组2
/////////////////////////////////////////////////////////////
}

/*TIM4中断服务函数*/
////////////////////////////////////////////////////////////////////// 
u8 CNT=0; //捕获次数

void TIM4_IRQHandler(void)
{    
if(CNT==0)
{
TIM4->CNT=0x0000;
TIM4->SR=0x0000;//清除中断标志位
CNT=1;
}
else
{
TIM1->ARR=TIM4->CNT;
TIM4->SR=0x0000;//清除中断标志位
CNT=0;
}
}

void TIM1_Int_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB2ENR|=1<<2;    //使能PORTA时钟
 
GPIOA->CRH&=0XFFFFFFF0; //PA8 清除之前设置  
GPIOA->CRH|=0X00000008; //PA8 输入   
GPIOA->ODR|=0<<8; //PA8 下拉

  TIM1->ARR=arr;   //周期  
TIM1->SC=psc;   //时基  

TIM1->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1映射到TI1上,不滤波,不分频
  TIM1->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频 

TIM1->CCER|=0<<1; //CC1P=0 上升沿捕获
TIM1->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中

TIM1->DIER|=1<<1;   //允许捕获中断

TIM1->CR1|=0x01;     //使能定时器1

MY_NVIC_Init(1,3,TIM1_CC_IRQn,2);//抢占2,子优先级0,组2  
}
u16 CNT=0;
u16 TIM1CH1_CAPTURE_VAL=0;

void TIM1_CC_IRQHandler(void)   //TIM1中断
{
if(CNT==0)
{
TIM1->CNT=0; //计数器清空
TIM1->CCER|=1<<1; //CC1P=1 设置为下降沿捕获
CNT=1;
}
else
{
TIM1CH1_CAPTURE_VAL=TIM1->CCR1; //获取当前的捕获值.
TIM1->CCER&=~(1<<1); //CC1P=0 设置为上升沿捕获
CNT=0; 
}

TIM1->SR=0;//清除中断标志位
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-19 13:28:47 | 显示全部楼层
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-26
在线时间
4 小时
发表于 2016-1-28 15:30:09 | 显示全部楼层
帮顶帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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