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

B-U585I-IOT02A--5.TrustZone非安全区操作安全区资源点灯

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。
) }1 I2 S* T1 l# h# c; f
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。
3 E; n' l4 |0 k0 j2 C! j
, @# C" A2 s& O2 ]4 k8 G
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。& Y- r$ X9 D$ v
QQ截图20211009123622.png ( _! I1 m5 ~. n) j
首先我们试一下直接操作寄存器(这样是不行滴)。) I" y' f' U' W& i) o) q; U
非安全区 main函数里
, g  ]2 x' L! @5 f
  1. /* USER CODE BEGIN WHILE */
    ! r+ f# P4 q% H8 G
  2.   while (1)
    & ]. j- g- z( m5 a' c" C
  3.   {
    7 ~8 r7 S! \2 a% |
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);! U' M) Q- h8 _( R1 m+ e$ U
  5.     HAL_Delay(1000);! G$ R6 f# G  a: i9 V; z
  6.     /* USER CODE END WHILE */: o% ]0 B8 \* E/ s/ k+ _$ x+ d

  7. 4 J" W0 O' Q- X, x
  8.     /* USER CODE BEGIN 3 */5 G% S, v+ y- j+ {
  9.   }. y* E$ w4 q3 e. U. x
  10.   /* USER CODE END 3 */
复制代码

# h4 D1 T# m: v2 G9 j$ C编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。5 T; g2 v) S( @6 M6 f

1 V6 C& p, F4 K+ S- J  e+ U8 i% V正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。- D  [% G1 o( [. H8 q+ [! {

# i( s* v5 |/ M重新写一下代码
: s  v3 R" y& |  T安全区- b! w# _! }  _/ ?% E4 }
  1. CMSE_NS_ENTRY void LED_toggle_S(void)2 b; m4 Q# k  }% }- E
  2. {  _3 Q6 `) Q% N; M- q& E
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);
    1 N, _! T1 W3 G9 b' D/ s9 X9 q
  4. }
复制代码

  [. C% W. ?! H* }这里的CMSE_NS_ENTRY__attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);
9 d# b- Q: N( F! {( C' v/ H
' g  ]% `2 e- V7 I8 O# H1 ~非安全区 main函数里/ S' a5 v/ L9 H$ p# A: ~, {' k
  1. /* USER CODE BEGIN WHILE */; ?8 l8 M- d+ z9 ~5 R9 M+ c
  2.   while (1)' X6 f6 o0 p% M+ Z) p6 A% w2 K9 m0 ~
  3.   {. w! K1 D% I7 R$ j5 N. W8 p
  4.       LED_toggle_S();7 D  b, G% A1 l, I6 L4 Z% H" `
  5.       HAL_Delay(1000);
    : ^6 @0 l1 ?& e! C7 h
  6.     /* USER CODE END WHILE */
    6 a& H( S0 F0 n5 _# w! f

  7. 3 ~" U3 h' `0 o
  8.     /* USER CODE BEGIN 3 */9 n* J  }. C: d
  9.   }- d" r) U) D# ~
  10.   /* USER CODE END 3 */
复制代码
8 f2 P9 [, V' K/ B2 x
编译下载,绿灯开始正常闪烁。
6 F! Z. _* X/ ~  |7 Q$ T; }0 C8 Q+ Y$ G- S- W
注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。
4 Y: y% k6 A6 x
8 ?. R: F' E, w. g# H' {
收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请% t2 g" _" Z4 F/ g1 I
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次# h; S2 S1 |, o6 ], F: O3 D7 U
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点3 k& i- A% B# ^$ ]4 z
joshua天宇 回答时间:2021-10-27 10:25:47
学习了) [( P; R) T" i7 I. {3 J! W2 K; u+ n
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错
( S6 B: s3 X9 |8 q) d
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢" O. z' ?3 [5 ~3 B* L, U
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。
2 Q9 t  K6 f9 J6 }
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了# i/ ]) c# {$ [" u. v6 @
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰
  ^! W; E4 Q! k  K0 r0 @
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!

! I3 L# t% W0 M5 h
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。
) v+ Y5 O/ t) `7 G9 o- _0 Y
EricCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦+ k( ^! q: {0 o/ \( h) z5 T
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习; S- c5 I. Y' X* D
! Q( S$ O8 W& P

所属标签

相似分享

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