OpenEdv-开源电子网

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

STM8S003k3 tim1捕捉值不稳定,求指教!!!!

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-24
在线时间
0 小时
发表于 2015-4-24 13:54:55 | 显示全部楼层 |阅读模式
5金钱
查询方法捕捉 能捕捉到值,值是错误的
[mw_shl_code=c,true]/******************** (C) COPYRIGHT **************
[mw_shl_code=c,true]/***************** (C) COPYRIGHT ****************** * 文件名 :tim1_ic.c * 描述 :输入捕捉TIM1配置库 * 实验平台:stm8s003k3 * 库版本 :V2.1.0 * 作者 : * 博客 : * 修改时间 :2014-4-1 *******************************************************************************/ /* 包含系统头文件 */ /* 包含自定义头文件 */ #include "tim1_ic.h" /* 自定义新类型 */ /* 自定义宏 */ /* 全局变量定义 */ static void Sort(u16 array[],u8 n); u16 Frequency_Array[GetPulseNum]={0}; u16 AverageFrequency; u16 Period; u16 ICValue1,ICValue2; /******************************************************************************* * 名称: TIM1_Input_Capture * 功能: TIM1输入捕捉初始化操作 * 形参: 无 * 返回: 无 * 说明: 无 ******************************************************************************/ void TIM1_Input_Capture(void) { /* 初始化TIM1输入捕捉通道4 */ TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV8, 0x00); TIM1_ClearFlag(TIM1_FLAG_CC1); TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE); /* 使能输入捕获通道1*/ TIM1_Cmd(ENABLE); /* 使能定时器 */ } /******************************************************************************* * 名称: Get_IC_Frequency * 功能: 得到输入捕捉计数值 * 形参: 无 * 返回: 无 * 说明: 无 ******************************************************************************/ u16 Get_IC_Frequency(void) { TIM1->CCR1H=0; TIM1->CCR1L=0; /* 清空输入捕捉值 */ while(!TIM1_GetFlagStatus(TIM1_FLAG_CC1)); ICValue1=TIM1_GetCapture1(); /* 得到第一次捕捉计数值 */ TIM1_ClearFlag(TIM1_FLAG_CC1); /* 清空标志位 */ while(!TIM1_GetFlagStatus(TIM1_FLAG_CC1)); ICValue2=TIM1_GetCapture1(); /* 得到第二次捕捉计数值 */ TIM1_ClearFlag(TIM1_FLAG_CC1); /* 清空标志位 */ if(ICValue2 > ICValue1) Period = ICValue2-ICValue1; else if(ICValue2<ICValue1) Period = 0xffff + ICValue2-ICValue1; return Period; } /******************************************************************************* * 名称: Get_IC_Frequency * 功能: 将计数值存入数组 * 形参: 无 * 返回: 无 * 说明: 无 ******************************************************************************/ void Get_FrequencyArray(u16 FrequencyArray[], u8 times) { u8 i; for(i = 0; i < times; i++) FrequencyArray=Get_IC_Frequency(); } /******************************************************************************* * 名称: Sort * 功能: 对计数值进行排序 * 形参: 无 * 返回: 无 * 说明: 无 ******************************************************************************/ static void Sort(u16 array[],u8 n) { u8 i,j,k; u16 t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(array[j]<array[k]) k=j; t=array[k]; array[k]=array; array=t; } } /******************************************************************************* * 名称: Get_AverageFrequency * 功能: 对计数值进行滤波 * 形参: 无 * 返回: 无 * 说明: 无 ******************************************************************************/ u16 Get_AverageFrequency(u16 GetFrequency[],u8 n) { u8 i; u16 temp=0; Sort(GetFrequency,n); for(i=5;i<n-5;i++) temp+=GetFrequency; temp/=(n-10); return temp; } /*************** (C) COPYRIGHT *****END OF FILE****/[/mw_shl_code]

*******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm8s.h" //#include "sysclock.h" #include "tim1_ic.h" #include "beep.h" //#include "uart.h" #include "display.h" u32 F;//还是float F; void Delay(u32 nCount); /* Private defines -----------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ void main(void) { /* 设置外部16M晶振为系统主时钟 */ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); TIM1_Input_Capture(); /* 初始化TIM1输入捕获通道 */ enableInterrupts(); Get_FrequencyArray(Frequency_Array,GetPulseNum); AverageFrequency=Get_AverageFrequency(Frequency_Array,GetPulseNum); //F=2000000/AverageFrequency; F=HSI_VALUE*8/AverageFrequency; /* if(F<365||(412<F&&F<451)||F>491) { Set_Beep_OptionByte(); Beep_Init(BEEP_FREQUENCY_2KHZ); BEEP_LSICalibrationConfig(LSI_128kHz); } else{;}*/ while(1) { display(); } } [/mw_shl_code]

频率计进化版.rar

1.13 MB, 下载次数: 1032

最佳答案

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

回复【2楼】正点原子: --------------------------------- 求指导啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-24
在线时间
0 小时
 楼主| 发表于 2015-4-24 13:54:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
求指导啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-24 23:53:30 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-5-4
在线时间
1 小时
发表于 2015-5-4 19:15:16 | 显示全部楼层
绑定。。。不太习惯用库。。要是寄存器操作的话我会看完的。。。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-24
在线时间
0 小时
 楼主| 发表于 2015-5-8 14:14:06 | 显示全部楼层
回复【4楼】代码小白:
---------------------------------
我换外部时钟 就好了  ,,, 谢谢关注  至于库出什么问题还在排查
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-5-9
在线时间
8 小时
发表于 2015-9-23 10:52:52 | 显示全部楼层
 * 名称: Get_AverageFrequency
u16 Get_AverageFrequency(u16 GetFrequency[],u8 n)
{
    u8 i;
    u16 temp=0;
    Sort(GetFrequency,n);
    for(i=5;i<n-5;i++)
    temp+=GetFrequency;
    temp/=(n-10);
    return temp;
}

这个函数是怎么滤波的 看不懂!求大神解释啊
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-3-22
在线时间
10 小时
发表于 2017-3-22 18:13:20 | 显示全部楼层
769854714 发表于 2015-9-23 10:52
&nbsp;*&nbsp;名称:&nbsp;Get_AverageFrequency
u16&nbsp;Get_AverageFrequency(u16&nbsp;GetFrequency[] ...

这个函数是求多次捕获的值的平均值,这样会使得值相对稳定
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-5-9
在线时间
9 小时
发表于 2019-7-31 13:42:14 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

131

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-7-1
在线时间
6 小时
发表于 2019-8-16 13:46:33 | 显示全部楼层
谢谢楼主分享
IIS7站长  http://www.iis7.com/
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 13:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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