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

STM32 RTC秒中断——基于LL库

[复制链接]
攻城狮Melo 发布时间:2022-11-3 22:04
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
  1. void MX_RTC_Init(void)
    # G# W" S8 I' U0 u" i* \& _6 v
  2. {
    2 U3 S9 G' M7 c" C7 U% E
  3.   LL_RTC_InitTypeDef RTC_InitStruct = {0};
      i# p/ r( M% m, \. i
  4. 6 t) K& j: Q% }) U
  5.   /* Peripheral clock enable */- Z+ D, R) b+ D( g$ s4 [7 Z
  6.   LL_RCC_EnableRTC();" D: i; Q6 P& M8 ^  I5 |
  7. # z+ K2 z& ^4 y: p3 B/ e* g
  8.   /* RTC interrupt Init *// U' P6 ?7 w; C
  9.   NVIC_SetPriority(RTC_IRQn, 0);  H3 B) Y8 Z9 O/ z+ ?3 V0 r! f& M
  10.   NVIC_EnableIRQ(RTC_IRQn);
    0 h+ c- H6 H9 D: _

  11. " Q6 E" F1 p% n7 [2 ~! E
  12.   /** Initialize RTC and set the Time and Date
    ( O7 A1 y8 u* {. [
  13.   */6 o% l0 Z& S1 Q9 ^5 D
  14.   RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
    : q, o6 A6 {" z5 a0 Z" ]
  15.   RTC_InitStruct.AsynchPrescaler = 127;
    . Z5 V$ r4 G: T+ v. s
  16.   RTC_InitStruct.SynchPrescaler = 255;
    5 X) T7 r$ n( x0 f1 Z
  17.   LL_RTC_Init(RTC, &RTC_InitStruct);' k% b. L6 }2 F
  18.   /** Initialize RTC and set the Time and Date: x! E7 ?- e9 b' p3 Y" y; ?
  19.   */
    ' f: @& ^, r5 N- y* K( j* y3 \7 ]
  20.   /** Enable the WakeUp- R4 x* m# N8 ?8 S1 J
  21.   */2 z8 e, t1 J& x$ Q$ W6 Q
  22.   LL_RTC_DisableWriteProtection(RTC);
    1 N6 B2 d2 N1 M! y( \) a
  23.   LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);& u* d1 Y8 K" T0 t
  24.   LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_20);1 Q2 m3 T- z0 U% s+ U5 J6 w
  25.   LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_20);* v0 q' O( k# C: Q
  26.   LL_RTC_WAKEUP_Enable(RTC);9 ^' ~0 \* J5 B  R
  27.   LL_RTC_EnableWriteProtection(RTC);$ B9 @, v+ Q+ R2 P! E0 s7 y
  28. }
复制代码

4 Z  Z; n" o7 H' z; @& E! |中断回调8 E1 a3 k; X9 y% [& y
  1. void RTC_IRQHandler(void)6 i$ \2 f9 u: V. O: e' ~
  2. {: J$ h; o2 N, i
  3.   /* USER CODE BEGIN RTC_IRQn 0 */
    9 {8 R# I- g; ^- k; G0 w
  4.   HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    * s: V# d/ T+ P9 y
  5.   /* USER CODE END RTC_IRQn 0 */
      k1 Z' T9 [8 C
  6. ; ?0 }$ V$ p; U5 u
  7.   /* USER CODE BEGIN RTC_IRQn 1 */
    ; }) A$ a  {' O8 E) f9 r
  8.   LL_RTC_ClearFlag_WUT(RTC);//清除秒中断事件- Y- q# t7 ?/ g4 g$ t# H9 t- I4 K
  9.   LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);//清除中断线标志位
    : ]3 p; Y. I6 t4 G- @9 a* ~" g
  10.   /* USER CODE END RTC_IRQn 1 */
    $ L  R) [) q5 N* C6 u" F1 k
  11. }
复制代码

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
  1. void HAL_MspInit(void)# j5 w: L5 A, d' @' Q
  2. {
    ! z9 ~+ ^2 G& d0 ~- @% e7 L- ^
  3.   /* USER CODE BEGIN MspInit 0 */
    # g% p6 h9 V6 u% Y2 Y0 A( P

  4. 9 j# _2 {7 i2 l% R& C5 T
  5.   /* USER CODE END MspInit 0 */+ R" ]8 d" n4 v

  6. , g) x( K! T# i9 R6 N/ x) _
  7.   __HAL_RCC_SYSCFG_CLK_ENABLE();1 v0 l6 n6 m! U- [
  8.   __HAL_RCC_PWR_CLK_ENABLE();$ Y) L0 z+ K6 i. ~, P0 ]7 m

  9. 4 J3 P0 V( c8 V& |; @# I
  10.   /* System interrupt init*// r5 T/ l! a9 }6 _

  11.   n% u8 L/ [- m9 H2 m4 _0 O
  12.   /* USER CODE BEGIN MspInit 1 */+ E$ o$ w, k5 o4 L5 p
  13. , K" ?& h2 e0 G: t  X! a
  14.   /* USER CODE END MspInit 1 */1 X8 y9 f2 P/ s! h
  15. }
复制代码

" 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 \
赞 收藏 评论0 发布时间:2022-11-3 22:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版