OpenEdv-开源电子网

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

请问有哪位好心大哥可以发份 stm8的输入捕获的程序,最好是库的。

[复制链接]

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
发表于 2016-1-1 15:51:05 | 显示全部楼层 |阅读模式
1金钱
请问有哪位好心大哥可以发份 stm8的输入捕获的程序,最好是库的。

最佳答案

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

@far @interrupt void signal_capture_irq (void) { disableInterrupts(); if(TIM2_GetFlagStatus(TIM2_FLAG_CC1)) { TIM2_ClearFlag(TIM2_FLAG_CC1);//清空标志位 //TIM1->SR1 &= (unsigned char)~0x02;//清除CC1IF标志 if(vsync_cap_data_old == 0x00) {//第一次捕获中断来临 //vsync_cap_data_old = TIM1_CCR1H;//先读取高8位数据 //vsync_cap_data_old = (unsigned int)(vsync_cap_data_oldCR1 |= ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2015-11-21
在线时间
25 小时
发表于 2016-1-1 15:51:06 | 显示全部楼层
@far @interrupt void signal_capture_irq (void)
{
        disableInterrupts();
        if(TIM2_GetFlagStatus(TIM2_FLAG_CC1))
        {
                TIM2_ClearFlag(TIM2_FLAG_CC1);//清空标志位
                //TIM1->SR1 &= (unsigned char)~0x02;//清除CC1IF标志
                if(vsync_cap_data_old == 0x00)
                {//第一次捕获中断来临
                        //vsync_cap_data_old = TIM1_CCR1H;//先读取高8位数据
                        //vsync_cap_data_old = (unsigned int)(vsync_cap_data_old<<8) + TIM1_CCR1L;//再读取低8位数据
                       
                        vsync_cap_data_old = TIM2_GetCapture1();//得到第一次捕捉计数值
                }
                else
                {
                        //第二次捕获中断来临
                        //vsync_cap_data_new = TIM1_CCR1H;//先读取高8位数据
                        //vsync_cap_data_new = (unsigned int)(vsync_cap_data_new<<8) + TIM1_CCR1L;//再读取低8位数据
                       
                        vsync_cap_data_new = TIM2_GetCapture1();
                       
                                                TIM2->CNTRH = 0x00;//清零计数器高8位
                                                TIM2->CNTRL = 0x00;//清零计数器低8位
                                                TIM2->IER |= 0x02;//CC2IE=1,使能捕获/比较2中断
                                                TIM2->CR1 |= 0x01;//使能定时/计数器
                       
                        if(vsync_cap_data_new > vsync_cap_data_old)
                                vsync_period = (vsync_cap_data_new - vsync_cap_data_old);
                        else
                                vsync_period = 0xFFFF + vsync_cap_data_new - vsync_cap_data_old;
                               
                               
                        vsync_cap_data_old = 0x00;
                        isCaptureOver = 1;
                }
        }
        enableInterrupts();
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-2 11:03:37 | 显示全部楼层
帮顶
回复

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2015-11-21
在线时间
25 小时
发表于 2016-1-9 16:32:51 | 显示全部楼层
我也是不知道在哪抄的 ,改成了2定时器,



void TIM2_Input_Capture(void)
{
       
        CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//开始外设TIM2时钟
        /*
                初始化
                TIM2_Channel_1:管脚接到PB0上,PB0为TIM2_CH1
                TIM2_ICPolarity_Rising:捕获上升沿
                TIM2_ICSelection_DirectTI:输入捕获为直接输入
                TIM2_ICPSC_DIV1:输入1分频
        */
        TIM2_ICInit(TIM2_Channel_1,TIM2_ICPolarity_Rising,TIM2_ICSelection_DirectTI,TIM2_ICPSC_DIV1,0x00);
        TIM2_ClearFlag(TIM2_FLAG_CC1);//清TIM2_CH1标志位
        TIM2_ITConfig(TIM2_IT_CC1, ENABLE);//开启TIM2_CH1中断。
        TIM2_CCxCmd(TIM2_Channel_1,ENABLE);//使能输入捕获通道1  引脚PB0
  TIM2_Cmd(ENABLE);//使能定时器(TIM2整个模块)
}



这是初始化
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2016-1-16 21:32:55 | 显示全部楼层
好的谢谢了大哥
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-26
在线时间
4 小时
发表于 2016-1-26 21:27:12 | 显示全部楼层
帮顶一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 00:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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