你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32串口DMA+定时计数接收不定长数据和发送定长数据  

[复制链接]
电子星辰 发布时间:2018-6-1 11:25
本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 $ ^; F+ {" [0 p8 }0 N1 J
: H+ l; ]/ n8 D' B5 z$ R
这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。; G, i) Y4 B; X6 i" R+ A
(直接把主循环当定时器用了,如果要用定时器,直接把: t% a) n% r: E/ \' _) s
       if(USART_RX_STA > 0)
6 J! m/ s  U/ n# p& ^* v        {
: L# L: y: ?) w5 E; H* x, _            timer_count++;4 G+ \4 ]2 u9 _, y4 `& P6 d
            if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出. f; v! X9 [# M/ D* T& u$ p
        }
% _+ ]) G8 a2 i$ K4 U, z放定时器中断里就可以了% g: a2 d4 o: R: p" o
)( V1 m$ j' u7 y2 j1 e. p
' o% \5 o, v" n7 I( ^
因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。1 N" \; O8 U9 @2 x6 m! {, B( B
发送部分一直都是用的HAL_UART_Transmit重定向printf。0 s0 m9 c8 p7 F+ R; c+ l
接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。
* l. _: q" c1 G+ e( d% n# X
: \) x, o$ Y" ]" X将这个串口程序做一个展示吧。
1 L8 ~1 E9 v; r" E
+ B# f/ i. v, l! P; G5 X
8 D% c3 i% `% E1 f# [/ z* b) F8 K. Q
Cybe Pinout配置.PNG

我用的16M的晶振

我用的16M的晶振
串口基本设置.PNG

用的轮询

用的轮询
串口中断.PNG
串口GPIO.PNG

STM32_Test.rar

下载

7.15 MB, 下载次数: 2592

串口程序

评分

参与人数 3 ST金币 +6 收起 理由
Andyl999 -1 标题说是收和发,其实只有收没有发。我的发.
byq1314 + 1 赞一个!
MrJiu + 6 很给力!

查看全部评分

赞 收藏 3 评论20 发布时间:2018-6-1 11:25

举报

20个回答
ZDPHPN 回答时间:2018-6-21 11:02:12
我也分享一个串口空闲中断+DMA收发的例子,只要发送是连续的,使用空闲中断+DMA接收不定长数据还是可以的

RS232.rar

下载

1.71 KB, 下载次数: 144

文件名任意,就是一个串口收发,包括.c/.h两个文件

点评

谢谢分享!谢谢支持!  发表于 2018-6-21 11:51
wpgdut 回答时间:2019-1-3 23:20:25
谢谢分享,解决了我一个困惑很久的问题。原本串口使用查询发送和中断接收,但是在有接收的同时进行发送,就会导致死锁,然后再也进不去中断。将中断接收改为DMA接收解决了这个问题。再次表示感谢!
MrJiu 回答时间:2018-6-2 09:44:16
支持一个!!!
gary6580 回答时间:2018-6-2 16:21:35
支持+1
fan1996 回答时间:2018-6-20 21:03:11
支持支持
( E, z# p$ |% X' o
电子星辰 回答时间:2018-6-20 21:05:59
fan1996 发表于 2018-6-20 21:03
! X& C" I2 p6 P" q& c/ M0 g1 A7 W支持支持
. A& A' o8 e3 `& A7 r  e$ G
谢谢支持!
fan1996 回答时间:2018-6-20 21:06:37
不能正常下载难受!. }) w( H  J- s9 L! L" |* ?
fan1996 回答时间:2018-6-20 21:13:21
不知道ie能下载吗?7 n" q7 O8 k6 b% S& x4 d
fan1996 回答时间:2018-6-20 21:15:01
ie是正常的!- D- Z6 S% o5 }- G
zhangqiming 回答时间:2018-7-31 11:28:55
这个设置的界面怎么调出来的吗  是keil5吗
电子星辰 回答时间:2018-7-31 13:07:01
heke8861 发表于 2018-7-31 11:28
& e$ A' d* H+ y# `6 u5 H4 e这个设置的界面怎么调出来的吗  是keil5吗
' y* h4 j4 `! p8 n* g: O
STM32CubeMX
lpdpzc-2021853 回答时间:2018-8-9 10:48:28
不错,学习中
wkfback 回答时间:2019-1-27 21:25:46
点赞
jeffhe1 回答时间:2019-1-28 09:13:02
謝謝參考一下
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版