Browse Source

fix zuart dma receiver bug

master
zhaohe 2 years ago
parent
commit
102c564962
  1. 22
      components/hardware/uart/zuart_dma_receiver.cpp

22
components/hardware/uart/zuart_dma_receiver.cpp

@ -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);
}
}
}
Loading…
Cancel
Save