新手入门
- 积分
- 4
- 金钱
- 4
- 注册时间
- 2022-7-9
- 在线时间
- 6 小时
|
3金钱
请问为啥我的程序,我就按了一会就这么多秒是咋回事,我看着时间按得
这是我的.c文件
#include "sys.h"
#include "ic.h"
#include "key.h"
#include "uart.h"
#include "led.h"
u16 TIM5_STA;
u16 TIM5_FLAG;
void TIM_IC_init(u16 arr,u16 pc)
{
GPIO_InitTypeDef GPIO_instruct;
TIM_TimeBaseInitTypeDef Time_instruct;
NVIC_InitTypeDef NVIC_instruct;
TIM_ICInitTypeDef TIM_instruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
GPIO_instruct.GPIO_Mode=GPIO_Mode_IPD;
GPIO_instruct.GPIO_Pin=GPIO_Pin_0;
GPIO_instruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_instruct);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Time_instruct.TIM_CounterMode=TIM_CounterMode_Up;
Time_instruct.TIM_Period=arr;
Time_instruct.TIM_Prescaler=pc;
Time_instruct.TIM_RepetitionCounter=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM5,&Time_instruct);
NVIC_instruct.NVIC_IRQChannel=TIM5_IRQn;
NVIC_instruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_instruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_instruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_instruct);
TIM_instruct.TIM_Channel=TIM_Channel_1;
TIM_instruct.TIM_ICFilter=0x00;
TIM_instruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_instruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_instruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInit(TIM5,&TIM_instruct);
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);
TIM_Cmd(TIM5,ENABLE);
}
void TIM5_IRQHandler(void)
{
if((TIM5_FLAG&0x4000)==0)
{ if(TIM_GetITStatus(TIM5,TIM_IT_Update)==SET)
{
TIM5_FLAG++;
if(TIM5_FLAG==0x3FFF) TIM5_FLAG=0x0000;
}
if( TIM_GetITStatus(TIM5,TIM_IT_CC1)==SET)
{
if((TIM5_FLAG&0x8000)==1)
{
TIM5_FLAG|=0x4000;
TIM5_STA=TIM_GetCapture1(TIM5);
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
}
TIM5_FLAG|=0x8000;
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
}
}
TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);
}
这是.h文件
#ifndef __IC_
#define __IC_
#include "sys.h"
void TIM_IC_init(u16 arr,u16 pc);
#endif
这是主函数
#include "stm32f10x.h"
#include "sys.h"
#include "ic.h"
#include "key.h"
#include "uart.h"
#include "stdio.h"
#include "led.h"
extern u16 TIM5_FLAG;
extern u16 TIM5_STA;
int main()
{
double temp,t;
LED_init();
init_key();
init_uart();
TIM_IC_init(0xffff,72-1);
LED0=0;
while(1)
{
if(TIM5_FLAG&0xc000)
{
temp=TIM5_FLAG&0x3fff;
t=temp*65536;
t=(t+TIM5_STA)/1000000;
printf("\r\n******ê±¼äÎa£o%lfs*******\r\n",t);
TIM5_FLAG=0x0000;
TIM5_STA=0;
}
}
}
请问有啥问题
|
|