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

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

[复制链接]
STMCU小助手 发布时间:2022-12-16 13:00
2.cubumx配置串口,如下图  Z* e" E  q9 {* t( x+ v

) ~7 U! J0 _. w7 M$ Q, V2 p
20210809181914849.png 6 H! T0 }: }, A( M* |: d

! Q( l8 w2 Q6 R7 l) F6 A: \9 m; z8 a' o3.配置DMA3 R- h( U" u! M, x5 j. F
8 R4 s% ], v' p  {! p2 H. w
20210809182044660.png 1 P7 M# M' H% k

) [0 c& I+ h" v& Z  P5 f# N 4.配置中断
% V* [4 Q0 M4 I) ^
4 J# j* F* {+ r% |
20210809182500957.png
! Y/ c& c& z8 V6 Q( ^7 }4 a/ R+ h- J" x1 ]! N( ~% y+ A2 q
2021080918251349.png
& o3 S3 T" `) l3 w8 k$ D" \9 f
$ N$ V# S* B2 B. E; }, [ 5.生成代码后,添加空闲中断使能代码8 L- _7 g3 Q- F9 s% ^" g
1 {" Q% d6 r; d
& n3 g+ j+ |9 C& n
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能idle中断9 s# H. c# \8 t6 s; i/ G, h3 r, p) x
! {% q1 E- ~: N! G! v. ~' k7 w& }

2 T3 n/ g& Z$ m: v) @+ n" F1 G1 }; f7 l6.h743的DMA比较特别,他有几个内存区,默认的内存区与DMA不相连,所以定义buf的时候要定义到与DMA相连的地址上
' b6 R# G' M3 ?; M, h2 z" _- ]$ N( S6 A/ I; S+ E/ d
20210809190532354.png : i5 W, s3 f- Q

2 S# p+ j% G. k
20210809190632365.png
: ?: v% l: u1 o* }; v: E. \# G& N" r$ ~1 P# m" ]# V6 l, S
2021080919070283.png
0 E( t( R0 O+ V+ A8 R' U: C
, H' ^7 u* @7 b! Z 7.所以修改工程下的stm32h743xx_flash.icf文件,添加如何下画圈部分; J% T$ p4 ~$ \) _, ~

. R6 G. z/ |% |# W, |
20210809191035844.png
  P1 A2 g2 _( q9 N  B; ^
4 I6 }% K- c3 R8.定义buf时这样定义:
4 n) k6 |! I2 L1 L2 J% ]  |( V5 O0 D2 s+ e% F- t/ Y
20210809191150773.png 2 h- i. `7 x5 z, V) H, T1 ^8 F

! Z7 Q: J. F) E+ ?# B, W; w) I$ [) ] 9.串口DMA发送代码:" q0 h6 B0 w7 u6 T" l
6 a+ z- s( o) j* t- Z8 s  c% P
if(HAL_UART_Transmit_DMA(&huart1,cbuffer,csize) != HAL_BUSY)6 l, A& h/ ^6 c

. m8 l) }: E! _10.串口中断接收代码% Q8 u5 [7 ~# t- v9 S3 S

. S1 l0 E- U6 wHAL_UART_Receive_IT(&huart1, cbuffer, RX_BUF_SIZE);
. g9 M" v9 d7 b9 a& |/ \: P
11.中断处理
5 X& T' V! o; }1 [
) a: D2 C7 y# f2 M& S
20210809184129113.png ! |4 g1 {" Z2 T5 D" O* M

4 ~5 w8 Q" n. y9 O, i
20210809184202141.png 1 Q- k: {  x. p6 o$ V. [# |! h

0 L6 z0 e. J  @/ e( g/ @12. usart1_Rx()   ,usart1_Tx()  为加入了环形队列的发送接收接口函数  F' y' `7 k) I6 M) p& E  B
+ L+ `$ z/ a$ W; `, B: h3 [
13.中断中不能调用ucosii先关的函数,例如信号量的处理等,加了暴力测试串口时会出错,查了下貌似和内核管理中断有关,这个玩意CPU_CFG_KA_IPL_BOUNDARY。但也尝试了中断加OSIntEnter() 和OSIntExit(),修改中断号范围>CPU_CFG_KA_IPL_BOUNDARY, 也不行。. B2 ^, b9 k$ O( e/ J8 o: q7 h/ V- V& y
————————————————
. E7 c0 j# W: V' W版权声明:鱼入大海_9 f0 |1 q9 w) w' m4 Z! W0 ~1 J
6 U1 ^# P  P1 }: m) o
: }" ]- k  M/ H9 {. b1 {* C
赞 收藏 评论0 发布时间:2022-12-16 13:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版