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

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

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。
3 B) h# m6 o: M4 x4 b" Y4 K
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。# p* z: F1 A: H: \' n( i+ i

+ U! X$ z6 K5 R! z& T+ d
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。5 F" [0 J& P, g1 w
QQ截图20211009123622.png . X, E/ |% L: F% n; R6 M5 q
首先我们试一下直接操作寄存器(这样是不行滴)。6 J- \; G5 c* C8 g3 W5 y8 N
非安全区 main函数里
1 z9 c- ], J) b3 a
  1. /* USER CODE BEGIN WHILE */# R# v) j+ x1 S5 P6 t8 o( c
  2.   while (1)
    & [& N# B  K& B: q& M! K
  3.   {
      T, Z, s! \  w1 Q) L( p
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);/ c3 ~, ~" j# E& G3 a$ X
  5.     HAL_Delay(1000);; j, K. B6 Z0 r3 k) _
  6.     /* USER CODE END WHILE */
    5 V( Q* r% G6 {. v# A- C5 G/ c
  7. ; J$ s% d5 U0 z3 `, S) m9 w
  8.     /* USER CODE BEGIN 3 */
    : t1 _# d+ N" M1 {! O
  9.   }
    4 R3 {& y4 f3 w& |" E+ x
  10.   /* USER CODE END 3 */
复制代码

0 j. e% b6 A: Z! C* y编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。
( C% P1 y' i5 f7 G1 Z
- ]! s3 O2 }, |6 ?- ?7 L正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。
. }5 z; E6 \* h6 k* {( n* L" x; z2 @" C
重新写一下代码, Q, ]" A  f6 f: d+ B
安全区
& [/ W4 x! I8 B7 l
  1. CMSE_NS_ENTRY void LED_toggle_S(void)4 I) n$ Z" m- g$ i& v
  2. {
    7 _: [" T% ~  D+ F
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);, X0 u1 ^& |' `; [2 t' J
  4. }
复制代码
' F1 o/ [7 r8 {
这里的CMSE_NS_ENTRY__attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);- w" A+ d; P1 y$ g) E4 \

) j9 t! T2 r" W非安全区 main函数里9 }7 q8 F, }8 X; r6 @
  1. /* USER CODE BEGIN WHILE */
    + T% v' J8 K# f4 D. }
  2.   while (1)) N$ J- ~3 i6 k
  3.   {
    7 F7 g; K' z. ?1 O8 i! L1 z+ o
  4.       LED_toggle_S();: t. G" U7 z6 V
  5.       HAL_Delay(1000);
    - o  F3 ]5 E+ ~* P5 E  G3 g1 [
  6.     /* USER CODE END WHILE */
    3 o6 P- _8 F. r0 V) J8 r

  7. % ^/ ]+ i5 s# b! ^) j
  8.     /* USER CODE BEGIN 3 */6 c* Z& O  s1 i1 s( l2 ]
  9.   }' r5 T" ?7 s2 q6 C" i
  10.   /* USER CODE END 3 */
复制代码
: }) \: g6 O3 X- G5 }' I
编译下载,绿灯开始正常闪烁。# x/ u- p) e6 M# z
5 [4 j/ X4 G; Y# z5 R  F
注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。
5 l3 s2 K9 Z& N# ?
. p5 U* F5 M/ `% M% X: {
收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请6 D- @+ M0 P0 z6 N
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次4 ^- |2 r: L& u5 O8 m5 l% E3 v" q& V0 W
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点8 W% }2 ^0 d6 _" v/ r" e1 X
joshua天宇 回答时间:2021-10-27 10:25:47
学习了
) U0 P& v+ @  V$ x: g! u
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错+ u) l) E. W, w5 U1 ^0 u
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢/ l: r: U+ T2 ^
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。" @: ~/ k* N4 {& Y
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了
4 |# s) U  x" ^4 g# W( _
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰% S1 }9 x: u0 ?/ e- J4 F/ v! S
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!
; F2 e! J2 j) J
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。. L7 r6 ]! k" }6 K4 X; ~
EricCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦4 }, q) G4 y: g& J
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习% J  _; b0 ?6 [  ]. k3 y; T
& b' c; Y# h* l

所属标签

相似分享

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