3167|8

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

HC32F460 外部中断PC3 [复制链接]

 
我使用外部中断PC2成功了,但是PC3使用外部中断功能就是不行,我试了下PC3的读取外部输入功能也没错,那PC3是不是有什么特殊配置才能使用外部中断功能呀?这是我的代码,请大家看一看:
链接:
链接已隐藏,如需查看请登录或者注册

提取码:n2bm

最新回复

为了方便大家找问题,我把代码以帖子的形式展示出来了   详情 回复 发表于 2022-8-2 09:32
点赞 关注
 
 

回复
举报

21

帖子

0

TA的资源

一粒金砂(中级)

来自 2楼
 
梦溪开物 发表于 2022-8-2 09:29 官方外部中断代码

感谢你给我示范PC3的写法,但是还是有些问题想向你请教:

我看到你给的是PC3关联SW2函数的外部中断,外部中断函数为void ExtInt03_Callback(void),我在debug模式下,打断点在外部中断函数中,将PC3引脚接地或者接3.3v都不能触发中断,进入这个函数,这是为什么呢?(SW5的初始化函数会造成死循环,我已经屏蔽,)

IO_EXTI_Input.zip

9.71 MB, 下载次数: 16

 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

哪位能试一下HC32F460外部中断PC3的功能呀?

 
 
 

回复

5263

帖子

236

TA的资源

管理员

4
 

建议把代码以附件的形式,加在帖子里,方面其他网友帮你查看

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

153

帖子

0

TA的资源

一粒金砂(中级)

5
 

为了方便大家找问题,我把代码以帖子的形式展示出来了

本帖最后由 梦溪开物 于 2022-8-2 09:33 编辑

/** \file main.c
 **
 ** \brief This sample demonstrates how to set GPIO as output function.
 **
 **   - 2018-10-14  1.0  zhangxl first version for Device Driver Library of GPIO.
 **
 ******************************************************************************/

/*******************************************************************************
 * Include files
 ******************************************************************************/
#include "hc32_ddl.h"
#include "led.h"
#include "relay.h"
#include "usart.h"


#define  IO1_PORT         (PortC)
#define  IO1_PIN          (Pin02)
#define	 IO1_ExtiCh				(ExtiCh02)
#define	 IO1_EIR					(INT_PORT_EIRQ2)

#define  IO2_PORT         (PortC)
#define  IO2_PIN          (Pin03)
#define	 IO2_ExtiCh				(ExtiCh03)
#define	 IO2_EIR					(INT_PORT_EIRQ3)

static uint32_t u32ExtInt03Count = 0ul;

static void ClkInit(void);
void IO1_Callback(void);
void IO1_Init(void);
void IO2_Callback(void);
void IO2_Init(void);
void IO_Init(void);



/**
 *******************************************************************************
 ** \brief ExtInt03 callback function
 **
 ** \param  None
 **
 ** \retval None
 **
 ******************************************************************************/
void IO1_Callback(void)
{
    if (Set == EXINT_IrqFlgGet(IO1_ExtiCh))
    {
        //u32ExtInt03Count++;

        RLED1_TOGGLE();
				Ddl_Delay1ms(3000);
#ifdef  __PRINT_TO_TERMINAL
        printf("External interrupt 03(SW2) interrupt occurrence: %d\n", u32ExtInt03Count);
#endif
        /* clear int request flag */
        EXINT_IrqFlgClr(IO1_ExtiCh);
    }
}

void IO2_Callback(void)
{
    if (Set == EXINT_IrqFlgGet(IO2_ExtiCh))
    {
        //u32ExtInt03Count++;

        GLED3_TOGGLE();
				Ddl_Delay1ms(3000);
#ifdef  __PRINT_TO_TERMINAL
        printf("External interrupt 03(SW2) interrupt occurrence: %d\n", u32ExtInt03Count);
#endif
        /* clear int request flag */
        EXINT_IrqFlgClr(IO2_ExtiCh);
    }
}


/**
 *******************************************************************************
 ** \brief SW2 init function
 **
 ** \param  None
 **
 ** \retval None
 **
 ******************************************************************************/
