1.遇到的问题
7 R% _8 t; x6 [! U. I$ n' R9 c' p8 U
我使用的是STM32H747,在初始化后发现断电后并没有进入中断。最后查找到因为STM32H747是双核CPU,在HAL库源码中,有双核的宏定义将一些配置给屏蔽了,因为我只用到了单核,就把源码中的宏取消掉了,然后就可以正常进入中断了。使用不是双核的就不需要更改了。
$ l; F# K+ ]6 t9 E; V$ F/ }* B) M' t8 L
2.下面是PVD的程序
& d* x# d3 x' o+ Z5 u" V- {) V. W. S2 k
- void PVD_Init(void)
0 P/ O: |2 [0 o5 c1 y - {6 X5 ~0 {/ I; L/ k
- PWR_PVDTypeDef sConfigPVD = {0};6 ^$ _3 m4 l( t( g0 A/ [) [ f# N
- 7 M6 z5 V: |$ M! ?
- sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
5 f, \- {5 y& A - sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING;
6 D" k& q: `8 w. e2 w - HAL_PWR_ConfigPVD(&sConfigPVD);3 ]& o) I" @9 [2 R4 {! ]
- ) i% X# X# B6 E3 H" H: X# t
- HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* 配置PVD中断优先级 */5 x+ }# P9 e! N
- HAL_NVIC_EnableIRQ(PVD_IRQn); /* 使能PVD中断 */9 Q7 C% }* D6 y2 U' M
! R0 S8 B* k6 N. F4 n- HAL_PWR_EnablePVD(); r# l# {; z! }( W% M
- }3 s! A: x: u- h! x* x, r; [# W O
- ; Q- F1 d. z( H! Z7 y* T# l
- 0 U ?3 m) F% y' [; T
- /* PVD中断处理 */
1 ^7 K. K* {6 h) X - void PVD_AVD_IRQHandler(void)
. U) D9 v5 O) U: h6 I - {0 V- b) `% R, I" M8 @
- HAL_PWR_PVD_IRQHandler();
) K A$ h$ N8 P! `8 }7 e, Z, ~* ? - }0 s7 w" B' ?8 v
: d; p/ @6 ^$ U0 D! B0 E- void HAL_PWR_PVDCallback(void)
8 S3 T3 \ S* @ - {# b" J. R. j2 Q5 Y* h) ]; Q! c9 a" h
- //增加自己需要在断电时候的处理
; \3 {. ~7 o7 C0 m% Q/ N - 5 {8 t) D/ w% w- E
- }6 F; u/ |- `2 I$ ?1 R
复制代码 2 m$ C5 e+ F: D2 v9 A
8 }' l, a# X# g j0 b) T |