打印
[STM32F1]

STM32F103 读取传感器数据PWM

[复制链接]
947|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiangxun|  楼主 | 2015-10-21 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是PWM.c

#include "pwm.h"


void TIM3_PWM_Init(void)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_ICInitTypeDef  TIM_ICInitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE);  //ʹÄÜGPIOÍâÉèºÍAFIO¸´Óù¦ÄÜÄ£¿éʱÖÓʹÄÜ
       
  //ÉèÖøÃÒý½ÅΪ¸´ÓÃÊä³ö¹¦ÄÜ,Êä³öTIM3 CH3==>PB0  CH4==>PB1 µÄPWMÂö³å²¨ÐÎ
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7; //³õʼ»¯GPIO
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //¸´ÓÃÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;                  //ͨµÀÉèÖÃ
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       //ÉÏÉýÑØ´¥·¢
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   //¹Ü½ÅÓë¼Ä´æÆ÷¶ÔÓ¦¹Øϵ
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;             //ÊäÈëÔ¤·ÖƵ¡£Òâ˼ÊÇ¿ØÖÆÔÚ¶àÉÙ¸öÊäÈëÖÜÆÚ×öÒ»´ÎÊäÈëºÍÐźÅƵÂÊûÓб䣬²âµÃµÄÖÜÆÚÒ²²»»á±ä£
  //±ÈÈçÑ¡Ôñ4·ÖƵÔòÿËĸöÊäÈëÖÜÆÚ²Å×öÒ»´Î²¶»ñ£¬ÕâÑùÔÚÊäÈëÐźű仯²»Æµ·±µÄÇé¿öÏ£¬¿ÉÒÔ¼õÉÙÈí¼þ±»²»¶ÏÖжϵĴÎÊý¡£
  TIM_ICInitStructure.TIM_ICFilter = 0x0;                           //Â˲¨ÉèÖ㬾­Àú¼¸¸öÖÜÆÚÌø±äÈ϶¨²¨ÐÎÎȶ¨0x0~0xf
  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);                       //¸ù¾Ý²ÎÊýÉèÖÃTIMÍâÉèÐÅÏ¢
  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);                      //Ñ¡ÔñIC2ΪʼÖÕ´¥·¢Ô´
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);                                                                          //TIM´Óģʽ£º´¥·¢ÐźŵÄÉÏÉýÖØгõʼ»¯¼ÆÊýÆ÷ºÍ´¥·¢¼Ä´æÆ÷µÄ¸üÐÂʼþ
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //Æô¶¯¶¨Ê±Æ÷µÄ±»¶¯´¥·¢
  TIM_Cmd(TIM3, ENABLE);                                            //Æô¶¯TIM3           
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);                           //´ò¿ªÖжÏ
}

u16 IC2Value = 0;
u16 DutyCycle = 0;
u16 Frequency = 0;

void TIM3_IRQHandler(void)
{
        TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);//Çå³ýTIMµÄÖжϴý´¦Àíλ
        IC2Value=TIM_GetCapture2(TIM3);  //¶ÁÈ¡IC2²¶»ñ¼Ä´æÆ÷µÄÖµ£¬¼´ÎªPWMÖÜÆڵļÆÊýÖµ
        if(IC2Value!=0)
        {
                DutyCycle=(TIM_GetCapture1(TIM3)*100)/IC2Value;     //¶ÁÈ¡IC1²¶»ñ¼Ä´æÆ÷µÄÖµ£¬²¢¼ÆËãÕ¼¿Õ±È
                Frequency=72000000/IC2Value;    //¼ÆËãPWMƵÂÊ
        }
        else
        {
                DutyCycle=0;
                Frequency=0;
        }

}


以下是main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "exti.h"
#include "wdg.h"
#include "pwm.h"


extern void TIM3_IRQHandler(void);
extern void TIM3_PWM_Init(void);
extern u16 IC2Value;
extern u16 DutyCycle ;
extern u16 Frequency ;



int main(void)
{
       
        SystemInit();
        delay_init(72);                             //ÑÓʱ³õʼ»¯
        NVIC_Configuration();          //ÖжÏÅäÖÃ
        uart_init(9600);                                //´®¿Ú³õʼ»¯
       
                while(1)
        {
                        delay_ms(1004);
                  if(!IC2Value)
                        {
                                printf("CO2          = %d\r\n",DutyCycle);       
                                printf("CO2         = %d\r\n",Frequency);
                        }
        }         

}



为何读取不到数据呢?用的是PA7 TIM3_CH2
沙发
309030106| | 2015-10-25 17:59 | 只看该作者
传感器数据输出的时PWM 吗

使用特权

评论回复
板凳
jiangxun|  楼主 | 2015-10-26 19:22 | 只看该作者
309030106 发表于 2015-10-25 17:59
传感器数据输出的时PWM 吗

嗯嗯。。是的

使用特权

评论回复
地板
米尔豪斯| | 2015-10-28 14:40 | 只看该作者
楼主怎么解决的,用定时器捕捉功能行吗

使用特权

评论回复
5
jiangxun|  楼主 | 2015-10-28 21:33 | 只看该作者
米尔豪斯 发表于 2015-10-28 14:40
楼主怎么解决的,用定时器捕捉功能行吗

还没解决呢

使用特权

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

本版积分规则

13

主题

37

帖子

0

粉丝