OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2307|回复: 1

F1WarShip 输入捕获中卡主的问题

[复制链接]

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-9-12
在线时间
4 小时
发表于 2017-9-12 16:28:21 | 显示全部楼层 |阅读模式
8金钱
F103 战舰的输入捕获实验中
     我按照实例的程序写了一遍,发现PWM的灯不亮了,串口里也没有任何数据打印出来,我弄了两天,发现把这一行屏蔽了
     TIM5_ICInit(0XFFFF,72-1);
PWM灯部分就可以正常运行,可是那个TIM5_ICInit()函数我改了几遍,最后都复制了范例中写源程序,但是把这一句代码加上去之后总是老样子,PWM等不亮,串口也无输出,但是用光盘里示例的程序烧进去,就一切正常。应该是在TIM5_ICInit()这里卡住了,可我看了好几遍也没什么不一样,今天搞这一个第三天了,一直弄不出来,心累。
     PS.Timer.c 和头文件是照着写的,函数名稍微改动了一点
     真心感谢大神们的解答
main.c文件:
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "Timer.h"



extern u8  TIM5CH1_CAPTURE_STA;                //êäèë2¶»ñ×′쬠                                                  
extern u16        TIM5CH1_CAPTURE_VAL;        //êäèë2¶»ñÖμ       
int main(void)
{               
        u32 temp=0;
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
        uart_init(115200);         //′®¿ú3õê¼»ˉÎa115200
        LED_Init();                             //LED¶Ë¿ú3õê¼»ˉ

        TIM3_PWMInit(899,0);                 //2»·ÖÆμ¡£PWMÆμÂê=72000/(899+1)=80Khz
        TIM5_ICInit(0XFFFF,72-1);        //òÔ1MhzμÄÆμÂê¼Æêy
           while(1)
        {
                delay_ms(10);
                TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);

                if(TIM_GetCapture2(TIM3)==300)TIM_SetCompare2(TIM3,0);       
                                  
                if(TIM5CH1_CAPTURE_STA&0X80)//3é1|2¶»ñμ½áËò»′ÎéÏéyÑØ
                {
                        temp=TIM5CH1_CAPTURE_STA&0X3F;
                        temp*=65536;//òç3öê±¼ä×üoí
                        temp+=TIM5CH1_CAPTURE_VAL;//μÃμ½×üμĸßμçÆ½ê±¼ä
                        printf("HIGH:%d us\r\n",temp);//′òó¡×üμĸßμãÆ½ê±¼ä
                        TIM5CH1_CAPTURE_STA=0;//¿aÆôÏÂò»′Î2¶»ñ
                }
        }
}[/mw_shl_code]

Timer.h文件:
[mw_shl_code=c,true]#ifndef __TIMER_H__
#define __TIMER_H__
#include "stm32f10x.h"

//extern u8 TIM5CH1_CAPTURE_STA;                //êäèë2¶»ñ×′ì¬×Ö
//extern u16 TIM5CH1_CAPTURE_VAL;                //êäèë2¶»ñÖμ

void TIM3_Init(u16 arr,u16 psc);
void TIM3_PWMInit(u16 arr,u16 psc);
//DT¸ÄÕ¼¿Õ±è void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

void TIM5_ICInit(u16 arr,u16 psc);
void TIM5_Cap_Init(u16 arr,u16 psc);

#endif
[/mw_shl_code]


Timer.c 文件:
[mw_shl_code=c,true]#include "Timer.h"
#include "led.h"
u8 TIM5CH1_CAPTURE_STA=0;                //êäèë2¶»ñ×′ì¬×Ö
u16 TIM5CH1_CAPTURE_VAL        ;                //êäèë2¶»ñÖμ


void TIM3_Init(u16 arr,u16 psc)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitInstrucure;
       
        NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
        TIM_TimeBaseInitInstrucure.TIM_ClockDivision=TIM_CKD_DIV1;    //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseInitInstrucure.TIM_CounterMode=TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInitInstrucure.TIM_Period=arr;                //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         ¼Æêyμ½5000Îa500ms
        TIM_TimeBaseInitInstrucure.TIM_Prescaler=psc;  ////éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  10KhzμļÆêyÆμÂê  
       
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitInstrucure);   //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
        NVIC_Init(&NVIC_InitStructure);                                //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
        TIM_Cmd(TIM3,ENABLE);                                                //ê1ÄüTIMxíaéè
}




