進入一次中斷然后會hardfault

void Encoder_Init(void)

{

? ? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC, ENABLE);

? ? ?GPIO_InitTypeDef GPIO_InitStructure;

? ? ?EXTI_InitTypeDef EXTI_InitStructure = {0};

? ? ?NVIC_InitTypeDef NVIC_InitStructure = {0};

? ? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

? ? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入模式

? ? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置引腳速率為50MHz

? ? ?GPIO_Init(GPIOC, &GPIO_InitStructure);


? ? ?GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);


? ? ? ? ?// 配置EXTI Line0

? ? ?EXTI_InitStructure.EXTI_Line = EXTI_Line3;

? ? ?EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

? ? ?EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 觸發(fā)下降沿中斷

? ? ?EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? ?EXTI_Init(&EXTI_InitStructure);

? ? ? ? ?// 配置并使能EXTI 1 2 3 中斷

? ? ?NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

? ? ?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

? ? ?NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

? ? ?NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? ?NVIC_Init(&NVIC_InitStructure);

}

這里配置GPIOC_Pin_3中斷。

void New_Encoder_Init(void)

{

? ? ? ? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);

? ? ? ? ?GPIO_InitTypeDef GPIO_InitStructure;

? ? ? ? ?EXTI_InitTypeDef EXTI_InitStructure = {0};

? ? ? ? ?NVIC_InitTypeDef NVIC_InitStructure = {0};

? ? ? ? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_0;

? ? ? ? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入模式

? ? ? ? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置引腳速率為50MHz

? ? ? ? ?GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? ? ? ?GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);


? ? ? ? ? ? ?// 配置EXTI Line0

? ? ? ? ?EXTI_InitStructure.EXTI_Line = EXTI_Line0;

? ? ? ? ?EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

? ? ? ? ?EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 觸發(fā)下降沿中斷

? ? ? ? ?EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? ? ? ?EXTI_Init(&EXTI_InitStructure);

? ? ? ? ? ? ?// 配置并使能EXTI 1 2 3 中斷

? ? ? ? ?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);

}

這里是GPIOA_Pin_0的中斷

image.png1720716550774789.png



? ??



上面是gpioa的中斷處理函數(shù)


image.png

這個是GPIOC_3的中斷處理函數(shù)。(上面有一個錯誤,把while循環(huán)寫入到if里面,其實不和下面一樣也行,這里改成一樣)。然后EXTIO0的中斷進入一次,再按下按鍵,會進入hardfault錯誤,然后exti3沒有問題啊。然后然后新建一個工程,exti3和exti0,反正不管怎么怎么測,都只能進入一次。然后兩個都整合一次,有一個沒有反應(yīng)。

image.pngimage.png又開一個新的,然后也是只能進入一次,然后程序會reset好像是的,我再最開始按鍵初始化打了一個斷點,我發(fā)現(xiàn)進入中斷,再次運行,還會重復進入這個按鍵初始化的函數(shù)(原本打了一個端點)。這什么原因啊???

求求大佬幫俺分析分析。


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

您好,中斷函數(shù)有沒有加中斷聲明,若沒有注意加上中斷聲明,參考下圖。后續(xù)若有問題,可郵箱(lzs@wch.cn)溝通。

image.png


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频