OpenEdv-开源电子网

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

原子哥我在你的输入捕获实验基础上改的程序,就是加个定时计数器每隔6秒拉低PB6,延时1秒,在拉高,为什么程序仿真只能进入上升沿触发

[复制链接]

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
发表于 2015-8-22 19:27:44 | 显示全部楼层 |阅读模式
5金钱
我在上升沿和下降沿都加了个变量,以便仿真看,只是上升沿的变量加1,下降沿的变量不变,一直是0,然后我断开PB6,和PA0 的连接,直接用按键就好使,困惑中

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "io.h"
//ALIENTEK战舰STM32开发板实验10
//输入捕获实验 
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
u8 num = 0  ;
u8 Label_variable_3 ;
u8 g_rise ;
u8 g_fall;
u8  TIM2CH1_CAPTURE_STA=0; //输入捕获状态          
u16 TIM2CH1_CAPTURE_VAL; //输入捕获值
 int main(void)
 {  
  u32 temp=0;
 io_init() ;
 delay_init();       //延时函数初始化  
 NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 uart_init(9600);  //串口初始化为9600
  LED_Init();        //LED端口初始化
 
    timer_3_init(59999,7199); //6秒
  TIM2_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
    while(1)
 {   
   if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
  {
      num++;
   temp=TIM2CH1_CAPTURE_STA&0X3F;
   temp*=65536;//溢出时间总和
   temp+=TIM2CH1_CAPTURE_VAL;//得到总的高电平时间
   printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
   TIM2CH1_CAPTURE_STA=0;//开启下一次捕获
  }
 }
 }

 
//定时器2中断服务程序 
void TIM2_IRQHandler(void)
{

  if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 
 {  
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  
  {    
   if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
     TIM2CH1_CAPTURE_VAL=0XFFFF;
    }else TIM2CH1_CAPTURE_STA++;
   } 
  }
 if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
  { 
   if(TIM2CH1_CAPTURE_STA&0X40)  //捕获到一个下降沿   
   { 
       g_fall++;     
    TIM2CH1_CAPTURE_STA|=0X80;  //标记成功捕获到一次上升沿
    TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
   }else          //还未开始,第一次捕获上升沿
   {
       g_rise++;
    TIM2CH1_CAPTURE_STA=0;   //清空
    TIM2CH1_CAPTURE_VAL=0;
     TIM_SetCounter(TIM2,0);
    TIM2CH1_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);  //CC1P=1 设置为下降沿捕获
   }     
  }                    
  }
 
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}

 /********************************************************************/
/*         定时计数器3中断-产生一定时间间隔的方波信号               */
/*                                                                  */
/****************************************************************** */
void TIM3_IRQHandler(void)//TIM3中断函数
{
 if (TIM_GetITStatus(TIM3, TIM_IT_Update)!= RESET) //检查中断3是否发生
 {
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除中断3的中断标志
 
  
   Label_variable_3 = 0;
   GPIO_ResetBits(GPIOB,GPIO_Pin_5);
   GPIO_ResetBits(GPIOB,GPIO_Pin_6);
   delay_ms(250);
       TIM_Cmd(TIM2,DISABLE );  //使能定时器2进行输入捕获,捕捉轨道状态 
   delay_ms(250);
   TIM_Cmd(TIM2,ENABLE );  //使能定时器2进行输入捕获,捕捉轨道状态   
       GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_SetBits(GPIOB,GPIO_Pin_6); 
  
 }
}

 

最佳答案

查看完整内容[请看2#楼]

回复【10楼】神祗: --------------------------------- 原子个解决了 ,就是那个0X40识别的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 19:27:45 | 显示全部楼层
回复【10楼】神祗:
---------------------------------
原子个解决了 ,就是那个0X40识别的问题
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 19:29:51 | 显示全部楼层
用按键变量都加1
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 19:41:31 | 显示全部楼层
希望能的到原子哥的指点啊啊
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 19:52:32 | 显示全部楼层
同样是上升沿和下降沿为什么,定时计数器的就检测不到下降沿啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-22 20:19:09 | 显示全部楼层
化繁为简先,仅测试下降沿触发中断,看OK不。
问题得一步步来解决。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 20:19:16 | 显示全部楼层
等等大神啊啊 啊
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 20:25:15 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
哈哈哈原子哥 可算找到你了
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 20:25:41 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
好的听你的
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 20:31:30 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子个我把初始化改成了下降沿,进入后在配置成上升沿,这回是上升沿那部分函数的变量不加一了,貌似没转换过来,但是那个上升沿的语句应该执行了啊
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-22 20:53:27 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
还是只能进一个啊原子哥
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 08:25:35 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
为什么会出现高电平漏哺的现象,就是隔着一捕获一个
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-23 13:06:55 | 显示全部楼层
回复【12楼】神祗:
---------------------------------
可能是你mcu没处理过来
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 13:27:10 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------按键的怎么就好使,我需要怎么做才能避免这个现象,原子哥给点点子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-23 14:01:01 | 显示全部楼层
回复【14楼】神祗:
---------------------------------
仿真,或者加入printf协助分析。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 14:11:29 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
那个就是我通过仿真得出的结果,我需要怎么做嘿嘿,指导一下
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 15:22:31 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
这么得原子哥,你帮我调出来吧我给你钱
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 19:09:16 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------原子哥我仿真出来个问题,在定时计数器中有个下降沿语句,执行完后并没有进入捕获中断,而是把定时器中断的中断语句执行完后,才去处理那个下降沿的,这样话会导致上升沿捕获的配置与上升沿产生的时刻不相符,所以会导致漏掉一个高脉冲,
那我的问题是,怎么让在定时计数器中断中去执行,下降沿捕获中断,是不是配置中断优先级好使。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-23 21:59:25 | 显示全部楼层
回复【18楼】神祗:
---------------------------------
谁先进入中断,不同时发生的时候,是看谁先发生,谁先进。同时发生的时候,看谁的优先级高。
同时发生的概率很低的。如果你测试漏高电平很多,估计就不是同时发生的问题,而是其他地方问题了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 06:08:06 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
是中断优先级的事,我把捕获的优先级设的比定时计数高,当执行定时计数器的下降沿语句的时候,会进入捕获中断,但是程序执行完下降沿中断程序后,回不到定时计数器中断中继续执行了,定时计数器还有上升沿语句呢 ,该怎么办
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 20:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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