void TIM3_IRQHandler()      //TIM3ÖD¶Ï
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update))                //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
        {
                TIM_ClearITPendingBit(TIM3,TIM_IT_Update);                //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
                LED1=!LED1;
        }
}



void TIM3_PWMInit(u16 arr,u16 psc)
{
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitInstrucure;
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);                                //1
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
       
        TIM_TimeBaseInitInstrucure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitInstrucure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitInstrucure.TIM_Period=arr;
        TIM_TimeBaseInitInstrucure.TIM_Prescaler=psc;
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitInstrucure);                                        //2
       
       
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);                                                                //3
       
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);                                        //4
        TIM_Cmd(TIM3,ENABLE);                                                                                                //5
       
       
}



void TIM5_ICInit(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        TIM_ICInitTypeDef TIM_ICInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                        //PA0ÏÂà-
       
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;       //2»·ÖÆμ
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStructure.TIM_Period=arr;
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
        TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
       
        TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;                                //2¶»ñí¨μàÑ¡Ôñ
        TIM_ICInitStructure.TIM_ICFilter=0;                                                        //ÂË2¨Æ÷3¤¶è£¬0Îa2»ÂË2¨
        TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;   //éÏéyÑØ»1êÇϽμÑØ2¶»ñ
        TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;                        //Ô¤·ÖÆμÏμêy
        TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//Ö±½óó3é䣨¿éòÔó3éäμ½±eμÄμØ·½£©
        TIM_ICInit(TIM5,&TIM_ICInitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;                //óëTIM3óÅÏè¼¶1ØÏμòa2»3åí»
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;                        //óëTIM3óÅÏè¼¶1ØÏμòa2»3åí»
        NVIC_Init(&NVIC_InitStructure);
       
        TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);                        //ÔêDí¸üDÂÖD¶Ï ,ÔêDíCC1IE2¶»ñÖD¶Ï       
        TIM_Cmd(TIM5,ENABLE);
       
       
}


void TIM5_IRQHandler(void)
{
        if((TIM5CH1_CAPTURE_STA & 0x80)==0)                                //2¶»ñÎ′íê3é
        {
                if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=0)
                {
                        if((TIM5CH1_CAPTURE_STA&0x40)!=0)                                //òѾ-2¶»ñμ½¸ßμçÆ½
                        {
                                if((TIM5CH1_CAPTURE_STA&0x3f)==0x3f)                        //¸ßμçÆ½ì«3¤áË
                                {
                                        TIM5CH1_CAPTURE_STA|=0x80;
                                        TIM5CH1_CAPTURE_VAL=0xffff;                //2¶»ñμÄÂö3åì«3¤£¬′ïμ½×î′óÖ죬£¨òÑòç3ö£©
                                }else TIM5CH1_CAPTURE_STA++;                //Õy3£Çé¿ö
                        }
                }
       
       
        if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=0)
        {
                if(TIM5CH1_CAPTURE_STA&0x40)
                {
                        TIM5CH1_CAPTURE_STA|=0x80;
                        TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
                        TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);
                }
                else                                //»1Î′¿aê¼£¬μúò»′Î2¶»ñéÏéyÑØ
                {
                        TIM5CH1_CAPTURE_STA=0;
                        TIM5CH1_CAPTURE_VAL=0;
                        TIM_SetCounter(TIM5,0);        //éèÖÃμ±Ç°ÖμÎa0£»
                        TIM5CH1_CAPTURE_STA|=0x40;
                        TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
                }                       
        }
        }                //ÕaàïμÄà¨oÅ3öáËÎêìaÔ-à′D′ÔúáËéÏÃæ
       
        TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);
}[/mw_shl_code]

Timer_IC.zip

6.62 MB, 下载次数: 3

工程文件包

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-9-12 23:59:36 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 15:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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