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

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

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。; J% A7 |2 ?: [* f  h: @
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。
  n5 Q7 l5 h1 |3 s2 x4 v% e# F& i/ @5 o5 A  ?
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。% A) K* V9 i, I# {: P3 L
QQ截图20211009123622.png
/ S' |9 H: J1 F8 S  w( s首先我们试一下直接操作寄存器(这样是不行滴)。
/ n  c- z9 Z7 J非安全区 main函数里5 j: Z3 F4 a& Q  V. ?; {3 `( |8 s, Q' k
  1. /* USER CODE BEGIN WHILE */1 x: C, r" B6 t8 W
  2.   while (1)5 L( K6 v) ~; l& b6 {# ]
  3.   {( |% P8 L, I+ v$ [
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);
    ) L- g2 F5 B' `* M# R8 m1 ~
  5.     HAL_Delay(1000);6 O( M7 Z" `7 u
  6.     /* USER CODE END WHILE */  M3 @7 d% I$ c3 B4 B
  7. 9 Q1 d# f9 K* C0 f: O8 z; v
  8.     /* USER CODE BEGIN 3 */
    5 X6 P9 y9 C+ D. P7 e6 z: o/ g' Q$ K, C
  9.   }# p; x( a2 n9 }/ Q% X0 i9 v
  10.   /* USER CODE END 3 */
复制代码
9 L- l  }7 _& F3 {& q
编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。
- Q: Y2 ^4 _* O" w& U* c
4 e! t% [" p# j* g% J8 v: F正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。# w% N! v# x  O
6 U# A, u8 ]5 }% f. X: ?' n- j* ]+ t
重新写一下代码$ ~/ {5 r( d- G) r/ j3 w/ M  L
安全区( i- N; p7 }3 l) n! Q1 d( n
  1. CMSE_NS_ENTRY void LED_toggle_S(void)* p: k3 l: z/ [/ h) O
  2. {0 `1 G" Q+ H! ?! `: d3 }
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);. Q% O! T2 n" A- F# n4 W2 h" P; G. k
  4. }
复制代码
2 J, K2 _- F, j/ ?  g1 ~" c
这里的CMSE_NS_ENTRY__attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);
# \- O* G8 A; I; o7 P. u+ j, ^& w' }0 \- a. {) P' y
非安全区 main函数里
* x  v0 v/ O6 h& v; |; O- Z
  1. /* USER CODE BEGIN WHILE */) i+ w1 k8 ?; C" n5 T" W
  2.   while (1)6 P4 e5 g3 y6 ^& K
  3.   {. f7 [& L1 X, [4 ]
  4.       LED_toggle_S();2 l$ S; B3 l3 \4 u9 R5 `8 B: [! j
  5.       HAL_Delay(1000);5 t2 e8 T5 G& `5 j3 W
  6.     /* USER CODE END WHILE */# N: O# p6 }( X7 e9 S( k
  7. 5 n* ^2 n, l  t* q
  8.     /* USER CODE BEGIN 3 */6 x9 R" Q8 j& L9 v
  9.   }& F! e9 I" Y  i6 I$ F8 Q% z
  10.   /* USER CODE END 3 */
复制代码

+ j# p+ ~: g' l编译下载,绿灯开始正常闪烁。
- [  O  }4 S* }& V) p* g7 b& B' x1 Y$ F* z
注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。
& X# B/ U1 T' [3 @  ~6 M( S6 {$ X& R) N3 Y( n* s7 o
收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请5 E7 ]  N7 x3 I1 r! E) d& X0 i
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次6 j( c: v- H; v3 m
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点
" ~$ a5 \4 i! q) k
joshua天宇 回答时间:2021-10-27 10:25:47
学习了
0 L# N% ?- h) ?+ y
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错
7 Y3 `; `) L7 ]4 d) p, b4 F+ j
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢4 |: ~7 G7 F0 i0 ]( s- q) P
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。
; j6 H4 S& J4 Z& ?
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了$ k! M1 G6 Q. I; o
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰
$ k, m' r. N- W7 W# F; P# y
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!

2 |4 f, U' |9 C- U1 k2 T& C. `4 l
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。
% i( X* q5 s, e* [5 _5 d
EricCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦. _$ _) V1 q8 i  i# X; ?
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习
9 N) [1 G' ]! }7 a- D+ _, B2 x2 \  {) j* b

所属标签

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