打印
[STM32F1]

关于STM32 ETR计脉冲数的问题

[复制链接]
4506|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mengyu139|  楼主 | 2014-11-8 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm32f10x.h"
#include "stm32f10x_conf.h "

void Delay(__IO u32 nCount);
void TIM4_EIR_Init(void);

uint16_t COUNT = 0;

int main(void)
{       
        TIM4_EIR_Init();
        while (1)
        {       
                TIM_SetCounter(TIM4, 0); // CLEAR
                COUNT=TIM_GetCounter(TIM4);
                TIM_SetCounter(TIM4, 0); // CLEAR
                COUNT=TIM_GetCounter(TIM4);
                TIM_SetCounter(TIM4, 0); // CLEAR       
        }
}

void Delay(__IO u32 nCount)         //简单的延时函数
{
        for(; nCount != 0; nCount--);
}



void TIM4_EIR_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
        /* GPIOE clock enable */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

                                                        //Config PE0 为浮空输入
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                                GPIO_Init(GPIOE, &GPIO_InitStructure);

                                TIM_DeInit(TIM4);
                                TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
                                TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
                                TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
                                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
                                TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);  // Time base configuration
   
                                TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);   
                                TIM_SetCounter(TIM4, 0);   
                                TIM_Cmd(TIM4, ENABLE);
        
}
}
这是代码,编译正常。
用的是STM32F103VET的片子,TIM4的 ETR ,输入引脚为PE0
在主函数单步运行的时,没有脉冲输入的情况下,TIM_GetCounter(TIM4) 的值会变化,虽然能被IM_SetCounter(TIM4, 0)函数清零,但是单步到下一步又会计数,好像是自己在计数,而不是计外部脉冲数,求指点函数配置哪里有问题,刚开始使用STM32,非常感谢。
沙发
mengyu139|  楼主 | 2014-11-8 22:25 | 只看该作者
希望有人解答一下,谢谢了

使用特权

评论回复
板凳
mmuuss586| | 2014-11-8 22:43 | 只看该作者
改成这样看看(换下触犯模式):
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

TIM_CounterModeConfig(TIM3,TIM_CounterMode_Up);
TIM_SetAutoreload(TIM4,9);

TIM_TIxExternalClockConfig(TIM4,TIM_TIxExternalCLK1Source_TI2,TIM_ICPolarity_Rising,0);

TIM_Cmd(TIM4,ENABLE);
TIM_ITConfig(TIM4,TIM_IT_CC2|TIM_IT_Update,ENABLE);

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
mengyu139 + 3 很给力!
地板
mengyu139|  楼主 | 2014-11-8 22:57 | 只看该作者
mmuuss586 发表于 2014-11-8 22:43
改成这样看看(换下触犯模式):
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

是把哪部分改成这样呢?

使用特权

评论回复
5
mmuuss586| | 2014-11-9 09:13 | 只看该作者
mengyu139 发表于 2014-11-8 22:57
是把哪部分改成这样呢?

程序都已经贴上来了,你按照我发的,先改改看;

使用特权

评论回复
6
mengyu139|  楼主 | 2014-11-9 09:31 | 只看该作者
mmuuss586 发表于 2014-11-9 09:13
程序都已经贴上来了,你按照我发的,先改改看;

你好,我最近开始了解STM32,不是太熟练,请问把你发的程序,替换掉我的程序的哪几行呢?

使用特权

评论回复
7
mengyu139|  楼主 | 2014-11-9 10:43 | 只看该作者
问题解决的,上述程序是没问题的,是我仿真的时候,设置成软件仿真了,重新设置成硬件仿真就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

57

帖子

0

粉丝