67 lines
1.3 KiB
C
67 lines
1.3 KiB
C
#include "bsp_rc.h"
|
|
#include "main.h"
|
|
#include "calc_lib.h"
|
|
|
|
extern UART_HandleTypeDef huart3;
|
|
extern DMA_HandleTypeDef hdma_usart3_rx;
|
|
|
|
void RC_Init(uint8_t *rx_buf, uint16_t dma_buf_num)
|
|
{
|
|
|
|
//enable the DMA transfer for the receiver request
|
|
SET_BIT(huart3.Instance->CR3, USART_CR3_DMAR);
|
|
|
|
//enalbe idle interrupt
|
|
//__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
|
DMA1_Stream1->CR |= (1<<4);
|
|
//disable DMA
|
|
__HAL_DMA_DISABLE(&hdma_usart3_rx);
|
|
while(hdma_usart3_rx.Instance->CR & DMA_SxCR_EN)
|
|
{
|
|
__HAL_DMA_DISABLE(&hdma_usart3_rx);
|
|
}
|
|
|
|
hdma_usart3_rx.Instance->PAR = (uint32_t) & (USART3->DR);
|
|
//memory buffer 1
|
|
|
|
hdma_usart3_rx.Instance->M0AR = (uint32_t)(rx_buf);
|
|
//memory buffer 2
|
|
|
|
//hdma_usart3_rx.Instance->M1AR = (uint32_t)(rx2_buf);
|
|
//data length
|
|
|
|
hdma_usart3_rx.Instance->NDTR = dma_buf_num;
|
|
//enable double memory buffer
|
|
|
|
//SET_BIT(hdma_usart3_rx.Instance->CR, DMA_SxCR_DBM);
|
|
|
|
//enable DMA
|
|
|
|
__HAL_DMA_ENABLE(&hdma_usart3_rx);
|
|
|
|
|
|
}
|
|
void RC_unable(void)
|
|
{
|
|
__HAL_UART_DISABLE(&huart3);
|
|
}
|
|
void RC_restart(uint16_t dma_buf_num)
|
|
{
|
|
__HAL_UART_DISABLE(&huart3);
|
|
__HAL_DMA_DISABLE(&hdma_usart3_rx);
|
|
|
|
hdma_usart3_rx.Instance->NDTR = dma_buf_num;
|
|
user_delay_ms(3);
|
|
__HAL_DMA_ENABLE(&hdma_usart3_rx);
|
|
__HAL_UART_ENABLE(&huart3);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|