电子定时器小项目 (基于STM32f103ZET6)中PA0的开始定时没有作用,但是PA3和PA4的按键有效,如何解决?

电子定时器小项目 (基于STM32f103ZET6)中PA0的开始定时没有作用,但是PA3和PA4的按键有效

是长按吗 我弄的是长按一秒还是两秒开始计时

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随中的 初始化脉冲引脚PA0 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在led.c中的SR04初始化函数

    void SR04_GPIO_Init(void)
    {
     
     GPIO_InitTypeDef  GPIO_InitStructure;
     	
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 
    
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	    		
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
     GPIO_Init(GPIOA, &GPIO_InitStructure);	  				
     GPIO_SetBits(GPIOA,GPIO_Pin_0); 						 
    }
    

    led.h有关宏定义和声明

    #define SR04 PAout(0)    // PA0
    void SR04_GPIO_Init(void);
    
  • 以下回答来自chatgpt:

    经过初步分析,可能存在以下几种可能性:

    1.硬件问题,PA0按键无法正常工作;

    2.软件问题,PA0按键没有被正确初始化或中断处理有误导致无响应;

    3.程序逻辑问题,PA0按键的相关代码出现了逻辑错误。

    针对这些问题,可以采取以下解决方法:

    1.检查PA0按键是否正常工作:使用万用表或示波器等工具测量PA0引脚的电压变化,观察按键是否能够正常接通和断开,确认PA0按键本身是否有问题。

    2.检查软件代码:查看PA0引脚对应的GPIO口是否被正确初始化,确认是否已经打开了对应的中断,检查中断处理函数是否正确。如果发现有问题,需要针对问题逐步排查,修改代码。

    3.检查程序逻辑:可能存在PA0按键相关的逻辑错误,例如输入的按键值判断错误,或者处理逻辑有误导致无响应。需要对PA0按键的相关代码进行仔细的分析和调试,查找逻辑错误并进行修正。

    对于问题2和3,下面给出一份初步的代码示例,希望能够帮助您解决问题:

    void TIM2_Configuration(void)
    {
        TIM_TimeBaseInitTypeDef TIM_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
    
        /* TIM2 clock enable */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    
        /* Time base configuration */
        TIM_InitStructure.TIM_Period = 999;  
        TIM_InitStructure.TIM_Prescaler = 71;  
        TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;  
        TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM2, &TIM_InitStructure); 
    
        /* TIM IT enable */
        TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    
        /* TIM2 enable counter */
        TIM_Cmd(TIM2, ENABLE);
    }
    
    void GPIO_Configuration(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
    
        /* Enable GPIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
        /* Configure PA0, PA3 and PA4 as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_3 | GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
        /* Configure EXTI Line */
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);
    
        /* Configure EXTI Line0, 3 and 4 */
        EXTI_InitTypeDef EXTI_InitStructure;
        EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line3 | EXTI_Line4;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
    
        /* Enable and set EXTI Line0 Interrupt to the lowest priority */
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        /* Enable and set EXTI Line3 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        /* Enable and set EXTI Line4 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }
    
    void EXTI0_IRQHandler(void)
    {
        if (EXTI_GetITStatus(EXTI_Line0) != RESET)
        {
            /* Deal with PA0 press event */
            // Your code goes here
            // ...
    
            EXTI_ClearITPendingBit(EXTI_Line0);
        }
    }
    
    void EXTI3_IRQHandler(void)
    {
        if (EXTI_GetITStatus(EXTI_Line3) != RESET)
        {
            /* Deal with PA3 press event */
            // Your code goes here
            // ...
    
            EXTI_ClearITPendingBit(EXTI_Line3);
        }
    }
    
    void EXTI4_IRQHandler(void)
    {
        if (EXTI_GetITStatus(EXTI_Line4) != RESET)
        {
            /* Deal with PA4 press event */
            // Your code goes here
            // ...
    
            EXTI_ClearITPendingBit(EXTI_Line4);
        }
    }
    
    int main(void)
    {
        /* Configure GPIO and TIM2 */
        GPIO_Configuration();
        TIM2_Configuration();
    
        while (1)
        {
            /* Main loop */
            // Your code goes here
            // ...
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^