打印
[STM32F2]

求stm32f207 定时器ETR模式例程?

[复制链接]
5863|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhl100|  楼主 | 2014-1-18 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhl100 于 2014-1-18 17:07 编辑

求stm32f207 定时器ETR模式例程?












同样的配置107就可以对外部脉冲计数,207就不行,哪里有问题?IO口输入能读到0或是1,定时器初始值设置的6或是8也能从TIM_GetCounter(); 中读到。就是说我IO配置没问题,定时器配置也没问题,问题出在就是读不到外部脉冲数,而107 TIM1和TIM4读的都好好的,问问版主,why?我继续找。。。
调试代码。。。主要的时钟,定时器,IO的代码,有点乱,请版主看看,怎么回事
        


TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
        TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;




//        GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); //重映射
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);        // Time base configuration

                TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
//                 TIM_ETRClockMode1Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
        TIM_SetCounter(TIM1, 6);
        TIM_Cmd(TIM1, ENABLE);



                TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);        // Time base configuration

        TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
//                 TIM_ETRClockMode1Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
        TIM_SetCounter(TIM4, 8);
        TIM_Cmd(TIM4, ENABLE);

        
        while (1) {                  
//        n_Counter4 =   GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0);
//         n_Counter4 =        GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7);
         n_Counter4 = TIM_GetCounter(TIM4);         
           n_Counter1 = TIM_GetCounter(TIM1);
        }




               

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
//    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);        


     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
//    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);




          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
                                /* TIM2 clock enable */
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);



        RCC_DeInit();                                                                                                /* RCC system reset(for debug purpose) */
        RCC_HSEConfig(RCC_HSE_ON);                                                                        /* Enable HSE */
        HSEStartUpStatus = RCC_WaitForHSEStartUp();                                        /* Wait till HSE is ready */

        if(HSEStartUpStatus == SUCCESS) {
//                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        /* Enable Prefetch Buffer */
                    FLASH_PrefetchBufferCmd(ENABLE );
                FLASH_SetLatency(FLASH_Latency_2);                                                /* Flash 2 wait state */
                RCC_HCLKConfig(RCC_SYSCLK_Div1);                                                /* HCLK = SYSCLK */
                RCC_PCLK2Config(RCC_HCLK_Div1);                                                        /* PCLK2 = HCLK */
                RCC_PCLK1Config(RCC_HCLK_Div2);                                                        /* PCLK1 = HCLK/2 */
//                RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_6);        /* PLLCLK = 8MHz * 9 = 72 MHz */
                        RCC_PLLConfig(RCC_PLLSource_HSE, 63, 432, 2,5);
                RCC_PLLCmd(ENABLE);                                                                                /* Enable PLL */
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}        /* Wait till PLL is ready */
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                                /* Select PLL as system clock source */
                while(RCC_GetSYSCLKSource() != 0x08) {}                                        /* Wait till PLL is used as system clock source */
        }








沙发
airwill| | 2014-1-18 15:49 | 只看该作者
GPIO 的配置问题, F2 的 IO 口的设置做了改进. 所有的外设功能都是并列的, 完全独立的.
用 GPIO_PinAFConfig 来配置.

使用特权

评论回复
板凳
zhl100|  楼主 | 2014-1-18 16:00 | 只看该作者
airwill 发表于 2014-1-18 15:49
GPIO 的配置问题, F2 的 IO 口的设置做了改进. 所有的外设功能都是并列的, 完全独立的.
用 GPIO_PinAFConf ...

就是之前的映射也不用,直接开这个口的特殊功能就行了?st为啥把系列和2系列作更改呢,这不折腾人嘛

谢谢  我再调调

使用特权

评论回复
地板
airwill| | 2014-1-18 16:05 | 只看该作者
不是折腾人, 我感觉这么改, 改得好.
之前用 F10X 的时候, 对于一口多功能的外设, 当使用外设功能时, 会经常担心多个外设争夺 IO 口的问题. 为避免这个问题, 不得不有些外设不能用.
现在这么一改就好了, 完全彻底地消除了这个问题!

使用特权

评论回复
5
zhl100|  楼主 | 2014-1-18 16:09 | 只看该作者
airwill 发表于 2014-1-18 16:05
不是折腾人, 我感觉这么改, 改得好.
之前用 F10X 的时候, 对于一口多功能的外设, 当使用外设功能时, 会经常 ...

刚刚改了改加了一句,还是不行。原来映射有个专门的ramp什么的,也还行,都用习惯了。
我加的这句还不对?我再调调。给的库里也没有ETR的例程,搞了快一天了。。。。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
//    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);       
GPIO_PinAFConfig(GPIOE, GPIO_Pin_7,GPIO_AF_TIM1);

使用特权

评论回复
6
zhl100|  楼主 | 2014-1-18 16:13 | 只看该作者
airwill 发表于 2014-1-18 16:05
不是折腾人, 我感觉这么改, 改得好.
之前用 F10X 的时候, 对于一口多功能的外设, 当使用外设功能时, 会经常 ...

还有初始化时候时钟一定要放在其他前边,1系列也没这个要求,2系列这又是个改变,改的也有点莫名其妙啊

使用特权

评论回复
7
zhl100|  楼主 | 2014-1-18 16:52 | 只看该作者
问题没有解决。。。。。。。。。。。。
继续研究ing。。。。。。。。。。。。

使用特权

评论回复
8
zhl100|  楼主 | 2014-1-21 22:27 | 只看该作者
airwill 发表于 2014-1-18 15:49
GPIO 的配置问题, F2 的 IO 口的设置做了改进. 所有的外设功能都是并列的, 完全独立的.
用 GPIO_PinAFConf ...

谢谢。不完全是那里的问题。翻了翻手册,都弄好了,还是有一些不同的。不知道别人都怎么做的,确实比较麻烦。
Select the polarity of the input:
For the STM32F10x family: by writing CCxP in the TIMx_CCER register to select
the rising or the falling edge;
For the other families: by writing CCxP and CCxNP in the TIMx_CCER register
to select the rising/falling edge, or both edges(a).

使用特权

评论回复
9
soyshell| | 2014-9-17 21:57 | 只看该作者
楼主能不能给我一个DEMO。我陷在ETR好多天了。soyshell@163.com 谢谢!

使用特权

评论回复
10
yupw24| | 2016-6-29 12:08 | 只看该作者
你好,有STM32F207做的外部脉冲计数程序吗?麻烦借我参考一下,谢谢。我的邮箱是yupw24@126.com

使用特权

评论回复
11
1123467323| | 2019-1-23 17:30 | 只看该作者
是扣扣还是微信

使用特权

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

本版积分规则

个人签名:三分天注定   七分靠打拼     爱拼才会赢

102

主题

787

帖子

2

粉丝