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

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

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。; X3 y$ w9 c: U
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。* Z  c; ^. H, p3 x! }1 g

1 J, s3 W, n2 d7 o. F5 n
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。* z: e6 u$ I. J* R) o/ y* t7 ~
QQ截图20211009123622.png
/ o0 D! e$ k% K( o2 |7 q' ]首先我们试一下直接操作寄存器(这样是不行滴)。
; T" D& Q! n  U6 x, p% E非安全区 main函数里  _( q; Y, O+ ?$ S0 H7 H1 [
  1. /* USER CODE BEGIN WHILE */: Y( W( O# i- @( E/ c
  2.   while (1)7 Y) J3 t5 K4 V, E/ B6 G: v
  3.   {
    * b* d# R2 ]! W' W! R
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);% z# G" ^1 E- ]& l0 z* C
  5.     HAL_Delay(1000);& p% Z4 X! `' r! x
  6.     /* USER CODE END WHILE */; _4 C% F; y9 d! S3 @% ^4 O

  7. 2 z( s" E1 E5 O. i
  8.     /* USER CODE BEGIN 3 */& k. D, k) A& N
  9.   }
    * ?. R3 l1 M0 W, `
  10.   /* USER CODE END 3 */
复制代码

: o5 v( U/ `, v  |: U7 a& H编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。
6 t' b' K% n+ h
( _7 V1 U" @+ |& C$ K) ]. }正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。
/ s7 u! {; L+ y% m, Y. i
1 r8 E* I- O* @9 G4 q重新写一下代码
" f5 Q2 f' r( `. Z" h" H安全区) R5 u. l" P0 ~# V7 I1 n
  1. CMSE_NS_ENTRY void LED_toggle_S(void)
    ; }: _$ _( c  X/ O
  2. {
    # {) y; l: k& ]8 a& u
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);
    5 s' |' |$ e5 ^3 k6 q
  4. }
复制代码
$ F- ]/ T+ r: d; w, ~
这里的CMSE_NS_ENTRY 与 __attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);" e+ r# T( P) d$ t

+ [! b* H+ r( F0 q非安全区 main函数里' I8 H- ~. t7 e0 q0 z
  1. /* USER CODE BEGIN WHILE */- c# W4 x$ n! i, r/ E
  2.   while (1)
    ( ~, B; |& N' W$ v! C% `; F$ ^$ X
  3.   {
    ' q$ V% H, j3 S  y6 W
  4.       LED_toggle_S();  H* W$ b' S9 f. {1 m/ c
  5.       HAL_Delay(1000);, ?1 b2 O& A4 I: [
  6.     /* USER CODE END WHILE */
    * ]5 u% J( @6 y" a/ x7 a4 B
  7. + J0 B9 y) G& t* e5 Z- O' l
  8.     /* USER CODE BEGIN 3 */
    # ]- z- e0 K3 @$ F
  9.   }. o/ t/ f7 ]0 M1 `8 O
  10.   /* USER CODE END 3 */
复制代码

; ^" ?- r! s" X) Y; t1 e编译下载,绿灯开始正常闪烁。+ e$ ]1 r8 F3 f

1 m4 o4 r# S5 j: q, j( \注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。
$ \1 f" H0 c' x8 z
+ L8 c; e; E9 T1 s. \( B( b, D, {5 t
赞 收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请6 L) J5 N( ^$ |# j. N
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次7 X( G8 I3 N' L2 y' K
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点
4 O" r. ^6 g6 q+ [8 ^: D% A* @
joshua天宇 回答时间:2021-10-27 10:25:47
学习了: F9 n1 N- x" \( q; P5 l- d
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错$ o" t" f# s( b
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢
# y" ~9 N, n+ W6 X0 o
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。8 P2 |# G) v" s# [
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了
+ V) H: O# ]3 l, s. \2 Y$ c
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰& Z' G- E+ q3 P2 D7 h
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!

' k8 C5 Q% |5 a  B/ F+ Y1 k
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。
4 _6 c( G  ~  @  g8 w) ~' w. O
VegardCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦. R* {5 [6 U# O7 c" g3 c3 ]
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习$ U* D4 E& i! E( |( G+ X& r; F
+ n0 E& R3 a" A6 w9 }* U
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版