EDA365电子论坛网
标题:
4组串口UART使用DMA收发 @32G系列,易用,高效,稳定 !
[打印本页]
作者:
岁月如歌21
时间:
2025-11-14 16:43
标题:
4组串口UART使用DMA收发 @32G系列,易用,高效,稳定 !
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑
) ~7 i8 G* ]6 }2 x' o
% f. {1 R3 ?1 g* l
4组
串口
UART
使用
DMA
收发, 精品实战代码, 易用,高效,稳定 !
. J' _! X; S* S! O8 Y3 e- ~/ D
源自实际系统 @
STC32G12K128
系列
B$ e+ E# z9 ~
非常容易使用, 将C文件添加至项目, 初始化后, 即可用.
& x g( z! S7 S
仅
3个函数
,
包含一切UART串口操作
,
适用90%以上场景 !
5 w. c; I$ S. n0 P$ C% E
===从此告别串口驱动代码开发
.
* n" \) T9 {& y8 G; _
void UART1_Init(u32 btl); //初始化串口
$ o1 }. i( @3 L5 `; y- _, B: l- u
u8 UART1_Send(void *pt, u16 Size); //发送数据
, N# `9 d7 b7 q3 f) `
u16 UART1_Receive(u8 *buf, u16 Size); //接收数据
6 e& c: o$ T+ |9 W
main() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.
4 R3 `8 u: o- U% @7 t3 I
7 S0 ~; x7 Z9 @" B, x
主要收发函数使用说明:
1 I" f4 j j7 d8 K% c+ \" z
/**
2 c4 l: s; T9 _1 d0 n, m) ?
* 原型: u8 UART1_Send( void *pt, u16 Size);
8 n4 x( X/ V N
* @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口,
0 A: n! U8 ]0 | F
用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据
1 U% N0 J0 a: _* A
* @参数 pt: 发送数据指针
. A! _( w. b) \) X8 r7 ~
* @参数 Size: 发送数量(字节)
4 c |# f( d) Z4 v7 c
* @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回0
4 f# `( g$ r- A: r% H5 l
*/
: N4 k, X0 K" Z$ k" h/ q- j
9 j. J$ [1 E7 e0 V$ ^- N7 R
/**
0 [) w6 O' [! Z' h8 p e1 Z
* 原型: u16 UART1_Receive(u8 *buf, u16 Size);
" l* g" a0 M e+ Y$ }+ V7 d
* @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,
# k6 ^3 K$ G2 S( [2 v
应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)
0 z6 b/ a- F5 s
* @参数 buf: 接收数据指针
+ x: F5 A3 w; s: [% ?
* @参数 Size: Size期盼接收的字节数
% W9 @5 R, h; T$ u7 \
* @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.
/ ]; E8 t+ c5 C0 e; j" A
返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size
2 {9 u6 _6 \, R9 |1 C, {! M r# b
*/
4串口 DMA 实例代码 STC32G.rar
2025-11-14 16:44 上传
点击文件名下载附件
下载积分: 威望 -5
101.49 KB, 下载次数: 0, 下载积分: 威望 -5
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2