|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑
& A# `, N. H- p8 ]
$ j& J+ n: d k8 h1 Z4组串口UART使用DMA收发, 精品实战代码, 易用,高效,稳定 !) n- ?0 @. J# i
源自实际系统 @STC32G12K128 系列; R/ ^0 }8 u9 n! M
非常容易使用, 将C文件添加至项目, 初始化后, 即可用., r, q* O2 ? A
仅3个函数, 包含一切UART串口操作, 适用90%以上场景 !9 @* N! `2 X& l2 Y3 |: [
===从此告别串口驱动代码开发.6 ^+ ^( _: W; @& @( y4 M! Z: _; H
void UART1_Init(u32 btl); //初始化串口 & s6 ~0 i# J! Y5 ^' f4 t% H
u8 UART1_Send(void *pt, u16 Size); //发送数据
1 |# g/ M$ a7 Hu16 UART1_Receive(u8 *buf, u16 Size); //接收数据0 b& w1 O5 y5 o" b# Q O/ d
main() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.; Q7 d& w% \$ T. g; [
4 z+ P) h9 {# R! V8 I+ f3 _
主要收发函数使用说明:
4 T: S; T1 [; T1 t- S9 @/**
7 O! }9 K: ^8 R * 原型: u8 UART1_Send( void *pt, u16 Size);
1 G- P: R, n+ \& X * @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口,
9 T4 h. u5 T- X! {# n/ D5 x: Z 用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据
3 a$ S3 j) Z3 n7 \ * @参数 pt: 发送数据指针
; L! d2 N3 N( H( c: p * @参数 Size: 发送数量(字节)- z+ b/ U4 u9 M! b1 c5 d+ p# m# R
* @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回0
8 m% f, e! O+ |1 P! P: K+ p. c */ ; Q* y0 F; s4 U0 R7 Q
1 l2 s) u8 d' g! s, M3 s/**
/ N0 ?* L1 I; t$ l, i * 原型: u16 UART1_Receive(u8 *buf, u16 Size);
& ?3 @' _/ z) N( P * @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,7 B" k" ^- n7 p$ W- S G1 v7 b
应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)2 z' R& V; p. U
* @参数 buf: 接收数据指针
7 r; d. p/ ?/ V. q6 X * @参数 Size: Size期盼接收的字节数
$ u- Z9 _: l' a, B6 A * @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.6 z, ?' Z5 P/ t6 W! B0 F4 S4 |
返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size1 ?$ z: E6 `3 z1 O5 C1 U, x
*/ |
|