OpenEdv-开源电子网

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

求助!!mini版的TIM1外部计数为零,现在不知道是哪里出问题了,所以我把代码贴出来,各位帮我看看,谢谢!

[复制链接]

7

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-10-19
在线时间
36 小时
发表于 2016-11-9 09:45:18 | 显示全部楼层 |阅读模式
3金钱
程序如下:
void TIM1_Init(u16 arr,u16 psc)   //入口参数arr 和 psc
{         
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        //使能TIM1时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA时钟
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12;  //PA0 清除之前设置  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;           //上拉输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        TIM_DeInit(TIM1);       //初始化TIM1为缺省值
        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器 设置用来作为TIMx时钟频率除数的预分频值            
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设0置时钟分割:TDTS = Tck_tim           psc
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); //设置为外部计数模式
        TIM_SetCounter(TIM1, 0);                                         //计数器清零
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1外设                                                 
}

u16 get_jishu()
{
        u16 jishu; //定义计数的变量
        TIM_SetCounter(TIM1, 0);                                         //计数器清零
        delay_ms(20);         //jishu t=20ms
        jishu=TIM1->CNT;         //定时器2计数赋给count1
        return jishu;   //返回jishu
       
}



这个程序按道理是没错的啊,但是就是不能计数,我不知道是什么原因,我用的mini板。网上也搜不到原因。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-10-19
在线时间
36 小时
 楼主| 发表于 2016-11-9 14:46:40 | 显示全部楼层
醉了,竟然没有人知道
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2016-11-9 21:03:55 | 显示全部楼层
你这个代码是可以用的,但是你要明白外部触发输出计数,是需要外部给脉冲信号(从PA12输入),定时器才会计数的。
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2016-10-12
在线时间
28 小时
发表于 2016-11-9 21:25:07 | 显示全部楼层
lycreturn 发表于 2016-11-9 21:03
你这个代码是可以用的,但是你要明白外部触发输出计数,是需要外部给脉冲信号(从PA12输入),定时器才会计 ...

3楼说的有道理,你要注意外部输入脉冲的引脚对不对。
我还有个疑问,既然是外部计数模式了,为什么还要给定时器设置时钟呢,你的预分频时钟还有什么用啊。不是外部引脚来一个脉冲计数器就加一吗?干嘛还要时钟呀?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2016-11-9 22:01:38 | 显示全部楼层
zmxhl 发表于 2016-11-9 21:25
3楼说的有道理,你要注意外部输入脉冲的引脚对不对。
我还有个疑问,既然是外部计数模式了,为什么还要 ...

是的,是靠外部输入脉冲计数的,但是外部输入的脉冲也会经过预分频器,所以是可以设置分频的。
回复

使用道具 举报

7

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-10-19
在线时间
36 小时
 楼主| 发表于 2016-11-10 09:56:11 | 显示全部楼层
lycreturn 发表于 2016-11-9 21:03
你这个代码是可以用的,但是你要明白外部触发输出计数,是需要外部给脉冲信号(从PA12输入),定时器才会计 ...

我就是把PA12引脚作为脉冲的输入啊,我用TIM3对应PD2也可以。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-10 09:57:47 | 显示全部楼层
示波器看看,引脚上有没有计数的波形,电压对不对
回复

使用道具 举报

7

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-10-19
在线时间
36 小时
 楼主| 发表于 2016-11-10 09:59:00 | 显示全部楼层
zmxhl 发表于 2016-11-9 21:25
3楼说的有道理,你要注意外部输入脉冲的引脚对不对。
我还有个疑问,既然是外部计数模式了,为什么还要 ...

虽然我这里设置了一个预分频,但是在main函数里面TIM函数初始化的入口参数哪里的设置我没有分频。
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2016-10-12
在线时间
28 小时
发表于 2016-11-10 10:01:11 | 显示全部楼层
lycreturn 发表于 2016-11-9 22:01
是的,是靠外部输入脉冲计数的,但是外部输入的脉冲也会经过预分频器,所以是可以设置分频的。

所以就要看你的分频值和外部输入的脉冲频率了,你的计数函数了每隔20ms采集一次计数值,会不会在20ms内,你的外部脉冲还没有达到你的分频次数,比如外部脉冲1KHz,你的分频是2000,20ms内连一次计数都到不了啊。会不会有这种可能呢?
回复

使用道具 举报

7

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-10-19
在线时间
36 小时
 楼主| 发表于 2016-11-10 10:02:00 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-10 09:57
示波器看看,引脚上有没有计数的波形,电压对不对

这些我早就试过了,没问题,同样的脉冲用其他TIM2,TIM3都可以。
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2016-11-10 12:06:02 | 显示全部楼层
dmfy 发表于 2016-11-10 09:56
我就是把PA12引脚作为脉冲的输入啊,我用TIM3对应PD2也可以。

你仔细检测下板子的硬件电路吧,你的代码我昨晚测试过了,可以使用的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 02:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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