本帖最后由 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
*
* [url=home.php?mod=space&uid=247401]@brief[/url] This function handles EXTI0 Handler.
*
* [url=home.php?mod=space&uid=266161]@return[/url] none
*/
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:
|