lilijin1995 发表于 2022-10-23 11:58

CH32V003简单介绍EXIT并配置PD0测试EXIT0

本帖最后由 lilijin1995 于 2022-10-23 12:00 编辑

#申请原创#
@21小跑堂



3.4 Eg4_EXTI这一节,我们将向大家介绍如何使用 CH32V003的外部输入中断。在前面几节的学习中,我们掌握了 CH32V003的 IO 口最基本的操作。本节我们将介绍如何将 CH32V003的 IO 口作为外部中断输入;这一节的代码主要分布在固件库的 ch32v00x_exti.h 和 ch32v00x_exti.c 文件中。这里我们首先 CH32V003IO 口中断的一些基础概念。CH32V003的每个 IO 都可以作为外部中断的中断输入口,这点也是 CH32V003的强大之处。CH32V003的中断控制器支持9个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。CH32V003的9 个外部中断为:线 0~7:Px0~Px7(x=A/C/D),任何一个 IO 口都可以启用外部中断/事件功能,由 AFIO_EXTICRx 寄存器配置。线 8:PVD 事件,超出电压监控阀值线 9:自动唤醒事件。3.4.1硬件设计:本节配置PD0作为测试EXIT0的IO口;3.4.2 软件设计:本节的代码设计,主要在我们的MyBSP目录下的EXIT.c中先介绍 EXIT_Init函数,该函数代码如下:void EXIT_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    EXTI_InitTypeDef EXTI_InitStructure = {0};
    NVIC_InitTypeDef NVIC_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    /* GPIOA ----> EXTI_Line0 */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource0);
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI7_0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

}

最后是中断请求函数声明和进入中断的处理void EXTI7_0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

/*********************************************************************
* @fn      EXTI0_IRQHandler
*
* @brief   This function handles EXTI0 Handler.
*
* @returnnone
*/
void EXTI7_0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
{
    printf("Run at EXTI\r\n");
    EXTI_ClearITPendingBit(EXTI_Line0);   /* Clear Flag */
}
}

这里打印提示进入了中断,也就是下降沿触发了,否则回到main函数的while循环;3.4.3 下载验证:打开串口调试助手可以看到,“Run at main”提示,拉低PD0后,“Run at EXTI”file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221023110722940.png?lastModify=1666496354
3.4.4 学习视频:

CH32V003简单介绍EXIT并配置PD0测试EXIT0:
https://www.bilibili.com/video/BV1We4y177kE/?spm_id_from=333.788&vd_source=2bbde87de845d5220b1d8ba075c12fb0


页: [1]
查看完整版本: CH32V003简单介绍EXIT并配置PD0测试EXIT0