野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15952|回复: 5

TIM3捕获输入,串口输出

[复制链接]
发表于 2015-7-28 15:28:11 | 显示全部楼层 |阅读模式
用TIM3捕获输入的PWM波,然后用串口输出数据,现在输出数据总是0
  1. 主函数:
  2. #include "stm32f10x.h"
  3. #include "bsp_TiMbase.h"
  4. #include "bsp_usart1.h"
  5. uint16_t IC2Value;
  6. uint16_t DutyCycle;
  7. uint32_t Frequency;
  8. /**
  9.   * @brief  Ö÷oˉêy
  10.   * @param  ÎT  
  11.   * @retval ÎT
  12.   */
  13. int main(void)
  14. {       
  15.         TIM3_GPIO_Config();
  16.        
  17.         USART1_Config();
  18.        
  19.         NVIC_Configuration();
  20.         /* TIM3 ¶¨ê±ÅäÖà */       
  21.   TIM3_Configuration();
  22.         NVIC_Configuration();
  23.         /* êμÕ½¶¨ê±Æ÷μÄÖD¶ÏóÅÏ輶 */
  24.         TIM3_NVIC_Configuration();
  25.   while(1)
  26.   {
  27.   }
  28. }

  29. /**
  30.   ******************************************************************************
  31.   * @file    bsp_usart1.c
  32.   * @author  fire
  33.   * @version V1.0
  34.   * @date    2013-xx-xx
  35.   * @brief   usartó|óÃbsp
  36.   ******************************************************************************
  37.   * @attention
  38.   *
  39.   * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  40.   * ÂÛì3    :http://www.firebbs.cn
  41.   * ìÔ±|    :http://firestm32.taobao.com
  42.   *
  43.   ******************************************************************************
  44.   */
  45.   
  46. #include "bsp_usart1.h"

  47. /**
  48.   * @brief  USART1 GPIO ÅäÖÃ,1¤×÷Ä£ê½ÅäÖá£9600 8-N-1
  49.   * @param  ÎT
  50.   * @retval ÎT
  51.   */
  52. void USART1_Config(void)
  53. {
  54.         GPIO_InitTypeDef GPIO_InitStructure;
  55.         USART_InitTypeDef USART_InitStructure;
  56.        
  57.         /* config USART1 clock */
  58.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
  59.        
  60.         /* USART1 GPIO config */
  61.         /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  62.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  63.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  64.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  65.         GPIO_Init(GPIOA, &GPIO_InitStructure);   
  66.         /* Configure USART1 Rx (PA.10) as input floating */
  67.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  68.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  69.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  70.        
  71.         /* USART1 mode config */
  72.         USART_InitStructure.USART_BaudRate = 115200;
  73.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  74.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  75.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  76.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  77.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  78.         USART_Init(USART1, &USART_InitStructure);
  79.        
  80.         /* ê1Äü′®¿ú1½óêÕÖD¶Ï */
  81.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  82.        
  83.         USART_Cmd(USART1, ENABLE);
  84. }

  85. /// ÅäÖÃUSART1½óêÕÖD¶Ï
  86. void NVIC_Configuration(void)
  87. {
  88.         NVIC_InitTypeDef NVIC_InitStructure;
  89.         /* Configure the NVIC Preemption Priority Bits */  
  90.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  91.        
  92.         /* Enable the USARTy Interrupt */
  93.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         
  94.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  95.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  96.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  97.         NVIC_Init(&NVIC_InitStructure);
  98. }

  99. int fputc(int ch, FILE *f)
  100. {
  101.                 USART_SendData(USART1, (uint8_t) ch);
  102.                
  103.                 /* μè′y·¢Ëííê±Ï */
  104.                 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
  105.        
  106.                 return (ch);
  107. }

  108. int fgetc(FILE *f)
  109. {
  110.                 /* μè′y′®¿ú1êäèëêy¾Y */
  111.                 while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  112.                 return (int)USART_ReceiveData(USART1);
  113. }

  114. /**


  115. #include "bsp_TiMbase.h"

  116. void TIM3_GPIO_Config(void)
  117. {
  118.         GPIO_InitTypeDef GPIO_InitStructure;

  119.         /* éèÖÃTIM3CLK Îa 72MHZ */
  120.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  121.   /* GPIOA clock enable */
  122.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  123.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  124.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
  125.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  126. }

  127. /// TIM3ÖD¶ÏóÅÏ輶ÅäÖÃ
  128. void TIM3_NVIC_Configuration(void)
  129. {
  130.     NVIC_InitTypeDef NVIC_InitStructure;
  131.    
  132.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                                                                                                         
  133.     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;          
  134.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  135.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       
  136.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  137.     NVIC_Init(&NVIC_InitStructure);
  138. }

  139. void TIM3_Configuration(void)
  140. {
  141.   TIM_ICInitTypeDef TIM_ICInitStructure;
  142.         TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;
  143.         TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
  144.         TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
  145.         TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  146.         TIM_ICInitStructure.TIM_ICFilter=0x3;
  147.         TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
  148.        
  149.         TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);

  150.   /* Select the slave Mode: Reset Mode */
  151.   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

  152.   /* Enable the Master/Slave Mode */
  153.   TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
  154.         TIM_Cmd(TIM3,ENABLE);
  155.         TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);
  156. }

  157. 中断服务函数:
  158. void TIM3_IRQHandler(void)
  159. {                
  160.           /* Clear TIM3 Capture compare interrupt pending bit */
  161.   TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

  162.   /* Get the Input Capture value */
  163.   IC2Value = TIM_GetCapture2(TIM3);

  164.   if (IC2Value != 0)
  165.   {
  166.     /* Duty cycle computation */
  167.     DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2Value;

  168.     /* Frequency computation */
  169.     Frequency = 72000000 / IC2Value;
  170.   }
  171.   else
  172.   {
  173.     DutyCycle = 0;
  174.     Frequency = 0;
  175.   }
  176.         printf("Frequency:%d\n",Frequency);
  177.         printf("DutyCycle:%d\n",DutyCycle);
  178. }
  179. void USART1_IRQHandler(void)
  180. {
  181.         USART_ClearITPendingBit(USART1, USART_IT_TC);
  182. }


复制代码


回复

使用道具 举报

发表于 2015-7-29 09:02:13 | 显示全部楼层
检查下定时器该通道的引脚是不是被板子上其它的器件占用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-29 09:47:26 | 显示全部楼层
flyleaf 发表于 2015-7-29 09:02
检查下定时器该通道的引脚是不是被板子上其它的器件占用了。

没有啊。我参照TIM2的改成TIM3的就不行了
回复 支持 反对

使用道具 举报

发表于 2015-7-29 09:53:30 | 显示全部楼层
allenzhou 发表于 2015-7-29 09:47
没有啊。我参照TIM2的改成TIM3的就不行了

看不出问题,你把TIM_GetCapture2(TIM3)和TIM_GetCapture1(TIM3)的值输出来看看有没有正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-29 09:55:39 | 显示全部楼层
flyleaf 发表于 2015-7-29 09:53
看不出问题,你把TIM_GetCapture2(TIM3)和TIM_GetCapture1(TIM3)的值输出来看看有没有正常

就是根本没有值,直接就是0
回复 支持 反对

使用道具 举报

发表于 2015-8-12 22:54:16 | 显示全部楼层
请问弄出来没有啊?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-10 18:19 , Processed in 0.030420 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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