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

【我的STM32U5 项目秀】+02-STM32U5利用LL库点灯

[复制链接]
shenxiaolin_mai 发布时间:2023-2-2 23:27
        说实话,我不喜欢hall库,也许很多人用起来很顺手,但是我用起来不习惯,而且LL库效率明显高得多,也许是没有接触过上层代码的原因吧,那么我就来说一下LL库的环境搭建以及点灯。7 `2 Q% G* w9 F- P% `/ p
        我们首先根据官方的LL库以及例程做更改,新建文件夹,拷贝文件,具体如下图。' V7 p+ l* e7 g4 P1 Z. j0 P
01-文件夹.png

* @: P* p6 K! ?4 s& W
        并将文件拷贝到个个文件夹内,方便将文件归类以及后期文件管理,具体的可以看附件里,附件内的源码。具体的可以查看keil工程下的文件,如下图
9 |; U& b1 c7 _, V( y
02-文件.png
9 E. S- [( H) K* q0 X( c
文件拷贝完成之后,然后添加文件路径和初始化定义,然后增加如下代码到Main.c文件。

: y+ n" K% ]$ q5 D: Z: f9 V7 ?

  1. 7 l( }4 M2 s  k4 n
  2. #include "stm32u5xx_ll_icache.h"
    8 Q5 d7 x$ d: e3 p7 D% }
  3. #include "stm32u5xx_ll_pwr.h"  A' y4 s0 ]8 ^+ q" m0 y7 q8 R
  4. #include "stm32u5xx_ll_crs.h"1 p& l$ r6 P$ }( x2 D' S' j' A
  5. #include "stm32u5xx_ll_rcc.h"7 |6 X" g! {; U- W) \$ r4 ]5 |$ S
  6. #include "stm32u5xx_ll_bus.h"
    4 N$ O; R# u0 k- Q& @9 L
  7. #include "stm32u5xx_ll_system.h"
    + [  M6 L5 A- |: I2 V# ~% Y' L
  8. #include "stm32u5xx_ll_exti.h", e0 n; ~4 v) o. O
  9. #include "stm32u5xx_ll_cortex.h"! B% U1 |1 D3 {  Z' \1 l1 S% s
  10. #include "stm32u5xx_ll_utils.h": i6 E. v. b7 {) d+ c5 t' `
  11. #include "stm32u5xx_ll_dma.h"
    2 k9 E& S+ ?% R! L" o7 w% H% t
  12. #include "stm32u5xx_ll_gpio.h": ^2 K5 `! {0 t" D" Q7 \
  13. #include "stm32u5xx_ll_lpgpio.h"8 K4 t3 `6 o5 R: G1 g

  14. ! ?% t: a4 a* ~6 h) F8 ~

  15.   {; V9 t0 Q/ V( o

  16. 8 e$ j3 G4 Z) F; j3 a9 D: H

  17. + B" r& q$ h0 T& x( l' ?: U
  18. #define LED1_Pin LL_GPIO_PIN_74 ]& y, e2 n' x1 ?
  19. #define LED1_GPIO_Port GPIOC$ F" d. f5 H. y2 n* E
  20. ( q6 u8 z" ~6 o& |3 E( O
  21. 9 L! H2 A- |! c$ b. m* l

  22. ; C- e( F' }: S4 [4 ^0 j
  23. /**
    + R4 X' L5 P1 Q5 }' N: o# @4 Z
  24.   * @brief Power Configuration3 I+ Y6 R8 G: O; [, k9 B0 X
  25.   * @retval None# J( |+ j& h7 A& V: z4 g
  26.   */
    1 c% R% x4 B' ~) }( R& U
  27. static void SystemPower_Config(void)# s$ ?4 F$ u! d& Q1 }: T5 A$ k8 B
  28. {/ m6 d: f7 T' _  p9 N5 u

  29. ( ?5 t0 V/ a3 M: h
  30.   /*
    6 R8 b; Y9 j# b! d: k" g$ [
  31.    * Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral$ x- |8 c( Q$ V! ?' W, \/ h
  32.    */& s  m3 V/ h# a% G
  33.   LL_PWR_DisableUCPDDeadBattery();
    1 r; g/ L' w: f- k
  34. ; z# A) w; _) O* a; V, L7 W9 A
  35.   /*- }; q5 U; t& h4 l1 j' w% A
  36.    * Switch to SMPS regulator instead of LDO
    ; n7 u) F( M5 I; s& c8 j3 a
  37.    */
    " w2 C& B9 F( @" j
  38.   LL_PWR_SetRegulatorSupply(LL_PWR_SMPS_SUPPLY);0 C# O' \6 ~& {: R, m

  39.   H4 L; {6 I7 c) y- ?
  40.   while(LL_PWR_IsActiveFlag_REGULATOR()!=1)" k+ y0 E0 l+ ~! D, J
  41.   {
    1 G. _& \; `$ X, }% b1 T  T2 p
  42.   }1 \9 E) v- P5 m9 e2 c2 g
  43. }8 @- x3 a" b/ D4 s
  44. 9 K9 F# R8 }2 h9 S
  45. /**3 m# q: {1 y( f/ r$ S! O3 w
  46.   * @brief ICACHE Initialization Function
    1 Q9 C# _3 ~3 s# n6 {7 S7 t6 p  {; r# ?$ m
  47.   * @param None
    3 ~( z2 L0 Y% [% e- g$ f, k7 T
  48.   * @retval None
    9 M- }# }- U( F% a, c, y2 P
  49.   */1 P* [4 P8 w% ]
  50. static void MX_ICACHE_Init(void)
    + q1 j+ S# V  a% e$ \8 w. R
  51. {  v& i4 H0 o& g" C

  52. * q: Y2 D. u$ `
  53.   /** Enable instruction cache in 1-way (direct mapped cache)' Z/ n5 Z3 K# d  u( h
  54.   */
    , a' v, K# \0 R" O: y
  55.   LL_ICACHE_SetMode(LL_ICACHE_1WAY);0 C- ^% x" R- d
  56.   LL_ICACHE_Enable();! g  j+ A) s) b0 f% H" }' x' L' [- Q
  57.   /* USER CODE BEGIN ICACHE_Init 2 */
    . w2 p! b% J) m. j
  58. ) q- Y- j1 z5 J. |  D& C
  59.   /* USER CODE END ICACHE_Init 2 */9 x- b; x& Z  i/ i+ F( a2 f: a6 O

  60. " m0 S8 N2 _2 L) r. b* C8 r
  61. }
      A- \' i- w1 e  G& {6 x

  62. # h$ z, M8 f1 J& D  I3 h9 r! Z
  63.   L, d# m7 _8 B$ q" y
  64. void SystemClock_Config(void)# H. {6 K- ~% _5 C
  65. {
    $ W: G; I2 J% g7 l) k1 o/ w# ?
  66.   LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);
    . Q+ S' \/ X/ V6 `6 i! w
  67.   while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_4)' j1 e/ b$ z4 {8 H
  68.   {
    ) f: z3 u, G: x
  69.   }
    - o4 ?. f! N7 Z% j
  70. 6 X* q! l! p; o8 v' \% G6 P* s
  71.   LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);; U7 i) j0 `% D: p8 u% L
  72.   LL_RCC_MSIS_Enable();
    $ |1 `! j" k1 A% F2 S' n3 r- B
  73. 9 t/ k: K8 c# D# f: u6 w( Q
  74.    /* Wait till MSIS is ready */$ ^. r/ O( r. M5 @% V; y$ V" s7 {
  75.   while(LL_RCC_MSIS_IsReady() != 1)1 q, T% Y1 i3 T* D3 |6 n- v# ^6 h
  76.   {
    2 T( N' w# X* K$ F2 Z
  77.   }
    8 R- U4 j0 N+ i" ^5 @

  78. + y2 H. l* ~' E, V* E7 M+ j
  79.   LL_RCC_MSI_EnableRangeSelection();
    ' i, e8 I. f7 z! L* y
  80.   LL_RCC_MSIS_SetRange(LL_RCC_MSISRANGE_4);5 p8 t! }4 E) B, \% x
  81.   LL_RCC_MSI_SetCalibTrimming(16, LL_RCC_MSI_OSCILLATOR_1);2 c( c4 q$ Z0 k
  82.   LL_RCC_PLL1_ConfigDomain_SYS(LL_RCC_PLL1SOURCE_MSIS, 1, 80, 2);
    # J. S9 ~  d. m( N7 b0 g$ [- S
  83.   LL_RCC_PLL1_EnableDomain_SYS();' D" `, j) z3 @# \& O' C
  84.   LL_RCC_SetPll1EPodPrescaler(LL_RCC_PLL1MBOOST_DIV_1);+ r* r% o8 O/ {: ~% U
  85.   LL_RCC_PLL1_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_4_8);' O$ S! i/ m+ ]6 V  J
  86.   LL_RCC_PLL1_Enable();$ N, u/ y/ _" G7 u, |7 W% E
  87. 8 G- Y( G5 p7 t1 r5 s/ C5 i2 t, k( h
  88.    /* Wait till PLL is ready */
      n  p' M8 o% \% p
  89.   while(LL_RCC_PLL1_IsReady() != 1)/ L5 F( E* J0 ^+ w
  90.   {  m" e3 z6 l2 k' U0 t% E
  91.   }7 D/ Z/ m" J# z8 d, C1 c& ^* k9 \
  92. ; d! i/ f9 `; X' N. J. H1 n2 L; q6 I
  93.    /* Intermediate AHB prescaler 2 when target frequency clock is higher than 80 MHz */* D, K1 L+ L, g+ O9 e8 d
  94.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);! d/ ^* L& p  \& A
  95. 1 i3 y# o( I# @& \, I6 f
  96.   LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL1);3 B8 E- r" R  ~; c1 e

  97. 3 {# T/ N4 D4 ]  {1 S! w6 Z. I; _/ j5 d
  98.    /* Wait till System clock is ready */7 L: t) P) _4 ?* l- F7 Z
  99.   while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL1)7 `; k; G: p- d3 o" D& |2 S% v5 N
  100.   {0 r. O0 P+ k4 |& ^3 p: Y
  101.   }, N; _( |/ O/ s  X/ W, @
  102. % c' n( s6 o" @/ m4 P
  103.   /* Insure 1µs transition state at intermediate medium speed clock based on DWT*/
    ( D8 @- r1 I( j4 @; a& K& t
  104.   CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;+ Q, ~" a) q8 b6 N( @% Y5 t1 ?. e
  105. ; O6 x" R$ K. v/ y
  106.   DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
    - x( B: |' a3 v" Y4 }
  107.   DWT->CYCCNT = 0;
    / j! O( K) H7 B3 d) O( t: f
  108.   while(DWT->CYCCNT < 100);- n8 V5 g) ]7 X+ G! i& O- w

  109. ! h  E: o: J6 q) }: c6 U
  110.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);" h$ D" _8 t- T. `$ K! P
  111.   LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
    ' |  D/ m6 R. C3 m; N
  112.   LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    + ?2 _$ t$ K" ~
  113.   LL_RCC_SetAPB3Prescaler(LL_RCC_APB3_DIV_1);
    3 Q" t/ P+ k# J
  114. - b' [+ O6 d) p% N- ]! Y7 a9 t0 g% \
  115.   LL_Init1msTick(160000000);
    3 I1 S  j) @" y$ G
  116. 4 A+ P/ G. X7 X- |; g
  117.   LL_SetSystemCoreClock(160000000);' C5 B  Q7 ^) K9 x5 @
  118. }5 D) x( P1 g+ ~2 C, ^3 y* v% a0 l; O1 j
  119. 5 A: S  Q3 _, R* }5 v: n" ~4 J$ H: Q
  120. /**
    1 e/ v/ M# `* f1 q2 K
  121.   * @brief GPIO Initialization Function
    " L8 r% C1 e6 m6 B% ^
  122.   * @param None
    % F0 d* C  y$ T7 p
  123.   * @retval None, x' L  w" E- n: f; z
  124.   */
    $ A+ \5 S/ _2 X, ~9 E4 t
  125. static void MX_GPIO_Init(void)9 a0 o8 c& B4 x2 g% q2 Q" R  r
  126. {" x8 d. G6 B6 y% ~1 Z$ d# e+ t4 k
  127.   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};+ Z! W, q0 V8 Q

  128. " j0 f% H- I( \( ~. _
  129.   /* GPIO Ports Clock Enable */" p+ F) A- Z2 k0 z
  130.   LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
    + r, n5 _3 Z' \6 b- q, ~( P* |+ Y

  131. " h' v5 {2 q) p. U
  132.   /**/% y8 q' c! k* r8 I
  133.   LL_GPIO_ResetOutputPin(LED1_GPIO_Port, LED1_Pin);
    % {6 n5 y6 A5 C' g6 N- Y
  134. . S5 ]7 t+ J. }# e# j7 [1 C" a
  135.   /**/7 Q( d% z& u' y# r+ {
  136.   GPIO_InitStruct.Pin = LED1_Pin;
    # s( c- J4 i% ]7 |/ W! T
  137.   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;0 d$ K( l5 D4 ^
  138.   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
    % {& {2 U8 C1 |4 _$ A
  139.   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;. V8 H, z8 ?6 l2 {
  140.   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    2 M1 G7 F. ~  a& M* U# H
  141.   LL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
    1 h' M! s( q6 H5 [& X/ ?

  142. ) v% a- {. h% P3 \! V* o* L
  143. }
    + t; g; R8 i& u4 m+ H) b9 k

  144. , t0 R* [! l4 Z$ ]) M. M$ N

  145. & Y# E4 x- y$ K# m4 f4 {
  146. 7 h. S$ x8 j! R; w
  147. int main(void)
    * a& W& \( g2 [: j/ z9 E% L0 L8 r, P
  148. {1 P6 O; g+ _' w# Y; F
  149.   LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PWR);( m/ G% R9 ^' Z
  150.   SystemClock_Config();
    . ^5 H, b7 f: w# t# P
  151.   SystemPower_Config();
    5 C' Q2 {( T4 d7 C# Q, }
  152.   MX_GPIO_Init();3 K* ?( W+ x& b- A# r1 k/ d
  153.   MX_ICACHE_Init();2 W1 d. p! I. f8 U( A8 L
  154.   while (1)
    1 Z3 E  z: {7 j% B1 a# c8 l
  155.   {
    ; c  D5 g5 r. m) v# p# M4 R
  156.                 LL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
    ! R0 L+ d1 d$ O( j- Z. L8 q/ p1 @
  157.                 LL_mDelay(500);( l/ [5 o6 Q! p) @4 r5 N
  158.   }+ z, |. A7 O3 Q5 ^
  159.   /* USER CODE END 3 */
    * ^7 j$ _4 w6 L/ N
  160. }3 x4 i* ~) L) V
  161. ! ~% P$ P% @# G: Y1 g4 `# S

  162.   Y4 |* q6 Y! W8 L, h  D, @

  163. ( J: C8 j. V4 O2 j
  164. #ifdef  USE_FULL_ASSERT
    * i7 e$ u( a& p& F
  165. /**( ^. g+ q( ~, R: ]8 D
  166.   * @brief  Reports the name of the source file and the source line number3 v1 v& v" R& g7 I8 r* H( f; u
  167.   *         where the assert_param error has occurred.
    - A& S7 y8 l5 `3 c% g3 q( k: J
  168.   * @param  file: pointer to the source file name, o6 p1 E9 y4 ~3 U
  169.   * @param  line: assert_param error line source number) I' [9 h6 ~4 Z( R! j2 `9 b! m
  170.   * @retval None
    3 j0 m5 A8 N& s! ]# |  [
  171.   */
    % E1 Y% _2 k6 q8 \4 d/ f
  172. void assert_failed(uint8_t *file, uint32_t line)
    5 E/ h, k! z, r  [& ]7 T
  173. {) R  n: D* d7 S2 J# @5 q( m2 z
  174.   /* USER CODE BEGIN 6 */. q! g7 R+ e* C  o+ Z; i) _$ v

  175. - E/ z2 x5 Q% ~) u5 H$ e
  176.   /* User can add his own implementation to report the file name and line number,
    1 v9 i5 S! ]! @; m! h0 r
  177.      ex: printf("Wrong parameters value: file %s on line %d", file, line) */, H7 \: I* i- O6 z, d! n- ~

  178. ; t2 G8 S) a- j& s" F. n
  179.   /* Infinite loop */
    - i3 P( f. Q- m& l+ D: T
  180.   while (1)
    . Y+ u2 ]7 o- |0 W9 r! J9 K% V
  181.   {. d" H6 `5 C. F# d
  182.   }
    . }" l; F) u+ Z- M
  183.   /* USER CODE END 6 */: e2 {8 Y" O2 W  O& I) [
  184. }
    4 a& m$ H9 W. j. E) G4 p- M
  185. #endif /* USE_FULL_ASSERT */
    , G& w. W) l0 m; W/ i( x
复制代码
在完成之后,编译,就可成功下载点灯,具体可查看附件。
6 d8 V; v: Z" V- S; ~' ~
03-点灯图.png

/ Z! m1 d8 t, |* j! {4 V& h
好了,先分享到这,过年后来了的第一篇。
) F9 H7 d+ Z4 t9 v
+ z6 I3 R/ Y! B+ ~* w
% b4 G* z% o, y( y3 y6 D5 a: F
附件:工程源码 Demo.rar (716.81 KB, 下载次数: 1)
收藏 评论1 发布时间:2023-2-2 23:27

举报

1个回答
STMCU-管管 回答时间:2023-2-3 17:15:07

期待下一篇

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版