STM32L0系列
% j! U' o* T* }; ?# k1 \" E测试基于L053- W3 V; P0 c, {/ p
. k. d& X! }0 t" J! r- \
初始化$ ?" O! N' D) g2 n
- void MX_RTC_Init(void)
# G# W" S8 I' U0 u" i* \& _6 v - {
2 U3 S9 G' M7 c" C7 U% E - LL_RTC_InitTypeDef RTC_InitStruct = {0};
i# p/ r( M% m, \. i - 6 t) K& j: Q% }) U
- /* Peripheral clock enable */- Z+ D, R) b+ D( g$ s4 [7 Z
- LL_RCC_EnableRTC();" D: i; Q6 P& M8 ^ I5 |
- # z+ K2 z& ^4 y: p3 B/ e* g
- /* RTC interrupt Init *// U' P6 ?7 w; C
- NVIC_SetPriority(RTC_IRQn, 0); H3 B) Y8 Z9 O/ z+ ?3 V0 r! f& M
- NVIC_EnableIRQ(RTC_IRQn);
0 h+ c- H6 H9 D: _
" Q6 E" F1 p% n7 [2 ~! E- /** Initialize RTC and set the Time and Date
( O7 A1 y8 u* {. [ - */6 o% l0 Z& S1 Q9 ^5 D
- RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
: q, o6 A6 {" z5 a0 Z" ] - RTC_InitStruct.AsynchPrescaler = 127;
. Z5 V$ r4 G: T+ v. s - RTC_InitStruct.SynchPrescaler = 255;
5 X) T7 r$ n( x0 f1 Z - LL_RTC_Init(RTC, &RTC_InitStruct);' k% b. L6 }2 F
- /** Initialize RTC and set the Time and Date: x! E7 ?- e9 b' p3 Y" y; ?
- */
' f: @& ^, r5 N- y* K( j* y3 \7 ] - /** Enable the WakeUp- R4 x* m# N8 ?8 S1 J
- */2 z8 e, t1 J& x$ Q$ W6 Q
- LL_RTC_DisableWriteProtection(RTC);
1 N6 B2 d2 N1 M! y( \) a - LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);& u* d1 Y8 K" T0 t
- LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_20);1 Q2 m3 T- z0 U% s+ U5 J6 w
- LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_20);* v0 q' O( k# C: Q
- LL_RTC_WAKEUP_Enable(RTC);9 ^' ~0 \* J5 B R
- LL_RTC_EnableWriteProtection(RTC);$ B9 @, v+ Q+ R2 P! E0 s7 y
- }
复制代码
4 Z Z; n" o7 H' z; @& E! |中断回调8 E1 a3 k; X9 y% [& y
- void RTC_IRQHandler(void)6 i$ \2 f9 u: V. O: e' ~
- {: J$ h; o2 N, i
- /* USER CODE BEGIN RTC_IRQn 0 */
9 {8 R# I- g; ^- k; G0 w - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
* s: V# d/ T+ P9 y - /* USER CODE END RTC_IRQn 0 */
k1 Z' T9 [8 C - ; ?0 }$ V$ p; U5 u
- /* USER CODE BEGIN RTC_IRQn 1 */
; }) A$ a {' O8 E) f9 r - LL_RTC_ClearFlag_WUT(RTC);//清除秒中断事件- Y- q# t7 ?/ g4 g$ t# H9 t- I4 K
- LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);//清除中断线标志位
: ]3 p; Y. I6 t4 G- @9 a* ~" g - /* USER CODE END RTC_IRQn 1 */
$ L R) [) q5 N* C6 u" F1 k - }
复制代码
9 t* y# g8 c4 p7 F' Y话外篇
4 o; j$ O9 w1 y5 K8 s维护老项目的时候调试半天,就是不能触发RTC秒钟断,最终经过查找,发现是HAL的MSP Init被删掉了。。。" a" G7 H8 p# @ z
在stm32l0xx_hal_msp.c中添加如下代码,RTC功能实现:
0 D4 d6 F; R( w- ~2 Q2 b% i; @, O: C& l/ ~4 Z
- void HAL_MspInit(void)# j5 w: L5 A, d' @' Q
- {
! z9 ~+ ^2 G& d0 ~- @% e7 L- ^ - /* USER CODE BEGIN MspInit 0 */
# g% p6 h9 V6 u% Y2 Y0 A( P
9 j# _2 {7 i2 l% R& C5 T- /* USER CODE END MspInit 0 */+ R" ]8 d" n4 v
, g) x( K! T# i9 R6 N/ x) _- __HAL_RCC_SYSCFG_CLK_ENABLE();1 v0 l6 n6 m! U- [
- __HAL_RCC_PWR_CLK_ENABLE();$ Y) L0 z+ K6 i. ~, P0 ]7 m
4 J3 P0 V( c8 V& |; @# I- /* System interrupt init*// r5 T/ l! a9 }6 _
n% u8 L/ [- m9 H2 m4 _0 O- /* USER CODE BEGIN MspInit 1 */+ E$ o$ w, k5 o4 L5 p
- , K" ?& h2 e0 G: t X! a
- /* USER CODE END MspInit 1 */1 X8 y9 f2 P/ s! h
- }
复制代码
" i3 Y0 w1 U! ], Q" m. k: `————————————————0 B" L% }) e) ?9 I1 F t7 c; ~
版权声明:Logan Li/ ~- ]# v. o+ W. _: {
: k& e9 w* y; m6 s/ |' U: k6 \ |