CH32V035的EXTI問題

使用CH32V035系列CH32V033,PA10是方波輸入,用作外中斷,中斷后再另一腳輸出翻轉(zhuǎn)波形來監(jiān)測中斷,發(fā)現(xiàn)2個(gè)問題:1是無論是上升沿、下降沿、還是雙沿觸發(fā),中斷都可能在雙沿觸發(fā);2是總是有些邊沿不觸發(fā)或觸發(fā)兩次。請(qǐng)教,不知道是否有哪些地方?jīng)]處理到?只用了一個(gè)IO做外中斷。

初始化

/*********************************************************************

?* @fn? ? ? EXTI0_INT_INIT

?*

?* @brief? ?Initializes EXTI0 collection.

?*

?* @return? none

?*/

void EXTI0_INT_INIT(void)

{

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};

? ? EXTI_InitTypeDef EXTI_InitStructure = {0};

? ? NVIC_InitTypeDef NVIC_InitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? /* GPIOA ----> EXTI_Line0 */

? ? GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource10);

? ? EXTI_InitStructure.EXTI_Line = EXTI_Line10;

? ? EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;

//? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

? ? EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? EXTI_Init(&EXTI_InitStructure);


? ? NVIC_InitStructure.NVIC_IRQChannel = EXTI15_8_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? NVIC_Init(&NVIC_InitStructure);

}

中斷處理

void EXTI15_8_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));


/*********************************************************************

?* @fn? ? ? TIM2_CC_IRQHandler

?*

?* @brief? ?This function handles TIM2? Capture Compare Interrupt exception.

?*

?* @return? none

?*/

void EXTI15_8_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line10)!=RESET)

{

? EXTI_ClearITPendingBit(EXTI_Line10); ? /* Clear Flag */

? kk++;

? ? ? ? if (kk&1)

? ? ? ? ? ? his_led_on();

? ? ? ? else {

? ? ? ? ? ? his_led_off();

? ? ? ? }

? ? }

}

b3f92be28b7769a04f758ecc8b341e1.jpg

您好,程序中注意一下外部中斷引腳模式的配置,若是配置成上升沿觸發(fā),則注意引腳配置成下拉輸入模式,同理,若是配置成下降沿觸發(fā),則注意引腳配置成上拉輸入模式。后續(xù)若有問題,可郵箱(lzs@wch.cn)溝通。


按建議修改了上下拉,測試情況仍舊。我的信號(hào)輸入帶驅(qū)動(dòng)能力,應(yīng)該和上下拉無關(guān)。而只要設(shè)置了上升或下降邊沿觸發(fā),表現(xiàn)就是上下邊沿都觸發(fā)。換PA2做EXTI也一樣,仿真時(shí)檢查寄存器的正確。

image.png

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? /* GPIOA ----> EXTI_Line0 */

? ? GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);

? ? EXTI_InitStructure.EXTI_Line = EXTI_Line2;

? ? EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

//? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;

? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

? ? EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? EXTI_Init(&EXTI_InitStructure);



這邊找到問題了,是輸入信號(hào)有細(xì)微毛刺。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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