[STM32L0] loraDIO引脚中断不起作用

[复制链接]
1021|9
 楼主| powerantone 发表于 2023-10-8 09:45 | 显示全部楼层 |阅读模式
主控芯片STM32L151,利用SPI驱动lora模块,现在发现不触发中断,下边先是配置引脚
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOB_CLK_ENABLE( ); GPIO_InitStructure.Pin = GPIO_PIN_4; ///DIO1 PB4 GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStructure );
HAL_NVIC_SetPriority(EXTI4_IRQn, 10, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn);
/DIO0引脚中断/ void EXTI4_IRQHandler(void) { printf("0\r\n"); uint16_t irqRegs;
if(HAL_GPIO_EXTI_GET_IT(GPIO_PIN_4) != RESET) { printf("0-1\r\n"); HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_4);
irqRegs = SX126xGetIrqStatus( );SX126xClearIrqStatus( IRQ_RADIO_ALL );
printf("0-2\r\n"); if( ( irqRegs & IRQ_TX_DONE ) == IRQ_TX_DONE ) { //!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC SX126xSetOperatingMode( MODE_STDBY_RC ); LoraTxDoneCallback(); printf("1"); }
if( ( irqRegs & IRQ_RX_DONE ) == IRQ_RX_DONE ){    if( RxContinuous == false )    {        ///!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC        SX126xSetOperatingMode( MODE_STDBY_RC );        /// WORKAROUND - Implicit Header Mode Timeout Behavior, see DS_SX1261-2_V1.2 datasheet chapter 15.3        /// RegRtcControl = @address 0x0902        SX126xWriteRegister( 0x0902, 0x00 );        /// RegEventMask = @address 0x0944        SX126xWriteRegister( 0x0944, SX126xReadRegister( 0x0944 ) | ( 1 << 1 ) );        /// WORKAROUND END    }    SX126xGetPayload( RadioRxPayload, &Radiosize , 255 );    SX126xGetPacketStatus( &RadioPktStatus );    LoraRxDoneCallback();    printf("2");}if( ( irqRegs & IRQ_CRC_ERROR ) == IRQ_CRC_ERROR ){    if( RxContinuous == false )    {        //!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC        SX126xSetOperatingMode( MODE_STDBY_RC );    }   LoraRxErrorCallback();    printf("3");}if( ( irqRegs & IRQ_CAD_DONE ) == IRQ_CAD_DONE ){    //!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC    SX126xSetOperatingMode( MODE_STDBY_RC );    LoraCadDoneCallback();    printf("4");}if( ( irqRegs & IRQ_RX_TX_TIMEOUT ) == IRQ_RX_TX_TIMEOUT ){    if( SX126xGetOperatingMode( ) == MODE_TX )    {        SX126xSetOperatingMode( MODE_STDBY_RC );        LoraTxTimeoutCallback( );        printf("5");    }    else if( SX126xGetOperatingMode( ) == MODE_RX )    {        SX126xSetOperatingMode( MODE_STDBY_RC );        LoraRxTimeoutCallback( );        printf("6");    }}if( ( irqRegs & IRQ_HEADER_ERROR ) == IRQ_HEADER_ERROR ){    if( RxContinuous == false )    {        //!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC        SX126xSetOperatingMode( MODE_STDBY_RC );    }    LoraRxTimeoutCallback( );    printf("7");}
} }
可能是那些原因呢,有什么排除办法


classroom 发表于 2023-10-8 10:24 | 显示全部楼层
你的中断处理程序是否正确地处理了接收完成的情况?在处理接收中断后,你是否重新开启了接收器以准备接收下一个数据?
probedog 发表于 2023-10-8 10:25 | 显示全部楼层
DIO引脚是否正确地连接到了LoRa模块和你的处理器?
Bowclad 发表于 2023-10-8 22:38 | 显示全部楼层
代码有点乱啊
hjl2832 发表于 2023-10-9 08:48 | 显示全部楼层
看代码你的IO配置为无上拉的输入了。
1.确认硬件是否外接了上拉电阻,如果没有,那么IO要配置为带上拉的输入,因为DIO是开漏输出模式。
Undshing 发表于 2023-10-9 21:35 | 显示全部楼层
引脚配置呢
Henryko 发表于 2023-10-10 12:57 | 显示全部楼层
中断正确配置了吗
AloneKaven 发表于 2023-10-10 18:17 | 显示全部楼层
一次都不会触发吗
Stahan 发表于 2023-10-11 20:19 | 显示全部楼层
这个格式直接分不清哪是注释
Mowergy 发表于 2023-10-17 14:24 | 显示全部楼层
DIO引脚正确地连接到了LoRa模块和你的处理器了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

679

主题

4020

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部