tuzhuke 发表于 2019-3-19 21:48:43

配置STM32 中断引脚 -- DWM1000 IRQ 【STM32 基础知识】

为了管理方便,论坛是邀请制,如果需要注册论坛,点击论坛上方的“店铺”,旺旺联系免费获得邀请码
DWM1000 本身有很多中断控制,例如发送完成中断,接收完成中断等等, 可以通过IRQ(GPIO8) 送到外部控制器。
DWM1000 IRQ pin可以挂到STM32 的外部中断上。 例如当接收到数据帧后,DWM1000 拉IRQ,STM32 实时处理接收到的数据帧。之前代码没有用到中断部分,这里补上一些相关内容。

1 STM32 与 DWM1000 IRQ连接原理图
从原理图上看,IRQ 连到的PB0上

2宏定义修改
#define DECAIRQ                     GPIO_Pin_0
#define DECAIRQ_GPIO                GPIOB
#define DECAIRQ_EXTI                EXTI_Line0
#define DECAIRQ_EXTI_PORT         GPIO_PortSourceGPIOB
#define DECAIRQ_EXTI_PIN            GPIO_PinSource0
#define DECAIRQ_EXTI_IRQn         EXTI0_IRQn
#define DECAIRQ_EXTI_USEIRQ         ENABLE
#define DECAIRQ_EXTI_NOIRQ          DISABLE3 增加中断处理函数(点亮LED灯)
void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(DECAIRQ_EXTI)!= RESET)
    {
      EXTI_ClearITPendingBit(DECAIRQ_EXTI);
      led_on(LED_ALL);
    }
}

4 配置外部中断 NVIC
int NVIC_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    // Enable GPIO used as DECA IRQ for interrupt
    GPIO_InitStructure.GPIO_Pin = DECAIRQ;
    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//IRQ pin should be Pull Down to prevent unnecessary EXT IRQ while DW1000 goes to sleep mode
    GPIO_Init(DECAIRQ_GPIO, &GPIO_InitStructure);

    /* Connect EXTI Line to GPIO Pin */
    GPIO_EXTILineConfig(DECAIRQ_EXTI_PORT, DECAIRQ_EXTI_PIN);

    /* Configure EXTI line */
    EXTI_InitStructure.EXTI_Line = DECAIRQ_EXTI;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//MPW3 IRQ polarity is high by default
    EXTI_InitStructure.EXTI_LineCmd = DECAIRQ_EXTI_USEIRQ;
    EXTI_Init(&EXTI_InitStructure);

    /* Set NVIC Grouping to 16 groups of interrupt without sub-grouping */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

    /* Enable and set EXTI Interrupt to the lowest priority */
    NVIC_InitStructure.NVIC_IRQChannel = DECAIRQ_EXTI_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = DECAIRQ_EXTI_USEIRQ;

    NVIC_Init(&NVIC_InitStructure);

    /* Enable the RTC Interrupt */
    //NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
    //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
    //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    //NVIC_Init(&NVIC_InitStructure);

    return 0;
}
5 硬件初始化调用上述函数
void peripherals_init (void)
{
   ……
    NVIC_Configuration();
    //AT24C16_TEST();while(1);
}6 编译下载,将IRQpin 拉高,观察LED灯








淮工王大师 发表于 2019-4-30 08:15:58

BPHero_UWB_Location_SourceCode_V1.1_16MHz
这个代码是不是和中断没有关系?
没有看到以上代码的配置。

tuzhuke 发表于 2019-4-30 09:47:12

淮工王大师 发表于 2019-4-30 08:15
BPHero_UWB_Location_SourceCode_V1.1_16MHz
这个代码是不是和中断没有关系?
没有看到以上代码的配置。

是的,正式release 出来的代码没有用到这个部分

CAUCSYD 发表于 2019-6-20 00:55:52

谢谢大牛分享

Violet 发表于 2024-4-11 10:48:18

感谢分享。。。。。。。。。

吱吱吱 发表于 2024-4-19 09:09:09

好资料感谢分享
页: [1]
查看完整版本: 配置STM32 中断引脚 -- DWM1000 IRQ 【STM32 基础知识】