Question
STM32WL33CC1 MRSUBG stop receiving
void HAL_MRSubG_IRQ_Callback(void) {
uint32_t irq = __HAL_MRSUBG_GET_RFSEQ_IRQ_STATUS();
if (irq & MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_OK_F) {
last_rx = HAL_GetTick();
HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET);
if (HAL_MRSubG_GetBytesOfTransaction() <=
ring_buffer_u8_free(&radio_ring_buffer) &&
radio_packet_fifo_free(&radio_packet_fifo) != 0) {
for (uint8_t i = 0; i < HAL_MRSubG_GetBytesOfTransaction(); i++) {
ring_buffer_u8_write(&radio_ring_buffer, radio_rx_buf[i]);
}
radio_packet_t radio_packet = {
.len = HAL_MRSubG_GetBytesOfTransaction(),
};
radio_packet_fifo_write(&radio_packet_fifo, radio_packet);
}
__HAL_MRSUBG_STROBE_CMD(CMD_RX);
__HAL_MRSUBG_CLEAR_RFSEQ_IRQ_FLAG(
MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_OK_F);
}
if (irq & MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_TIMEOUT_F) {
__HAL_MRSUBG_STROBE_CMD(CMD_RX);
__HAL_MRSUBG_CLEAR_RFSEQ_IRQ_FLAG(
MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_TIMEOUT_F);
}
if (irq % MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_CRC_ERROR_F) {
__HAL_MRSUBG_STROBE_CMD(CMD_RX);
__HAL_MRSUBG_CLEAR_RFSEQ_IRQ_FLAG(
MR_SUBG_GLOB_STATUS_RFSEQ_IRQ_STATUS_RX_CRC_ERROR_F);
}
}This is my interrupt handling code. Everything initially works but after some time the radio just stops receiving the packets. The transmitter is not at fault as resetting the receiver instantly fixes the issue. Checking the radio fsm in the main function shows the state as RX (0x10) and there are no other errors reported anywhere.