|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑
. B3 E, B# R. t1 @2 C4 ]3 v6 L
' _3 j* Q% F+ i8 }$ X8 r( V4组串口UART使用DMA收发, 精品实战代码, 易用,高效,稳定 ! T1 \# `# o( S2 I6 h# B+ N& Q
源自实际系统 @STC32G12K128 系列, q d. T$ E5 t- ?
非常容易使用, 将C文件添加至项目, 初始化后, 即可用.8 S0 D1 {" ]2 h( N: H& n4 o
仅3个函数, 包含一切UART串口操作, 适用90%以上场景 !
: C1 C. O, \7 O* z8 ?/ l===从此告别串口驱动代码开发.
$ C" g. Q3 q L) fvoid UART1_Init(u32 btl); //初始化串口
7 e5 h+ D! \, a' }' bu8 UART1_Send(void *pt, u16 Size); //发送数据; ^ l% Z4 I/ T; Z
u16 UART1_Receive(u8 *buf, u16 Size); //接收数据" a: F" Q' Q& I* U4 P+ ~" c% J
main() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.8 C0 ~. o7 ]6 U5 x
: Z7 m6 I7 p3 ^( { g. M主要收发函数使用说明:4 m: O3 Z1 {7 `9 u0 Z# R9 p) h
/**
7 h6 L& G# c" R: |: a * 原型: u8 UART1_Send( void *pt, u16 Size);
/ O# H; l l( m7 Z * @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口, \+ J2 w0 o" \" A" w/ h0 T
用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据( }# ]/ _ D9 i! j3 N! C; ^
* @参数 pt: 发送数据指针% {0 s- g$ S* |4 ~
* @参数 Size: 发送数量(字节)- o+ ?0 R8 d- S- D; x5 w
* @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回03 ~$ z- A; H% p" I8 V3 n+ f* b, X
*/ 7 x+ r/ v$ L/ a% B
& b9 V( y2 V' P( ]3 }/**" m* R: \( b2 y( @5 i5 P1 E: ^! M
* 原型: u16 UART1_Receive(u8 *buf, u16 Size);% r8 l2 l, o0 a
* @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,
h% f/ W/ }' W7 v1 h' u 应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)
6 J; n) w1 Y) f0 u# t8 `2 ]9 N * @参数 buf: 接收数据指针
$ b, f* q6 K, c5 h" ?3 N * @参数 Size: Size期盼接收的字节数8 C* I6 D" b$ I& Y0 N
* @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.$ _! a' Z/ d/ ?& |4 C8 b1 V; ]2 m
返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size; i3 W k) [& j: q* `+ f6 L
*/ |
|