Skip to content

Commit cf5e6c5

Browse files
committed
抄一下usart6_init
1 parent ffb5bce commit cf5e6c5

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

bsp/boards/bsp_usart.c

+59
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,69 @@
33

44
extern UART_HandleTypeDef huart1;
55
extern DMA_HandleTypeDef hdma_usart1_tx;
6+
extern DMA_HandleTypeDef hdma_usart1_rx;
67
extern UART_HandleTypeDef huart6;
78
extern DMA_HandleTypeDef hdma_usart6_rx;
89
extern DMA_HandleTypeDef hdma_usart6_tx;
910

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+
1069
void usart1_tx_dma_init(void)
1170
{
1271

0 commit comments

Comments
 (0)