打印
[STM32L0]

loraDIO引脚中断不起作用

[复制链接]
628|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 | 只看该作者
代码有点乱啊

使用特权

评论回复
5
hjl2832| | 2023-10-9 08:48 | 只看该作者
看代码你的IO配置为无上拉的输入了。
1.确认硬件是否外接了上拉电阻,如果没有,那么IO要配置为带上拉的输入,因为DIO是开漏输出模式。

使用特权

评论回复
6
Undshing| | 2023-10-9 21:35 | 只看该作者
引脚配置呢

使用特权

评论回复
7
Henryko| | 2023-10-10 12:57 | 只看该作者
中断正确配置了吗

使用特权

评论回复
8
AloneKaven| | 2023-10-10 18:17 | 只看该作者
一次都不会触发吗

使用特权

评论回复
9
Stahan| | 2023-10-11 20:19 | 只看该作者
这个格式直接分不清哪是注释

使用特权

评论回复
10
Mowergy| | 2023-10-17 14:24 | 只看该作者
DIO引脚正确地连接到了LoRa模块和你的处理器了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

558

主题

2431

帖子

4

粉丝