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

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

[复制链接]
STMCU小助手 发布时间:2022-12-16 13:00
2.cubumx配置串口,如下图4 f( r) v# V! _

1 q, z2 q0 D# g7 J$ d
20210809181914849.png ( ?1 P) g' F$ X: B; ?9 A$ B
. q3 n3 k  e8 l' q$ E3 \9 g- P: p
3.配置DMA
1 ?" J5 S- R7 P2 k* t# m/ s3 T' _& _- G
20210809182044660.png 2 k: p$ K" r) a7 j
* `  h4 ~2 R9 }; a  [. }
4.配置中断
+ }0 b& s2 e0 l" p. _8 c, r& u5 _3 v5 K# s5 |; t( D; q, w
20210809182500957.png
; T3 X9 n1 O: I- i5 _
8 \2 c# M+ j7 v8 b! }9 M
2021080918251349.png
0 G2 w& G  _1 N- n' e) D* Q8 P7 ~, M% ^
5.生成代码后,添加空闲中断使能代码
! m5 }9 P4 D1 E) M
* K$ i# |$ X% Q2 S" E1 L$ Q
( c6 {% x- x' d+ G2 [+ T' U! r0 E__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能idle中断& h* D$ ~8 ?9 q& V
7 C; f8 `6 l8 I; J1 ]% f
4 c. X  ~( r' l! P9 D" n0 R' d
6.h743的DMA比较特别,他有几个内存区,默认的内存区与DMA不相连,所以定义buf的时候要定义到与DMA相连的地址上
! `5 C( a* N: @2 Q/ o2 G: |+ P6 U9 [* R
20210809190532354.png * o& D6 i: y4 A. P4 o

- f/ P3 z) E6 ~0 W" m: ~+ ]4 ^
20210809190632365.png
4 E  r6 ^3 E, i# m( z2 K( K5 V, K5 K$ i6 H- b$ s! ]
2021080919070283.png
, p! s5 t* L% @! {: C  D3 \
2 r% w; O; v* v9 U5 ]; } 7.所以修改工程下的stm32h743xx_flash.icf文件,添加如何下画圈部分" i) r+ u2 T0 y) r: i
( Q5 J2 d- Q( J, ]# E& N
20210809191035844.png
0 S. V  n# y4 i! t3 J" p: @+ I6 v! ]: [( j, A' {
8.定义buf时这样定义: ( [+ d8 g# ~$ k( w3 h

) R$ R7 T7 F/ g. E6 w
20210809191150773.png
* L! c( L, q4 `
& N% [. J, U. X, U$ ` 9.串口DMA发送代码:
, V  X7 E9 n3 J* |% z/ \( A7 f2 A( ]5 M4 a* g+ p' q/ u
if(HAL_UART_Transmit_DMA(&huart1,cbuffer,csize) != HAL_BUSY)
3 t% L. b$ B2 V( `* U
% I2 u4 i/ G$ L( f3 J. W10.串口中断接收代码
9 p5 e  |, n9 L- ?7 a  S( ]+ @; `. P8 H: \
HAL_UART_Receive_IT(&huart1, cbuffer, RX_BUF_SIZE);
$ w7 t+ }: x8 k' X
11.中断处理
' t8 y% T* `# T# ?+ w5 T7 M# a) C" l5 f; _8 M
20210809184129113.png
- u  |+ B, o9 b7 d4 }2 }
8 E: p. x4 n: X- S
20210809184202141.png ; m# A/ H( u; R6 @. D
, J8 M0 O8 r/ |1 J
12. usart1_Rx()   ,usart1_Tx()  为加入了环形队列的发送接收接口函数; R% v; ?) k4 J% y. d* G% W* s) `2 p
  h. U' a5 g8 E* o( R; ^" L
13.中断中不能调用ucosii先关的函数,例如信号量的处理等,加了暴力测试串口时会出错,查了下貌似和内核管理中断有关,这个玩意CPU_CFG_KA_IPL_BOUNDARY。但也尝试了中断加OSIntEnter() 和OSIntExit(),修改中断号范围>CPU_CFG_KA_IPL_BOUNDARY, 也不行。
/ Q( a; M5 ~8 S3 Q) o$ ^! w  ?————————————————
, \$ V* z% _: p( l* |- {  N7 ~版权声明:鱼入大海_
5 }  M% L- g% c' E5 Q8 V1 y
8 m7 V5 f) ^2 c' ^; z5 U

; i- H) z, R' k$ u
赞 收藏 评论0 发布时间:2022-12-16 13:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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