OpenEdv-开源电子网

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

TIM1PA12外部计数器模式,计数不准,怎么肥四?

[复制链接]

66

主题

224

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1349
金钱
1349
注册时间
2018-10-4
在线时间
200 小时
发表于 2018-11-15 12:57:59 | 显示全部楼层 |阅读模式
本帖最后由 潘长青 于 2018-11-15 12:57 编辑

外部计数器模式,计数乱跳,怎么肥四?求帮助。这块是光电计数模块的:
[mw_shl_code=c,true]
#include "sys.h"
#include "counter.h"
#define Dir1 PCout(0)
#define Dir2 PCout(1)

void Counter_Init(uint arr, uint psc)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_InitStructure;
//IO_Init_Motor_Dir
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_ResetBits(GPIOC, GPIO_Pin_0);
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_ResetBits(GPIOC, GPIO_Pin_1);
//TIMER_Init
/*****GPIO*****/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
/*****TIM1*****/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
    TIM_InitStructure.TIM_Prescaler=psc;
    TIM_InitStructure.TIM_Period=arr;
    TIM_InitStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_InitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM1,&TIM_InitStructure);
    TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
/*******ENABLE******/
    TIM_SetCounter(TIM1,0);
    TIM_Cmd(TIM1,ENABLE);
}
void Stop(void)
{
    Dir1=0;Dir2=0;
}
void Go_B(void)
{
    Stop();
    Dir1=1;Dir2=0;
}
void Go_S(void)
{
    Stop();
    Dir1=0;Dir2=1;
}
[/mw_shl_code]
这块是主函数的:
[mw_shl_code=c,true]
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "counter.h"

int main(void)
{         
    u8 lcd_id[12];
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    uart_init(115200);
    LCD_Init();
    LCD_Clear(WHITE);
    sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);
    Counter_Init(200, 0);         
    Go_S();
    while(1)
    {        
        LCD_ShowString(30,40,210,24,24,"TEST_COUNTER");
        LCD_ShowxNum(30,70,TIM1->CNT,5,24,0);
        if(TIM1->CNT==200)
        Go_B();
    }
}
[/mw_shl_code]下面是截图:






光电计数模块1

光电计数模块1

光电计数模块2

光电计数模块2

主函数

主函数
吾虽浪迹天涯 却未迷失本心
欢迎光临我的CSDN博客
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

66

主题

224

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1349
金钱
1349
注册时间
2018-10-4
在线时间
200 小时
 楼主| 发表于 2018-11-15 14:34:56 | 显示全部楼层
回复 支持 反对

使用道具 举报

66

主题

224

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1349
金钱
1349
注册时间
2018-10-4
在线时间
200 小时
 楼主| 发表于 2018-11-15 15:19:26 | 显示全部楼层
吾虽浪迹天涯 却未迷失本心
欢迎光临我的CSDN博客
回复 支持 反对

使用道具 举报

66

主题

224

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1349
金钱
1349
注册时间
2018-10-4
在线时间
200 小时
 楼主| 发表于 2018-11-15 16:56:53 | 显示全部楼层
弄好了,要开滤波器值,就是把TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);最后一个参数“0”设置成0x0f(最大值)就可以滤除杂波了。
吾虽浪迹天涯 却未迷失本心
欢迎光临我的CSDN博客
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 19:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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