1.遇到的问题
) B$ T1 o7 i8 B) ?, P* q6 |# _* H2 Z4 d9 z) y
我使用的是STM32H747,在初始化后发现断电后并没有进入中断。最后查找到因为STM32H747是双核CPU,在HAL库源码中,有双核的宏定义将一些配置给屏蔽了,因为我只用到了单核,就把源码中的宏取消掉了,然后就可以正常进入中断了。使用不是双核的就不需要更改了。
7 o' J" n3 @ _6 g& t: E# z: ]* E5 `2 {$ x# e/ w/ c* S: @
2.下面是PVD的程序
7 A5 }9 {6 m# e9 j2 c( W0 Q2 a8 a% _1 D
- void PVD_Init(void)
+ h' \2 P# e! U% [4 X% a2 M5 L - {
/ ]- F! V3 ?8 p4 C; W8 {' d' a5 H - PWR_PVDTypeDef sConfigPVD = {0};) x% p; Q1 l3 G4 q: j
0 `0 C) O, {) `$ ^- sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
0 a1 c1 M3 I3 y+ f2 Y' b8 o - sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING;
$ i$ H/ W, M! ~& h \5 m8 ?; f - HAL_PWR_ConfigPVD(&sConfigPVD);
$ o% W9 [+ o: ^' H# w# `* W; `6 i - 1 i4 j2 y. j- N/ f- c' k# a
- HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* 配置PVD中断优先级 */, S- p% Z0 X) O5 s' l
- HAL_NVIC_EnableIRQ(PVD_IRQn); /* 使能PVD中断 */
8 a9 o* W& I) y/ L5 P$ [5 r! R - ( }$ w8 Z4 r: S$ n: a% k' I# o
- HAL_PWR_EnablePVD();" T8 ^ L" ?& ^* i. b2 f4 @
- }' o" o L% @+ b- F8 B
- 9 ~" j: u. L$ b0 \4 e% ]- ^' g
9 ^, O* Y3 `2 i1 i+ v8 d- /* PVD中断处理 */
4 [& X, H. k( g2 d - void PVD_AVD_IRQHandler(void). k. [6 R$ Q0 U# M: D
- {
# I+ k, q; U& J* ^ - HAL_PWR_PVD_IRQHandler();
) t9 u$ Y3 G4 V0 D6 X4 U4 ~* W# M - }
. a( v3 d4 {' J! ^2 U6 ^" z$ K9 | - 3 j3 L6 Q$ [2 w2 F
- void HAL_PWR_PVDCallback(void)" R/ w6 Y* j" P% r ~
- {
# e; Q! q/ J+ l6 n0 k$ i - //增加自己需要在断电时候的处理5 P: Z$ d# h: R
- * i8 n/ a, p& o- {- w5 j
- }4 f+ r0 I; m' h% a7 H9 T# B( F
复制代码 - o% [8 w$ ~- @- a: e8 m
8 g% f& P# A( ]& W# H4 i* m: d
|