当前位置:职场发展 > stm32触摸按键无法进入中断(stm32触摸按键)

stm32触摸按键无法进入中断(stm32触摸按键)

  • 发布:2023-10-06 03:59

stm32触摸按键无法进入中断(stm32触摸按键)

STM32中断控制程序已配置,但无法进入中断。我不知道这是怎么回事?请帮我解决部分程序!

你的初始化顺序是什么?查看是否还有初始化函数没有被调用,就是上面的函数。 其他问题

这是初始化顺序。我已经研究了很长时间,但我仍然不知道为什么。硬件连接没有问题。请帮我!

    STM32 DMA 无法进入中断

    如果就是进不去中断,检查NVIC的中断映射是否配置。我使用DMA发送,供大家参考。

    相关定义:

    #define USART1_Tx_DMA_Channel DMA1_Channel4
    #define USART1_Tx_DMA_STREAM DMA2_Stream7
    #define USART1_Tx_DMA_TCIF DMA1_FLAG_TC4 #define USART1_Rx _DMA_Channel DMA1_Channel5
    #define USART1_Rx_DMA_FLAG DMA1_FLAG_TC5
    #define USART1_DR_Base ((uint32_t)& USART1->DR)

    代码:

    #ifdef USART1_USE_DMA_MODE
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //启用DMA1时钟
    #ifdef USART1_DMA_TX
    NVIC_InitStructure. NVIC_IRQChannel = DMA1_Channel4_IRQn; //设置中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主优先级设置
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断
    NVIC_Init(&NVIC_InitStructure);
    DMA_DeInit(USART1_Tx_DMA_Channel);
    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1 _DR_Base;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)m_UartDCB.pSendBuff;
    DMA_InitStructure。 DMA_DIR = DMA_DIR_PeripheralDST;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable ;
    DMA_InitStructure.DMA _PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(USART1_Tx_DMA_Channel, &DMA_InitStructure); //配置DMA1
    DMA_ITConfig(USART1_Tx_DMA_Channel, DMA_IT_TC, ENABLE); //使能DMA发送中断
    #endif //_USART_DMA_TX__
    #endif //USE_DMA_MODE

    跟进

    我有你的所有设置,但找不到原来的问题。但我无法发布代码。请问你的代码是怎么贴出来的?

    跟进

    发代码很简单。下图中,

    如果看到没有红圈的地方,下拉展开,选择C/C++。

      最近自学STM32,写了一个按键中断程序,但是中断总是没有响应...希望大家能给我一些建议,谢谢...程序如下

      尝试过这个应用程序。 。中断是可能的。 。
      如果无法进入并中断,可能是硬件连接问题。 。把PE3的GPIO_Mode改成IPU或者IPD再试试进一步问题

      好的,谢谢,我再试试
      刚刚试了一下还是不行...但是如果中断的话服务函数EXTI3_IRQHandler();将其视为一般子函数,然后在主函数main前添加函数声明void EXTI3_IRQHandler(void);最后将中断服务函数写入main函数中的while(1) {EXTI3_IRQHandler(); }
      这样确实可以达到效果,但是已经失去了中断的意义...
      可以实现中断吗?也许真的是我的硬件连接有问题?

      跟进

      EXTI3_IRQHandler();无需单独声明。中断向量表已经包含在芯片对应的startup.s文件中。当中端生成后,可以直接进入中断处理程序。另外,EXTI3_IRQHandler()一般声明在stm32f10x_it.h中,具体内容写在stm32f10x_it.c中。另外,可以在void EXTI3_IRQ中声明在Handler(void)后面添加断点进行调试。上面的程序中,我注释掉了几个delay的调用,然后就可以中断模拟了...

      还有问题吗

      哦,好吧,我也试试这个

      STM32无法进入中断

        /*我不知道你之前的程序,所以我无法判断你哪里出了问题。试试我调试成功的,看看有没有错误。正常情况下,PB5678周期性点亮。 EXTI0_IRQHandler()中断发生后,PB56循环点亮。 EXTI1_IRQHandler()发生后,PB78循环点亮。 EXTI0 的优先级高于 EXTI1*/#include "stm32f10x.h"
        extern void Delay(vu32 nCount ; int main(void)
        {
        //SystemInit();
        RCC_Config( );
        GPIO_Config();
        EXTI_Config();
        NVIC_Config();
         while (1)
        {
        GPIO_SetBits(GPIOB, GPIO_Pin_5);//GPIOB.5= 1
        Delay(0xfffff);
        GPIO_SetBits(GPIOB, GPIO_Pin_6);//GPIOB.6=1
        Delay(0xfffff);
        GPIO_SetBits(GPIOB, GPIO_Pin_7);//GPIOB.7= 1
        Delay(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=0
        Delay(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=0
        Delay(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_8);//GPIOB.8=0
        延迟(0xfffff);
        }
        }
        void RCC_Config(void)
        {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE );
        /*开时钟*/
        }
        void GPIO_Config(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;/*LED为B 5678*/
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;//KEY为A 01
        GPIO_In itStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        }
        void EXTI_Config(void)
        {
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //将A0接EXTI0
        EXTI_InitTypeDef EXTI_InitStructure;
        EXTI_InitStructure.EXTI_Line = EXTI_Line0;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);//将A1接EXTI1
        EXTI_InitStructure.EXTI_Line = EXTI_Line1;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXT I_Trigger = EXTI_Trigger_Falling;// EXTI_InitStructure.EXTI_LineC md = ENABLE ;// 电影使能
        EXTI_Init(&EXTI_InitStructure);
        }
        void NVIC_Config(void)//电影安时最好级别
        {
        NVIC_InitTypeDef NVIC_InitStructure;
         NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1) ; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        /* 启用 EXTI1 中断 */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//1
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC _InitStructure.NVIC_IRQChannelSubPriority = 0;
         NVIC_InitStructure .NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        }
        extern void Delay(vu32 nCount) //简单长延时函数
        {
        int i; //声明内部减变量
        for(; nCount!= 0; nCount--) //减变量计数
        {
        for (i=0; i<0xffff; i++);
        }
        }
        /*以下是中断函数,添加到stm32f10x_it.c文件中*/
        #include "stm32f10x_it.h"
        void EXTI0_IRQHandler(void)
        {
         int i;
         if(EXTI_GetITStatus(EXTI_Line0) != RESET)
        {
        /*清除按键EXTI线路挂起位*/
        EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志位
        for(i= 0;i<2;i++)
        {
        GPIO_SetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=1
        延迟(0xfffff);
        GPIO_SetBits(GPIOB) , GPIO_Pin_6);//GPIOB .6=1
        延迟(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=0
        延迟(0xfffff);
        GPIO_RESETBITS(GPIOB,GPIO_PIN_6); // GPIOB.6 = 0
        延迟 (0xfffff); i;
        if(EXTI_GetITStatus(EXTI_Line1) != RESET)
        {
        /*清除按键EXTI线路挂起位*/
        EXTI_ClearITPendingBit(EXTI_Line1);//清除中断标志位
        for(i=0;i<2;i++)
        {
        GPIO_SetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=1
        Delay(0xfffff);
        GPIO_SetBits(GPIOB, GPIO_Pin_8 );//GPIOC.8=1
        延迟(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=0
        延迟(0xfffff);
        GPIO_ResetBits(GPIOB, GPIO_Pin_8 );//GPIOB.8=0
        延迟(0xfffff);
        }
        }
        }

      以上是小编对stm32触摸按键无法进入中断(stm32触摸按键)及相关问题的解答。 stm32触摸按键无法进入中断(stm32触摸按键)问题。我希望它对你有用!

      相关文章