说明:驱动基于STm32G031K6测试,其他型号需自行做改动。
7 [: i+ s6 g# `" L. a
# b) m0 x! m( w. m; N0 ^7 HDMA的初始化:
' C# O+ e9 C0 M4 f& B
R; S5 `+ W4 s- void STM32LLDMAInit(void)6 [# ]( I4 x4 w' ~/ q2 _% h
- {5 z c; D+ h6 j$ @- Y" _
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);; q0 a' R' o$ m8 c
- NVIC_SetPriority(DMA1_Channel1_IRQn, 0); //开DMA通道1中断! L; B* |" ]0 I: I) X
- NVIC_EnableIRQ(DMA1_Channel1_IRQn);0 a3 u- L: q% p3 `
- LL_DMA_ConfigTransfer(DMA1, LL_DMA_CHANNEL_1, //设置的DMA和通道5 a2 K3 t! B& p: ~" {8 x4 y
- LL_DMA_DIRECTION_PERIPH_TO_MEMORY | //设置数据方向从外设到内存
" L" Y+ w# _# x0 T. i) a; |4 U - LL_DMA_PRIORITY_HIGH | //设置优先级为高
7 G/ h; J6 W, j+ Y1 W3 K+ r - LL_DMA_MODE_CIRCULAR | //设置DMA为循环存储模式
0 S4 _& Z7 D3 @6 R. m- J - LL_DMA_PERIPH_NOINCREMENT | //外设地址保持不变
/ L9 j' \1 W0 v% z - LL_DMA_MEMORY_INCREMENT | //内存地址递增* {) Q0 s' n# e( ]8 _# o$ j+ D
- LL_DMA_PDATAALIGN_BYTE | //外设数据对齐方式为字节对齐,若数据为整字节的选择字节对齐,数据超过一个字节则选择其他。如12bit的ADC需要选择HALFWORD
1 J! F+ k2 ]8 q6 a0 |: I) s - LL_DMA_MDATAALIGN_BYTE); //缓存数据对齐方式为字节8 B W5 F+ B. D: r" H( G
9 Q# Y# x0 R) h4 F- LL_DMA_SetPeriphAddress(DMA1,LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(USART1,LL_USART_DMA_REG_DATA_RECEIVE)); //使用当前DMA通道的外设地址; ?# G0 o- u- s v4 I Y( ? ~, E
- LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_USART1_RX); //设置DMA通道数据请求来源* s; @" s2 K& i9 y. o; r" T" Q
- LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_1,(uint32_t)USER_Uart1_Rx_Buffer); //当前DMA通道对应的数据保存地址2 @3 S8 q6 t( R* l8 ~- f4 Y. N
- LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,MAX_USER_UART1_DMA_SIZE); //设置DMA内存大小
& v; I! F/ O3 n# O - //以上是DMA的配置,以下是相关的使能,可放到其他地方操作
4 Q# V; _6 X; ~2 S" `9 ~5 { - LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1); //使能DMA完成中断
. Y- d# b6 h7 r - LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1); //使能DMA错误中断
9 e! W7 g2 j Y3 w2 m - LL_USART_EnableDMAReq_RX(USART1); //使能串口1DMA接收模式% b- z* y! c6 \9 f/ f
- LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); //使能DMA通道1
/ ~3 p+ h2 m: Q5 q - }
复制代码 " n# K3 }2 A! ^* [5 m- m
以上DMA配置需根据外设进行相应的调整,正确配置后相关外设的数据会保存在设置的地址中,使用时从此地址中获取数据即可。2 U ?" a4 u0 D: }' N
2 H# r' k: X" r
/ A- W- C" m; A8 z |