中级会员 
   
	- 积分
 - 462
 
        - 金钱
 - 462 
 
       - 注册时间
 - 2017-6-7
 
      - 在线时间
 - 137 小时
 
 
 
 | 
 
1金钱 
[mw_shl_code=c,true]#include "stm32f10x.h" 
#include "delay.h" 
 
void Usart_Init(void); 
void TPAD_Init(void); 
unsigned int TPAD_Get_Val(void); 
void USART_SendString(unsigned int num); 
 
//UDIS½ûÖ1¸üD 
int main() 
{ 
        unsigned int dat; 
         
        delay_init(); 
        TPAD_Init(); 
        Usart_Init(); 
        while(1) 
        { 
                dat = TPAD_Get_Val(); 
                USART_SendString(dat); 
                delay_ms(10); 
        } 
        return 0; 
} 
 
void USART_SendString(unsigned int num) 
{ 
        short int i = 0; 
        unsigned char temp[20]; 
         
        do 
        { 
                temp = num % 10; 
                num /= 10; 
                i++; 
        }while(num); 
        i--; 
        for(; i >= 0; i--) 
        { 
                USART_SendData(USART1, temp - 0 + '0'); 
                while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); 
                USART_ClearFlag(USART1, USART_FLAG_TC); 
        } 
        USART_SendData(USART1, 0x0d); 
        while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); 
        USART_ClearFlag(USART1, USART_FLAG_TC); 
        USART_SendData(USART1, 0x0a); 
        while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); 
        USART_ClearFlag(USART1, USART_FLAG_TC); 
} 
 
void TPAD_Init(void) 
{ 
        GPIO_InitTypeDef GPIO_InitStructure; 
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
        TIM_ICInitTypeDef TIM_ICInitStructure; 
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
        GPIO_ResetBits(GPIOA , GPIO_Pin_1); 
        delay_ms(2);// 
         
        TIM_TimeBaseStructure.TIM_Period = 60000; 
  TIM_TimeBaseStructure.TIM_Prescaler = 0; //? 
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //? 
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
         
        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; 
  TIM_ICInitStructure.TIM_ICFilter = 0x00; 
        TIM_ICInit(TIM2, &TIM_ICInitStructure); 
        TIM_ClearITPendingBit(TIM2 ,TIM_IT_Update); 
        TIM_ITConfig(TIM2, TIM_IT_Update | TIM_IT_CC2, DISABLE); 
//         TIM_Cmd(TIM2, ENABLE); 
} 
 
unsigned int TPAD_Get_Val(void) 
{ 
        unsigned int count = 0; 
        GPIO_InitTypeDef GPIO_InitStructure; 
         
        TIM_SetCounter(TIM2, 0); 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
        TIM_Cmd(TIM2, ENABLE); 
        while(1) 
        { 
                if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)) 
                { 
                        count += 0x10000; 
                        TIM_ClearFlag(TIM2, TIM_FLAG_Update); 
                        if(count >= 0xffff0000) 
                        { 
                                count = 0; 
                        } 
                } 
                if(TIM_GetFlagStatus(TIM2, TIM_FLAG_CC2OF) != RESET) 
                { 
                        count |= TIM_GetCapture2(TIM2); 
                        TIM_ClearFlag(TIM2, TIM_FLAG_CC2OF); 
                        break; 
                } 
        } 
        return count; 
} 
 
void Usart_Init(void) 
{ 
        USART_InitTypeDef USART_InitStructure; 
        GPIO_InitTypeDef GPIO_InitStructure; 
 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
         
        USART_DeInit(USART1); 
        USART_InitStructure.USART_BaudRate = 115200; 
        USART_InitStructure.USART_WordLength = USART_WordLength_8b; 
        USART_InitStructure.USART_StopBits = USART_StopBits_1; 
        USART_InitStructure.USART_Parity = USART_Parity_No; 
        USART_InitStructure.USART_Mode = USART_Mode_Tx; 
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
        USART_Init(USART1, &USART_InitStructure); 
        USART_ITConfig(USART1, USART_IT_TC, DISABLE); 
        USART_Cmd(USART1 ,ENABLE); 
} 
 
[/mw_shl_code] 
 
 
奇怪的是,为什么我的程序一直会卡死在TPAD_Get_Val这个函数的while循环中,也就是一直没有触发捕获,不解,想了好久了。。 
 |   
 
 
 
 
 
 |