|
3 | 3 |
|
4 | 4 | extern UART_HandleTypeDef huart1;
|
5 | 5 | extern DMA_HandleTypeDef hdma_usart1_tx;
|
| 6 | +extern DMA_HandleTypeDef hdma_usart1_rx; |
6 | 7 | extern UART_HandleTypeDef huart6;
|
7 | 8 | extern DMA_HandleTypeDef hdma_usart6_rx;
|
8 | 9 | extern DMA_HandleTypeDef hdma_usart6_tx;
|
9 | 10 |
|
| 11 | +void usart1_init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num) |
| 12 | +{ |
| 13 | + |
| 14 | + //enable the DMA transfer for the receiver and tramsmit request |
| 15 | + //使能DMA串口接收和发送 |
| 16 | + SET_BIT(huart1.Instance->CR3, USART_CR3_DMAR); |
| 17 | + SET_BIT(huart1.Instance->CR3, USART_CR3_DMAT); |
| 18 | + |
| 19 | + //enalbe idle interrupt |
| 20 | + //使能空闲中断 |
| 21 | + __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | + //disable DMA |
| 26 | + //失效DMA |
| 27 | + __HAL_DMA_DISABLE(&hdma_usart1_rx); |
| 28 | + |
| 29 | + while(hdma_usart1_rx.Instance->CR & DMA_SxCR_EN) |
| 30 | + { |
| 31 | + __HAL_DMA_DISABLE(&hdma_usart1_rx); |
| 32 | + } |
| 33 | + |
| 34 | + __HAL_DMA_CLEAR_FLAG(&hdma_usart1_rx, DMA_LISR_TCIF1); |
| 35 | + |
| 36 | + hdma_usart1_rx.Instance->PAR = (uint32_t) & (USART1->DR); |
| 37 | + //memory buffer 1 |
| 38 | + //内存缓冲区1 |
| 39 | + hdma_usart1_rx.Instance->M0AR = (uint32_t)(rx1_buf); |
| 40 | + //memory buffer 2 |
| 41 | + //内存缓冲区2 |
| 42 | + hdma_usart1_rx.Instance->M1AR = (uint32_t)(rx2_buf); |
| 43 | + //data length |
| 44 | + //数据长度 |
| 45 | + __HAL_DMA_SET_COUNTER(&hdma_usart1_rx, dma_buf_num); |
| 46 | + |
| 47 | + //enable double memory buffer |
| 48 | + //使能双缓冲区 |
| 49 | + SET_BIT(hdma_usart1_rx.Instance->CR, DMA_SxCR_DBM); |
| 50 | + |
| 51 | + //enable DMA |
| 52 | + //使能DMA |
| 53 | + __HAL_DMA_ENABLE(&hdma_usart1_rx); |
| 54 | + |
| 55 | + |
| 56 | + //disable DMA |
| 57 | + //失效DMA |
| 58 | + __HAL_DMA_DISABLE(&hdma_usart1_tx); |
| 59 | + |
| 60 | + while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN) |
| 61 | + { |
| 62 | + __HAL_DMA_DISABLE(&hdma_usart1_tx); |
| 63 | + } |
| 64 | + |
| 65 | + hdma_usart1_tx.Instance->PAR = (uint32_t) & (USART1->DR); |
| 66 | + |
| 67 | +} |
| 68 | + |
10 | 69 | void usart1_tx_dma_init(void)
|
11 | 70 | {
|
12 | 71 |
|
|
0 commit comments