void IO1_Init(void)
{
		/*�ⲿ�ж����yṹ��*/
		stc_exint_config_t stcExtiConfig;
		/*irq���yṹ��*/
		stc_irq_regi_conf_t stcIrqRegiConf;
		/*GPIO�ܽ����yṹ��*/
		stc_port_init_t stcPortInit;
	
    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcExtiConfig);
    MEM_ZERO_STRUCT(stcIrqRegiConf);
    MEM_ZERO_STRUCT(stcPortInit);
	
		/*****�ܽų�ʼ��*****/
	  /*�ⲿ�ж�ʹ��*/
    stcPortInit.enExInt = Enable;
    PORT_Init(IO1_PORT, IO1_PIN, &stcPortInit);
	

    /*�����ⲿ�жϺ�*/
		stcExtiConfig.enExitCh = IO1_ExtiCh;
    /*����������*/
    stcExtiConfig.enFilterEn = Enable;
    stcExtiConfig.enFltClk = Pclk3Div8;
    /*�͵�ƽ������������ʽ��*/
    stcExtiConfig.enExtiLvl = ExIntLowLevel;
    EXINT_Init(&stcExtiConfig);

		/*****�ⲿ�жϳ�ʼ��*****/
    /*ѡ���ⲿ�жϺ�*/
    stcIrqRegiConf.enIntSrc = IO1_EIR;
    /* ע���жϵ�ַ to Vect.No.001 */
    stcIrqRegiConf.enIRQn = Int001_IRQn;
    /*���жϻص�����*/
    stcIrqRegiConf.pfnCallback = &IO1_Callback;
    enIrqRegistration(&stcIrqRegiConf);

    /* Clear pending */
    NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
    /*�����ж����ȼ�*/
    NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);
    /*ʹ��NVIC*/
    NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
}

void IO2_Init(void)
{
		/*�ⲿ�ж����yṹ��*/
		stc_exint_config_t stcExtiConfig;
		/*irq���yṹ��*/
		stc_irq_regi_conf_t stcIrqRegiConf;
		/*GPIO�ܽ����yṹ��*/
		stc_port_init_t stcPortInit;
	
    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcExtiConfig);
    MEM_ZERO_STRUCT(stcIrqRegiConf);
    MEM_ZERO_STRUCT(stcPortInit);

	   /*****GPIO�ܽų�ʼ��*****/
		/*�ⲿ�ж�ʹ��*/
    stcPortInit.enExInt = Enable;
    PORT_Init(IO2_PORT, IO2_PIN, &stcPortInit);
	
		/*****�ⲿ�жϳ�ʼ��*****/
    /*�����ⲿ�жϺ�*/
		stcExtiConfig.enExitCh = IO2_ExtiCh;
    /*�����˲���ʧ��*/
    stcExtiConfig.enFilterEn = Enable;
		/*�����˲�������ʱ��ѡ��PCLK3/8*/
    stcExtiConfig.enFltClk = Pclk3Div8;
    /*�͵�ƽ������������ʽ��*/
    stcExtiConfig.enExtiLvl = ExIntLowLevel;
    EXINT_Init(&stcExtiConfig);

		/*****�ж�ע��*****/
    /*ѡ���ⲿ�жϺ�*/
    stcIrqRegiConf.enIntSrc = IO2_EIR;
    /* ע���ⲿ�жϵ�ַ to Vect.No.000 */
    stcIrqRegiConf.enIRQn = Int000_IRQn;
    /*���жϻص�����*/
    stcIrqRegiConf.pfnCallback = &IO2_Callback;
    enIrqRegistration(&stcIrqRegiConf);

    /* Clear pending */
    NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
    /*����NVIC���ȼ�*/
    NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);
    /*ʹ��NVIC*/
    NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
}


/**
 *******************************************************************************
 ** \brief  Main function of GPIO output
 **
 ** \param  None
 **
 ** \retval int32_t Return value, if needed
 **
 ******************************************************************************/
