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

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

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。* A% A9 n( Z4 J! `# a
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。9 W( y& d% j/ A+ u& i( \( q

% E& V0 M  G. T( L
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。
( S5 @2 s8 X" j: R- X3 l1 z( M. ~ QQ截图20211009123622.png
4 _9 |" @7 A  ~/ P/ j首先我们试一下直接操作寄存器(这样是不行滴)。
" y1 l9 r. e5 ~1 d3 U非安全区 main函数里
" n2 b5 x( _6 b* N0 b
  1. /* USER CODE BEGIN WHILE */
    - v% _1 ^1 Q* g5 M; b3 c- S+ g
  2.   while (1)
    2 n) p2 n# S( B* Y) D. q
  3.   {  t6 ~$ \% I% ^2 l0 Y, @8 u
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);; P; x( q* Q* |
  5.     HAL_Delay(1000);
    5 L7 |. T' L6 E6 q# b6 S
  6.     /* USER CODE END WHILE */, x$ j7 d3 q8 D. x
  7. + m1 r6 N# q2 [  e% K
  8.     /* USER CODE BEGIN 3 */
    ) O5 I4 K- p. Y. U
  9.   }
    0 d- @/ w% D8 [8 I  y
  10.   /* USER CODE END 3 */
复制代码

1 v: W! O7 l2 N5 u% B) c编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。: z: m: ]" T; \5 O4 j  {) M
$ P1 {+ L3 |8 H+ |3 O7 Z
正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。
7 B: U1 F, d4 w2 H  l; m5 K5 D
1 A5 c+ r5 j. c0 Z8 k重新写一下代码2 T  m1 V* }, i: o( M+ ^
安全区
  ^5 k6 b, s! g- D: _  R1 E
  1. CMSE_NS_ENTRY void LED_toggle_S(void)
    . X, M+ ~1 v5 X: c# K# M
  2. {
    9 q: B4 x( t9 f1 K5 u! ^
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);; G! a) }  y) Q) C, {: g+ J
  4. }
复制代码

; r8 R  E! S( r' _! q' g这里的CMSE_NS_ENTRY__attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);
$ f5 k1 y: s5 C; W# j& O2 u0 s' M3 K! b" J
非安全区 main函数里/ w. |9 o- _( M/ W. ?: z. k
  1. /* USER CODE BEGIN WHILE */
    8 F9 c  a7 d$ u8 y4 P" Z' N
  2.   while (1)4 t5 \( g! G( r7 h
  3.   {
    $ h" V0 x9 u* v- a* j. C! X
  4.       LED_toggle_S();# J  F: v! V& A# t: s
  5.       HAL_Delay(1000);$ ~. h2 B" U/ F
  6.     /* USER CODE END WHILE */
    7 V+ o) Z; \- m$ q( R/ h( u" h! j

  7. & I! E4 q8 B! I# t3 ^" ]$ e( d
  8.     /* USER CODE BEGIN 3 */
    7 h, p  ^# }3 z$ y% e
  9.   }
    1 h$ [/ |/ e" H# m. l
  10.   /* USER CODE END 3 */
复制代码
- k0 Z) x8 W8 t* b* o( Y, J3 i
编译下载,绿灯开始正常闪烁。
0 E, v9 Z1 o6 k) m9 G  a  l/ I1 }3 P. N& A; R9 [
注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。
5 U& j: }8 ?$ V7 S: a/ @0 R& d
. e0 j. O% c5 }% j0 c
收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请
0 e$ W- T* y- f0 K+ c6 m! @3 P& Q
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次
+ }1 `2 t4 [- _( J: h4 G6 ?
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点% Q4 x! P; `6 Q% ^
joshua天宇 回答时间:2021-10-27 10:25:47
学习了
* ?- r/ O/ A1 L7 o* m, N* u
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错
6 C- j9 A) ?: @: L
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢
+ r  J4 [- s! B) m7 ~
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。
( E+ K' k/ w% v# Q
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了
) b/ `7 Q+ r6 p% E; B. n, D
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰4 M5 t5 k8 `9 q( \/ o
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!

: C; W/ B/ i2 @7 B/ {  A1 w
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。$ `( c9 Y% [7 p0 c+ R  F% P, k
VegardCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦
+ y. y& g5 S0 \# }0 F( D) k6 e' i- f
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习
7 C& D" F4 C  O" ~: W% ]0 x$ o% C8 {

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版