51uwb.cn

标题: 配置STM32 中断引脚 -- DWM1000 IRQ 【STM32 基础知识】 [打印本页]

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

1 STM32 与 DWM1000 IRQ连接原理图
从原理图上看,IRQ 连到的PB0上
(, 下载次数: 881)
2宏定义修改
  1. #define DECAIRQ                     GPIO_Pin_0
  2. #define DECAIRQ_GPIO                GPIOB
  3. #define DECAIRQ_EXTI                EXTI_Line0
  4. #define DECAIRQ_EXTI_PORT           GPIO_PortSourceGPIOB
  5. #define DECAIRQ_EXTI_PIN            GPIO_PinSource0
  6. #define DECAIRQ_EXTI_IRQn           EXTI0_IRQn
  7. #define DECAIRQ_EXTI_USEIRQ         ENABLE
  8. #define DECAIRQ_EXTI_NOIRQ          DISABLE
复制代码
3 增加中断处理函数(点亮LED灯)
  1. void EXTI0_IRQHandler(void)
  2. {
  3.     if(EXTI_GetITStatus(DECAIRQ_EXTI)!= RESET)
  4.     {
  5.         EXTI_ClearITPendingBit(DECAIRQ_EXTI);
  6.         led_on(LED_ALL);
  7.     }
  8. }
复制代码

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

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

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

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

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

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

  25.     NVIC_Init(&NVIC_InitStructure);

  26.     /* Enable the RTC Interrupt */
  27.     //NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
  28.     //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
  29.     //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  30.     //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  31.     //NVIC_Init(&NVIC_InitStructure);

  32.     return 0;
  33. }
复制代码

5 硬件初始化调用上述函数
  1. void peripherals_init (void)
  2. {
  3.    ……
  4.     NVIC_Configuration();
  5.     //AT24C16_TEST();while(1);
  6. }
复制代码
6 编译下载,将IRQpin 拉高,观察LED灯

(, 下载次数: 17)


(, 下载次数: 4)




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

是的,正式release 出来的代码没有用到这个部分
作者: CAUCSYD    时间: 2019-6-20 00:55
谢谢大牛分享
作者: Violet    时间: 2024-4-11 10:48
感谢分享。。。。。。。。。
作者: 吱吱吱    时间: 2024-4-19 09:09
好资料感谢分享




欢迎光临 51uwb.cn (http://51uwb.cn/) Powered by Discuz! X3.3