|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 岁月如歌21 于 2025-11-14 16:44 编辑
. Q1 {( c p8 ^; E" M8 D8 n: g( O9 F- l
5 O5 J+ C8 \7 l! `7 o p4组串口UART使用DMA收发, 精品实战代码, 易用,高效,稳定 !
( S N) w) C" b" V d源自实际系统 @STC32G12K128 系列6 X1 ?6 Y' y8 V5 x
非常容易使用, 将C文件添加至项目, 初始化后, 即可用.
0 {1 o. u2 E6 G% S仅3个函数, 包含一切UART串口操作, 适用90%以上场景 !
+ B8 m" Y, O" |# T4 x' Z===从此告别串口驱动代码开发.
' G5 ^* c0 e1 o- E5 X: Nvoid UART1_Init(u32 btl); //初始化串口
+ y7 H% }" G2 G v! P- Mu8 UART1_Send(void *pt, u16 Size); //发送数据
& G/ z1 V/ q* ` fu16 UART1_Receive(u8 *buf, u16 Size); //接收数据$ q ]6 B# w: |" `/ S
main() 函数演示 4个串口同时使用 DMA 收发数据, 收到数据后原路返回, 不限数据长度, 持续收发.- z. D5 S' {6 T; O
7 Q. S# F- K3 V$ [, x
主要收发函数使用说明:) V; l1 p: n" R- g0 G# O
/**
/ M( M2 L. L, i: _1 S8 x* { * 原型: u8 UART1_Send( void *pt, u16 Size);
+ I3 r( ^. D. v * @功能 串口发送数据. 写数据至发送缓冲区(循环池), 写完立即返回, 由DMA管理数据流向串口,4 j1 A$ r& x+ i9 }' z) }4 Y1 R
用户无须关心. 只要缓冲区有足够的空间, 可持续写入数据
^; Y0 g& q. L( D. z * @参数 pt: 发送数据指针/ k* S; F# [9 D
* @参数 Size: 发送数量(字节)
" u- @) F' y% u/ ^" ^9 X3 m% ~ * @返回值 当缓冲区没有足够的空间装入数据时返回1, 其它时候返回06 T# t4 w1 R/ f1 z9 a
*/ + p( S# J N" B/ o+ W3 G
* }. M1 t0 Q% `5 ~, p
/**
4 {, x' e( J$ ?0 y' T7 v. e3 e * 原型: u16 UART1_Receive(u8 *buf, u16 Size);! Z! v" o. r' }% X" _
* @功能 读串口数据, 从缓冲区内读取数据. (DMA接收数据后存放至接收缓冲区,
. o9 ~, b; B6 k- b" [ 应用代码必须定时查询读取, 否则循环池发生数据覆盖, 会丢失一部分数据, 没有提示, 但不影响后续收发)
6 B- w( S; e* q * @参数 buf: 接收数据指针1 H9 t8 F) d$ k2 B7 ~
* @参数 Size: Size期盼接收的字节数
3 w* c. a6 l ^- G2 p * @返回值 实际接收字节数. 缓冲区空时(没有数据可读)返回0, 返回值<Size说明本次读取完成后,缓冲区已空.' c) `1 O3 y9 R, N6 h* s
返回值==Size说明本次读取完成后,缓冲区仍有数据可读. 任何时候,返回值不会大于Size# d- e- A- s& u2 n& W( Y
*/ |
|