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

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

[复制链接]
奇迹 发布时间:2021-10-17 17:34
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。
. c& L  J4 |# l& y( B4 S# \$ G8 P( y
非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。9 Z$ Q0 S- B4 T5 [/ H
  v$ e4 K* f4 ^0 C* F& _/ y( t
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。9 p8 Q# l! h& |" v" R% H( B7 i
QQ截图20211009123622.png
$ d7 }( F( `5 c! G9 Z' z2 {) G首先我们试一下直接操作寄存器(这样是不行滴)。8 D0 R0 q6 v0 Z7 t( _
非安全区 main函数里, c/ u; L7 f2 m6 v$ u. g
  1. /* USER CODE BEGIN WHILE */
    6 H# f! N) d- u' @3 P4 a
  2.   while (1)
    $ D$ x/ H$ P! h1 D3 T7 t- _
  3.   {
    6 ]1 l; D1 b0 u% x& s6 D2 U
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);4 @0 m5 t' }+ U9 Z' d3 M* ?' n
  5.     HAL_Delay(1000);
    " `+ x" e0 |/ m. b, `, e
  6.     /* USER CODE END WHILE */
    2 n& o+ j! `  {3 B) T

  7. 0 ?+ @: F6 R+ R, N
  8.     /* USER CODE BEGIN 3 */
    3 c4 j& ~( X  K1 P$ m( \0 z
  9.   }$ w9 `2 s& D* x% v- X+ ?* h
  10.   /* USER CODE END 3 */
复制代码
6 U1 H1 V; B( H4 \, T4 [
编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。
+ H0 }- W( [# A6 T
+ Q- R( p! i' l" q- d5 p正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。# f% ^7 \6 N: r
  }5 r- @1 Q3 d3 D( Y
重新写一下代码; I& x. Q6 }6 m" ?5 {* J; E
安全区+ W1 e  [  w/ e2 X
  1. CMSE_NS_ENTRY void LED_toggle_S(void)9 h! D! e2 u" N6 Q0 \( k
  2. {5 U) ?' ]* u5 Y! \" Y
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_7);
    3 G4 W% x) j7 j8 q
  4. }
复制代码

+ g0 V# Y) @5 k0 e这里的CMSE_NS_ENTRY__attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);% X7 Z$ B$ X. N3 Z: N* V
1 V+ S0 c1 L/ h, S/ ], I
非安全区 main函数里  W4 m: R. ?- X! \( s, l, d( d9 X% K
  1. /* USER CODE BEGIN WHILE */$ a5 o6 e6 J" F$ _6 D- E6 _
  2.   while (1)
    9 W1 U6 @" _. s  ~7 {
  3.   {: W+ _% W5 U% ~2 q+ U5 z$ _' n0 L
  4.       LED_toggle_S();3 q0 ~3 e+ Z4 x$ O
  5.       HAL_Delay(1000);
    0 u( d+ `# d2 E  w
  6.     /* USER CODE END WHILE */# b' P2 u- W5 D; F5 a

  7. ( P% C/ c4 X* b5 y5 P3 i
  8.     /* USER CODE BEGIN 3 */
    3 |, c; t$ R. {  K6 b0 {: E
  9.   }
    # o/ h, e# Z+ i  v1 B9 d: D* Y
  10.   /* USER CODE END 3 */
复制代码

8 l$ I7 P/ U. {9 M) V* |/ K" w编译下载,绿灯开始正常闪烁。: w& ^+ {5 u2 q, K. C

9 e: z' {. s4 u, o4 z注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。& y; r; o% D+ B/ f9 o

  K0 a+ l! J" b# m- C# i! v. u
收藏 评论13 发布时间:2021-10-17 17:34

举报

13个回答
子曰好人2号 回答时间:2021-10-27 10:14:49
不错的指导例程,没关注U5的测评消息,错过了试用申请& c3 w  p0 c$ P; }$ V5 g
昱枫 回答时间:2021-10-27 10:15:26
意味着,写代码都要在线又安全区的方式调用一次
" l1 {! y4 h& h
昱枫 回答时间:2021-10-27 10:19:27
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点7 c7 u. d# K: b/ a! K
joshua天宇 回答时间:2021-10-27 10:25:47
学习了
0 b; L5 m' k" c6 D
wudianjun2001 回答时间:2021-10-27 10:25:54
有安全区的概念了,很不错' ]6 x; `/ B7 r: |
zhangt0713 回答时间:2021-10-27 10:37:46
学习了  谢谢3 ?7 {6 P/ X+ k. Z3 E! H
ghost110 回答时间:2021-10-27 10:57:10
学习了,很详细。感谢大神分享。2 w" \8 o" o+ _! h$ }
QIANYING79 回答时间:2021-10-27 14:31:10
很详细的帖子,学习了/ `' v& C' P* Z- Q7 E" w
moluxiyan 回答时间:2021-10-27 16:22:45
说的很清晰
* i! g! h; T3 h: k4 n$ Z
orima 回答时间:2021-10-27 21:57:49
学习了,很详细。感谢!

" B+ z) K) I/ \# N/ r
qiangtech 回答时间:2021-10-28 09:52:17
解释得很清楚调用的关系。
: V# f& C4 g, d
EricCheng 回答时间:2021-10-28 22:33:30
总感觉操作起来比较麻烦9 D( _5 q# v+ n9 N( O
BEEE 回答时间:2021-10-28 23:40:03
想赶快使用ST新推出这款STM32U5系列产品,学习学习" z9 G- F& i) k/ ?& Y+ j% X( O! _4 S/ s

* P% D$ U) N8 O8 y2 ~4 q% n/ b

所属标签

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