int32_t main(void)
{
		
//	ClkInit();					//ϵͳʱ�ӳ�ʼ��
		LED_Init();					//LED��ʼ��
//	RELAY_Init();				//�̵�����ʼ��
//	USART1_init(115200);	//���ڳ�ʼ����������Ϊ115200
//		IO1_Init();
		IO2_Init();
    while(1)
    {

			YLED2_TOGGLE();
      Ddl_Delay1ms(100);

    };
}


/**
 *******************************************************************************
 ** \brief Initialize Clock.
 **
 ** \param [in] None
 **
 ** \retval None
 **
 ******************************************************************************/
static void ClkInit(void)
{
    stc_clk_xtal_cfg_t   stcXtalCfg;
    stc_clk_mpll_cfg_t   stcMpllCfg;
    en_clk_sys_source_t  enSysClkSrc;
    stc_clk_sysclk_cfg_t stcSysClkCfg;

    MEM_ZERO_STRUCT(enSysClkSrc);
    MEM_ZERO_STRUCT(stcSysClkCfg);
    MEM_ZERO_STRUCT(stcXtalCfg);
    MEM_ZERO_STRUCT(stcMpllCfg);

    /* Set bus clk div. */
    stcSysClkCfg.enHclkDiv  = ClkSysclkDiv1;
    stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;
    stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;
    stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;
    stcSysClkCfg.enPclk2Div = ClkSysclkDiv4;
    stcSysClkCfg.enPclk3Div = ClkSysclkDiv4;
    stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;
    CLK_SysClkConfig(&stcSysClkCfg);

    /* Switch system clock source to MPLL. */
    /* Use Xtal as MPLL source. */
    stcXtalCfg.enMode = ClkXtalModeOsc;
    stcXtalCfg.enDrv = ClkXtalLowDrv;
    stcXtalCfg.enFastStartup = Enable;
    CLK_XtalConfig(&stcXtalCfg);
    CLK_XtalCmd(Enable);

    /* MPLL config. */
    stcMpllCfg.pllmDiv = 1u; /* XTAL 8M / 1 */
    stcMpllCfg.plln = 50u;   /* 8M*50 = 400M */
    stcMpllCfg.PllpDiv = 4u; /* MLLP = 100M */
    stcMpllCfg.PllqDiv = 4u; /* MLLQ = 100M */
    stcMpllCfg.PllrDiv = 4u; /* MLLR = 100M */
    CLK_SetPllSource(ClkPllSrcXTAL);
    CLK_MpllConfig(&stcMpllCfg);

    /* flash read wait cycle setting */
    EFM_Unlock();
    EFM_SetLatency(EFM_LATENCY_4);
    EFM_Lock();

    /* Enable MPLL. */
    CLK_MpllCmd(Enable);

    /* Wait MPLL ready. */
    while (Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
    {
    }

    /* Switch system clock source to MPLL. */
    CLK_SetSysClkSource(CLKSysSrcMPLL);
}


void IO_Init(void)
{ 
    stc_port_init_t stcPortInit;

    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcPortInit);
	
		/*����ģʽ*/
    stcPortInit.enPinMode = Pin_Mode_In;
		/*�ڲ���������*/
    stcPortInit.enPullUp = Enable;

    PORT_Init(IO2_PORT, IO2_PIN, &stcPortInit);
}
/*******************************************************************************
 * EOF (not truncated)
 ******************************************************************************/

 

 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

6
 
nmg 发表于 2022-8-1 13:42 建议把代码以附件的形式,加在帖子里,方面其他网友帮你查看

感谢告知

 
 
 

回复

153

帖子

0

TA的资源

一粒金砂(中级)

7
 

我用华大官方的例程,是可以实现PC3口的外部中断的

 
 
 

回复

153

帖子

0

TA的资源

一粒金砂(中级)

8
 

官方外部中断代码

exint_nmi_swi.rar

2.67 MB, 下载次数: 20

 
 
 

回复

153

帖子

0

TA的资源

一粒金砂(中级)

9
 
梦溪开物 发表于 2022-8-1 20:26 /** \file main.c ** ** \brief This sample demonstrates how to set GPIO as output function. ...

为了方便大家找问题,我把代码以帖子的形式展示出来了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表