本帖最后由 ssssssss 于 2024-1-26 13:54 编辑
TIM1->CCR2 = ((TIM1->CNT + (tmp_arr / 2)) % tmp_arr);
半bit时间的设定没看懂。
[C] 纯文本查看 复制代码 static void UART_Emul_ReceiveFrame(UART_Emul_HandleTypeDef *huart, uint32_t *pData)
{
uint32_t tmp_sr =0;
uint32_t tmp_ds =0;
uint32_t tmp_size =0;
uint32_t tmp_arr =0;
tmp_arr = TIM1->ARR;
tmp_ds = (uint32_t)pData;
tmp_sr = (uint32_t) & (huart->RxPortName->IDR);
tmp_size = __HAL_UART_EMUL_FRAME_LENGTH(huart);
/* Enable the transfer complete interrupt */
__HAL_DMA_ENABLE_IT(&hdma_rx, DMA_IT_TC);
/* Enable the transfer Error interrupt */
__HAL_DMA_ENABLE_IT(&hdma_rx, DMA_IT_TE);
/* Configure DMA Stream data length */
hdma_rx.Instance->NDTR = tmp_size;
/* Configure DMA Stream source address */
hdma_rx.Instance->PAR = tmp_sr;
/* Configure DMA Stream destination address */
hdma_rx.Instance->M0AR = tmp_ds;
/* Enable the Peripheral */
__HAL_DMA_ENABLE(&hdma_rx);
if ((huart_emul->RxXferCount == 1)||(huart->State != HAL_UART_EMUL_STATE_BUSY_TX_RX))
{
TIM1->CCR2 = ((TIM1->CNT + (tmp_arr / 2)) % tmp_arr);
}
/* Enable the TIM Update DMA request */
__HAL_TIM_ENABLE_DMA(&TimHandle, TIM_DMA_CC2);
/* Enable Timer */
__HAL_TIM_ENABLE(&TimHandle);
}
|