请选择 进入手机版 | 继续访问电脑版

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

stm32H743 ucosii下的串口DMA发送和中断接收加空闲中断

[复制链接]
STMCU小助手 发布时间:2022-12-16 13:00
2.cubumx配置串口,如下图
* W: C0 J5 c* q+ w0 c; J4 H) \6 v/ Q
3 \) p9 ~% |) y0 Y
20210809181914849.png
! E: C2 @" |4 r, `: X: \) ?8 n8 ^" ^( e0 P& j; \
3.配置DMA2 T: Z: E3 Y6 L/ W) N+ Q
* b4 ~4 Z% w& w( V% l
20210809182044660.png * p# k+ B; ^5 U: A. Z( P' Z

* a0 i- p% \7 r& @2 X 4.配置中断
5 ~8 S$ V% a! Z/ L
8 C2 Z  `3 O% ?9 ?; q" N0 f
20210809182500957.png 5 l$ z" k7 y$ X) C

4 ]2 m) x7 G& w
2021080918251349.png ; o2 s" n4 F9 N% B. l* i& H: l

, ^/ w3 a. g, t4 D; d% Y/ R, L 5.生成代码后,添加空闲中断使能代码, Z# g. S- s! a, f0 y( d0 z

8 {0 w4 j/ o* h  P* w0 o# H3 R; Z0 ~/ w3 C7 y1 e7 Q: X
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能idle中断
* t& {/ Y" G, I+ ?' O. h) D/ A& J5 {3 t8 _

; s9 r. p% Y7 r) h8 j2 @6.h743的DMA比较特别,他有几个内存区,默认的内存区与DMA不相连,所以定义buf的时候要定义到与DMA相连的地址上
, z3 d7 _/ p; R7 b0 \2 A. T" A+ A' R, i2 t) z: W
20210809190532354.png - U* d; A; q* Q

3 w3 Q: G- H  B% ?- G% I
20210809190632365.png * `" b$ e8 Z2 X2 Y9 P

* }/ i/ T3 \& }& H- {6 a' Y& V( P; T- \
2021080919070283.png
1 j: m& ?* x1 j0 K& C" O
+ N. l0 X6 l' P. }) q+ v 7.所以修改工程下的stm32h743xx_flash.icf文件,添加如何下画圈部分7 }5 y" I7 N0 M4 S) G" x5 C, l
6 n% p; y. s8 z9 @) T
20210809191035844.png
$ e  x- W( C+ C
" ], v  A& [. [* v/ M8.定义buf时这样定义:
& c7 G. k# e1 R6 ~: i! H6 R7 }4 ]) o1 q9 x: g* N! o
20210809191150773.png ' j  Y: ]! ~9 D/ E7 m
2 _3 D' `! ]& P5 L' l7 t5 i6 b
9.串口DMA发送代码:( ~; f1 g% y7 s9 r; n
( k( |1 A& E1 a+ C9 ^
if(HAL_UART_Transmit_DMA(&huart1,cbuffer,csize) != HAL_BUSY)
7 C: m  A: L' m( c
) F/ R$ z/ X! K8 F10.串口中断接收代码* X- P2 h" z5 w
* ]1 O2 n! Q8 D% q
HAL_UART_Receive_IT(&huart1, cbuffer, RX_BUF_SIZE);
- {! o: n- o& p$ ?5 P' Z, H
11.中断处理
7 w& d2 X& @' Z! j+ U5 V$ P: p5 k; e& o3 c
20210809184129113.png 1 E- j) c6 t* E; m! |: o+ v5 S4 q# T

) U( O& Y% E. j! G2 u" P' s
20210809184202141.png ( S2 |, G2 a% o7 r) S: U

& M/ l. s: u2 g$ w5 O5 N12. usart1_Rx()   ,usart1_Tx()  为加入了环形队列的发送接收接口函数
' O9 R+ a, ~- h1 r
5 e/ j* p. ?: n. ~% j  n13.中断中不能调用ucosii先关的函数,例如信号量的处理等,加了暴力测试串口时会出错,查了下貌似和内核管理中断有关,这个玩意CPU_CFG_KA_IPL_BOUNDARY。但也尝试了中断加OSIntEnter() 和OSIntExit(),修改中断号范围>CPU_CFG_KA_IPL_BOUNDARY, 也不行。# j* M' d! T1 [, ]* K8 H- A- B; z
————————————————
' L" J. O2 S2 C, ?1 b9 i- c版权声明:鱼入大海_
9 ^5 M7 o" V! c1 [+ F. T

5 }- Z! w7 }( ]0 h3 E, b4 A% O0 I% `! A" }: d$ M
收藏 评论0 发布时间:2022-12-16 13:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版