|
|
@ -26,7 +26,7 @@ void ZUARTDmaReceiver::startRx(callback_t cb) { |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZUARTDmaReceiver::gertRxBufSize() { return m_rxbufsize; } |
|
|
|
void ZUARTDmaReceiver::periodJOBIrq() { //
|
|
|
|
void ZUARTDmaReceiver::periodJOBIrq() { //
|
|
|
|
|
|
|
|
if (!m_dmaisstart) return; |
|
|
|
|
|
|
@ -36,11 +36,19 @@ void ZUARTDmaReceiver::periodJOBIrq() { // |
|
|
|
m_lastrxticket = zos_get_tick(); |
|
|
|
} |
|
|
|
|
|
|
|
if (zos_haspassedms(m_lastrxticket) > m_hw_config.rxovertime_ms) { |
|
|
|
if (m_cb) m_cb(m_rxbuf, m_rxlen); |
|
|
|
|
|
|
|
m_rxlen = 0; |
|
|
|
HAL_UART_DMAStop(m_hw_config.huart); |
|
|
|
HAL_UART_Receive_DMA(m_hw_config.huart, (uint8_t *)m_rxbuf, m_rxbufsize); |
|
|
|
if (m_rxlen != 0) { |
|
|
|
if (zos_haspassedms(m_lastrxticket) > m_hw_config.rxovertime_ms) { |
|
|
|
if (m_cb) m_cb(m_rxbuf, m_rxlen); |
|
|
|
|
|
|
|
m_rxlen = 0; |
|
|
|
HAL_UART_DMAStop(m_hw_config.huart); |
|
|
|
HAL_UART_Receive_DMA(m_hw_config.huart, (uint8_t *)m_rxbuf, m_rxbufsize); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 如果DMA接收停止了,重新启动
|
|
|
|
if (!(HAL_UART_GetState(m_hw_config.huart) & 0x1)) { |
|
|
|
HAL_UART_DMAStop(m_hw_config.huart); |
|
|
|
HAL_UART_Receive_DMA(m_hw_config.huart, (uint8_t *)m_rxbuf, m_rxbufsize); |
|
|
|
} |
|
|
|
} |
|
|
|
} |