|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑
: \/ {" x4 y7 X6 r$ a$ {
( a# K# S; u1 d: G) I5 A4组串口UART使用DMA收发, 精品实战代码, 易用,高效,稳定 !5 D2 [- |/ g- P# e
源自实际系统 @STC32G12K128 系列8 @; ?3 n ~9 S& E9 x+ Z4 S
非常容易使用, 将C文件添加至项目, 初始化后, 即可用.
& O/ u! f! K' m& e2 ?7 \. Z2 j4 z9 d仅3个函数, 包含一切UART串口操作, 适用90%以上场景 !
C& Q$ r1 e5 G, z- ]! D===从此告别串口驱动代码开发.; e/ o `6 O; c
void UART1_Init(u32 btl); //初始化串口
$ j' Q0 ]. I% [) `* wu8 UART1_Send(void *pt, u16 Size); //发送数据' D z% C) M/ T7 N
u16 UART1_Receive(u8 *buf, u16 Size); //接收数据
7 z5 [8 ~- e, c7 v7 Kmain() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.
/ A4 R1 `: U j k O* Z4 m+ a: y" |% t' I- N
主要收发函数使用说明:! H0 P" y$ Q, A+ _' t* |
/**
0 V5 Z3 k% H1 u2 ~ * 原型: u8 UART1_Send( void *pt, u16 Size);
G+ W" B% d+ y" r * @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口,! d) E" s0 S( y6 e/ ?1 Z
用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据' H' S1 e& T4 M# }7 ?5 ?' U
* @参数 pt: 发送数据指针
/ O% A2 R/ v7 J' P/ _ * @参数 Size: 发送数量(字节)
: c5 h# f5 E0 b( D$ Z * @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回00 I) e& w1 V5 r
*/ 7 ^& F, c: \/ ]. [/ F+ z5 U
% `3 b$ i; [7 ~, X. J3 S, g
/**
; K, z: d$ B6 g; z7 d7 d" g! G4 |# X * 原型: u16 UART1_Receive(u8 *buf, u16 Size);& |5 j2 L2 f4 G2 @2 E3 P
* @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,3 a2 g' h% T1 d3 g! @- j, e: \
应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)
8 f0 u F- P- C% _ * @参数 buf: 接收数据指针
: ~+ g9 H. c! c0 q * @参数 Size: Size期盼接收的字节数& e1 m u5 V/ Q5 u. F, h# m
* @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.
: _1 L2 I5 e, z( O+ \ 返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size {; C! w. q, y2 `0 d
*/ |
|