想要实现 当发生外部中断时 就是一个高低电平跳动时 芯片记录两个中断之间的时间差
另一个还要实现 1秒钟内有几次发生中断
STM32F103vet6中断程序实现
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- suqingxiao 2022-01-06 15:36关注
#define TainIn PBin(8) // PB8 u16 Rise_value=0; u16 Fall_value=0; u16 Duty_value=0; u16 OldRise_value=0; u16 num=0;//中断次数 TIM5_TIM_Init((65535),(27-1)); /*定时器5初始化*/ void Timer5_Init(u16 arr,u16 psc) { RCC->APB1ENR|=1<<3; //TIM5 时钟使能 TIM5->ARR=arr;//设定计数器自动重装值 TIM5->PSC=psc;//预分频器不分频 TIM5->CR1|=0x01; //使能定时器5 } /*外部中断用于PWM输入口*/ void EXTIX_Init(void) { RCC->APB2ENR|=1<<3; //使能PORTB时钟 //PB8 GPIOB->CRH&=0XFFFFFFF0;//PB8设置成输入 GPIOB->CRH|=0X00000008; GPIOB->ODR|=1<<8; //PB8上拉 Ex_NVIC_Config(GPIO_B,8,3);//8是指PB8是指上升下降沿触发 MY_NVIC_Init(1,0,EXTI9_5_IRQChannel,4);//抢占0,子优先级3,组3 } //外部中断6服务程序用于PB8捕获 void EXTI9_5_IRQHandler(void) { if(TainIn ==1)//先是上升沿触发中断 { num++; //中断次数 if(Train_flag ==0) { Train_flag =1; Rise_value = TIM5->CNT;//读取上升时间 if(OldRise_value > Rise_value) Duty_value = OldRise_value-Rise_value; else if(OldRise_value < Rise_value) Duty_value = (OldRise_value+65535)-Rise_value; OldRise_value = Rise_value; } } else if(TainIn ==0)//第二次中断是下降沿 { if(Train_flag ==1) { Fall_value = TIM5->CNT;//读取总时间 } } EXTI->PR=1<<8; //清除LINE8上的中断标志位 }
另一个还要实现 1秒钟内有几次发生中断
这个问题可以用一个定时器到1秒后读取num的值中断次数
u16 get_num =0; /*定时器1*/ void Timer1_Init(u16 arr,u16 psc) { RCC->APB2ENR|=1<<11;//TIM1时钟使能 TIM1->ARR=arr; //设定计数器自动重装值//刚好1ms TIM1->PSC=psc; //预分频器, TIM1->DIER|=1<<0; //允许更新中断 TIM1->DIER|=1<<6; //允许触发中断 //TIM1->CR1=0x0080; //ARPE使能 TIMx_ARR寄存器被装入缓冲器 TIM1->CR1|=0x01; //使能定时器1 MY_NVIC_Init(5,0,TIM1_UP_IRQChannel,4);//抢占1,子优先级1,组1 } /*定时器1中断服务程序*/ void TIM1_UP_IRQHandler(void) { if(TIM1->SR&0X0001)//溢出中断 { get_num = num;//读取num的值中断次数 } TIM1->SR&=~(1<<0);//清除中断标志位 }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 求解 yolo算法问题
- ¥15 虚拟机打包apk出现错误
- ¥30 最小化遗憾贪心算法上界
- ¥15 用visual studi code完成html页面
- ¥15 聚类分析或者python进行数据分析
- ¥15 三菱伺服电机按启动按钮有使能但不动作
- ¥15 js,页面2返回页面1时定位进入的设备
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