1.遇到的问题
) w: y$ y; L# J3 b: O, l! Q* v5 o: y- m( P
我使用的是STM32H747,在初始化后发现断电后并没有进入中断。最后查找到因为STM32H747是双核CPU,在HAL库源码中,有双核的宏定义将一些配置给屏蔽了,因为我只用到了单核,就把源码中的宏取消掉了,然后就可以正常进入中断了。使用不是双核的就不需要更改了。# ] w& j9 `" n7 o6 U* n% P) Q9 {; ]6 Q
$ D, w9 N) t+ ?" e7 Q# x2.下面是PVD的程序" j5 j) o& @, x) H& y$ ?
% j2 I$ _* H; E e8 ] K4 ]. q( _
- void PVD_Init(void)
% g# a6 F& f/ K1 z0 V6 K - {6 @6 Z: i+ e: q- _6 ^
- PWR_PVDTypeDef sConfigPVD = {0};
0 g! I8 o6 Z# S. A* V; u; m( i/ x - $ C# R1 }( L( F( }# {
- sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
. |5 a; u$ \6 v j4 E6 P - sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING;
2 T4 r. S4 _7 ^5 F1 T/ [ - HAL_PWR_ConfigPVD(&sConfigPVD);
! [2 T6 p. l- K- ?7 _7 L8 _) ^' ?% b7 L
- Y1 Y( y* |/ Q0 I- HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* 配置PVD中断优先级 */6 W8 ]2 B. m( {0 V& J6 I
- HAL_NVIC_EnableIRQ(PVD_IRQn); /* 使能PVD中断 */
3 U, D. z- X6 T; o3 V) J - 9 Q0 @. e8 u7 {: A" Z
- HAL_PWR_EnablePVD();
. d6 q/ _0 K3 u' e - }
2 H, n9 @. X# A, y8 O* Y - * r) F, p/ d1 E. e5 V e' M$ p
3 A1 p7 ~2 s! F2 T* A- /* PVD中断处理 */
G$ Q$ K0 w# w. Z* K' G2 s - void PVD_AVD_IRQHandler(void)! Y! l7 p; ^$ l6 h7 @& Q3 |. P
- {9 ~: q, x: L) j( C
- HAL_PWR_PVD_IRQHandler();" D$ R- U8 ^+ ]8 @! V
- }2 d' b0 T7 N* W7 _5 O* ~ u
- 6 M1 p1 x- C6 ~% d1 v6 z6 R
- void HAL_PWR_PVDCallback(void) j3 R3 X' F6 t% W& N6 K# o; Y
- {
) v! g, \& `" b+ ]3 d! y - //增加自己需要在断电时候的处理
' A; j: `* R( m; w - % }, @) f) M! Z" [2 n6 a0 m5 Q7 ~
- }
. }# ~5 R! m8 N; {& _1 Y
复制代码 2 G& x L# J0 p7 S0 Y/ n
) ~6 ~& w( C% W1 v; J |