|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑 ! P+ C! `% Y% V3 E( N+ W9 K
7 E- c0 t4 y; s, \9 z3 W4组串口UART使用DMA收发, 精品实战代码, 易用,高效,稳定 !7 K# z7 o0 M& f9 i( n
源自实际系统 @STC32G12K128 系列9 x- \' T3 G/ S; c' Q3 \0 j. |
非常容易使用, 将C文件添加至项目, 初始化后, 即可用.( ?+ W5 G( F3 I# y; H
仅3个函数, 包含一切UART串口操作, 适用90%以上场景 !
5 a. p4 J# B$ v- E) c===从此告别串口驱动代码开发.
3 N. |6 T" e& zvoid UART1_Init(u32 btl); //初始化串口
( a+ a) _0 i/ o/ }4 qu8 UART1_Send(void *pt, u16 Size); //发送数据
) x6 `* ~- ~% ], z7 \u16 UART1_Receive(u8 *buf, u16 Size); //接收数据
0 _2 d1 L1 I/ bmain() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.
% D- g0 }! v/ ?, k- D
: S) e6 D7 r' f% h+ B! t' s. M/ x主要收发函数使用说明:
1 `9 i3 `8 R+ E/**
$ |0 ^; a1 Q; r! e * 原型: u8 UART1_Send( void *pt, u16 Size);
% O0 v2 ?# V$ X. ]9 S3 ~ * @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口,
' U7 ~, N( ?6 V 用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据* e! t! R& N6 @3 l$ S: g4 V
* @参数 pt: 发送数据指针' h7 d! j5 y! ] R0 D% s
* @参数 Size: 发送数量(字节)
! Q% W y: M: l * @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回0
/ H6 v. m! z- H6 H" \$ B */ + b. Z- {0 u! I5 o# `& W* y
5 c" D9 B, A. F/**
6 q9 o8 c" C+ I) e * 原型: u16 UART1_Receive(u8 *buf, u16 Size);6 }9 ~1 L: J& D* z5 V
* @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,
# G. d& h# x9 K6 \ 应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)3 K+ H9 m- W! L+ T8 c
* @参数 buf: 接收数据指针
8 \' ?% b! ~& a& z * @参数 Size: Size期盼接收的字节数4 F( o3 v: u4 z4 \$ [3 Y8 A6 y
* @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.+ \; X' \& F. s0 H
返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size
/ g: L+ J3 K9 K' t: m */ |
|