[STM32F1] 关于STM32 ETR计脉冲数的问题

[复制链接]
4752|6
 楼主| mengyu139 发表于 2014-11-8 20:45 | 显示全部楼层 |阅读模式
  1. #include "stm32f10x.h"
  2. #include "stm32f10x_conf.h "

  3. void Delay(__IO u32 nCount);
  4. void TIM4_EIR_Init(void);

  5. uint16_t COUNT = 0;

  6. int main(void)
  7. {       
  8.         TIM4_EIR_Init();
  9.         while (1)
  10.         {       
  11.                 TIM_SetCounter(TIM4, 0); // CLEAR
  12.                 COUNT=TIM_GetCounter(TIM4);
  13.                 TIM_SetCounter(TIM4, 0); // CLEAR
  14.                 COUNT=TIM_GetCounter(TIM4);
  15.                 TIM_SetCounter(TIM4, 0); // CLEAR       
  16.         }
  17. }

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



  22. void TIM4_EIR_Init(void)
  23. {
  24.         GPIO_InitTypeDef GPIO_InitStructure;
  25.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  26.    
  27.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  28.         /* GPIOE clock enable */
  29.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

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

  35.                                 TIM_DeInit(TIM4);
  36.                                 TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
  37.                                 TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
  38.                                 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  39.                                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  40.                                 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);  // Time base configuration
  41.    
  42.                                 TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);   
  43.                                 TIM_SetCounter(TIM4, 0);   
  44.                                 TIM_Cmd(TIM4, ENABLE);
  45.         
  46. }
  47. }
这是代码,编译正常。
用的是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);

是把哪部分改成这样呢?
mmuuss586 发表于 2014-11-9 09:13 | 显示全部楼层
mengyu139 发表于 2014-11-8 22:57
是把哪部分改成这样呢?

程序都已经贴上来了,你按照我发的,先改改看;
 楼主| mengyu139 发表于 2014-11-9 09:31 | 显示全部楼层
mmuuss586 发表于 2014-11-9 09:13
程序都已经贴上来了,你按照我发的,先改改看;

你好,我最近开始了解STM32,不是太熟练,请问把你发的程序,替换掉我的程序的哪几行呢?
 楼主| mengyu139 发表于 2014-11-9 10:43 | 显示全部楼层
问题解决的,上述程序是没问题的,是我仿真的时候,设置成软件仿真了,重新设置成硬件仿真就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

57

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部