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

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

[复制链接]
shenxiaolin_mai 发布时间:2023-2-2 23:27
        说实话,我不喜欢hall库,也许很多人用起来很顺手,但是我用起来不习惯,而且LL库效率明显高得多,也许是没有接触过上层代码的原因吧,那么我就来说一下LL库的环境搭建以及点灯。
" Y: u$ m0 D) B2 @* Z, _$ G) s        我们首先根据官方的LL库以及例程做更改,新建文件夹,拷贝文件,具体如下图。/ f3 g& d0 _! o9 K; V  e" c
01-文件夹.png

5 d- I9 L  l. p6 P9 l
        并将文件拷贝到个个文件夹内,方便将文件归类以及后期文件管理,具体的可以看附件里,附件内的源码。具体的可以查看keil工程下的文件,如下图
4 E  a1 G# Z7 T9 ~
02-文件.png
; s$ E" K4 z3 }5 E
文件拷贝完成之后,然后添加文件路径和初始化定义,然后增加如下代码到Main.c文件。

; c2 m6 K3 _; @

  1. $ X, l: G, r( W+ d2 D$ E0 {
  2. #include "stm32u5xx_ll_icache.h"1 g% n6 m& k; x# s% m5 F
  3. #include "stm32u5xx_ll_pwr.h"
    0 C. s% F! i2 K0 N" f8 N3 c2 w3 Z
  4. #include "stm32u5xx_ll_crs.h"9 J/ D0 W6 I7 s6 V/ x' W
  5. #include "stm32u5xx_ll_rcc.h"
    8 V: I- x+ Z$ b8 m% G2 S
  6. #include "stm32u5xx_ll_bus.h"- o3 V" l6 y& ?
  7. #include "stm32u5xx_ll_system.h"
      p' l$ q6 O/ t
  8. #include "stm32u5xx_ll_exti.h"
    5 b' ?/ Z( D0 u
  9. #include "stm32u5xx_ll_cortex.h"! _6 ]' v6 R- h& s
  10. #include "stm32u5xx_ll_utils.h"7 P& F) z& b5 h
  11. #include "stm32u5xx_ll_dma.h"+ o. A1 B+ _, z# A) k4 j9 r
  12. #include "stm32u5xx_ll_gpio.h"9 L- D0 V; }' ~" O7 F
  13. #include "stm32u5xx_ll_lpgpio.h"
    ) W& p! C9 ?7 y- F. B; d; ^$ C4 u$ E

  14.   _7 ?5 b" u9 Z5 G1 G

  15. 9 h  E4 l* C* o" d6 R

  16. 2 b! _4 z; ~9 b2 ?. H" T

  17. . z) A# o) ~4 n2 u9 a
  18. #define LED1_Pin LL_GPIO_PIN_7
    + k4 C7 G0 r! Q8 T) u! O
  19. #define LED1_GPIO_Port GPIOC
    7 E4 k3 Q; h7 o5 C. @  @' ?& p
  20. + a# u5 |! w1 J9 I1 e9 m
  21. , Z3 R8 J: d! @' [+ K/ Y
  22. 4 F  _+ M! |! p( X& }/ q- O- u/ u
  23. /**
    ( n& v9 J0 e1 ~/ Q, W  O  t( j8 w
  24.   * @brief Power Configuration  |$ T+ a' G8 h( a( ?* a* _+ _* m  I+ Y
  25.   * @retval None1 y, s* u' k+ y4 n/ ?* `
  26.   */
    * u6 l: h5 i* x- b3 |9 _1 l
  27. static void SystemPower_Config(void)6 |4 f7 [6 |+ P- |
  28. {
    ; ]4 k7 X2 k; a5 O5 S: V6 z

  29. % F* A! Z% [. X! ^/ r7 O. c
  30.   /*
    - s( I" {5 Q, n: _- e; e) Q: Z  Y
  31.    * Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral7 ]5 S2 e2 k/ W0 }; Z" @3 ~
  32.    */8 h: H6 l$ o- U) s
  33.   LL_PWR_DisableUCPDDeadBattery();
    ; t, s. F. m" P. R

  34. ( x' a& K- h4 T9 `; x& I
  35.   /*. g+ [1 Y! ]* ^6 ^; E
  36.    * Switch to SMPS regulator instead of LDO
    6 G, ]: W2 l8 l' c9 A7 a! L
  37.    */
    0 g( M0 h5 s/ \8 u" {) W4 s
  38.   LL_PWR_SetRegulatorSupply(LL_PWR_SMPS_SUPPLY);' Z( b) T1 O5 R% Z* g3 b; A" V
  39. 5 t; _9 n: {4 v+ b6 H, Q" C
  40.   while(LL_PWR_IsActiveFlag_REGULATOR()!=1)% t" J3 R2 [) f+ q. \0 g4 o
  41.   {: V) z6 y( Q: W- `) g. P: r
  42.   }
    - P5 D5 ~1 Y  a1 T- G) J
  43. }
    8 ]1 G% f; m. g2 b
  44. $ B; }$ v' P. D" B; m2 |
  45. /**+ u( m/ W* d  H  S
  46.   * @brief ICACHE Initialization Function  E; d- X9 E9 C% {" \) I6 S
  47.   * @param None9 h! F% i( \: F# v2 z
  48.   * @retval None
    / T9 W. ?- Q" n2 R2 c" h) _& A) L
  49.   */) t9 c7 l+ D2 W7 j+ {- s- i( a
  50. static void MX_ICACHE_Init(void)5 m" K8 E* A1 u/ L3 H
  51. {3 B/ ?% I' }( E
  52. 6 I' R9 u! X* _/ E6 }
  53.   /** Enable instruction cache in 1-way (direct mapped cache)
    $ H- [. j' x! e5 b0 x- |! W& F7 }
  54.   */
    4 r1 r0 }! q* y8 J
  55.   LL_ICACHE_SetMode(LL_ICACHE_1WAY);9 a7 a; N$ c& D/ D8 M
  56.   LL_ICACHE_Enable();7 j! x3 t2 a9 f( i
  57.   /* USER CODE BEGIN ICACHE_Init 2 */" T9 V- u( F; L( r" B+ f
  58. 3 Y% j7 U* \& E* v
  59.   /* USER CODE END ICACHE_Init 2 */
    7 `" G7 T7 }1 X$ g  T- g9 E
  60.   h' V* S1 M& W) a2 D+ @2 T
  61. }4 v. s* U0 R* \8 i: T

  62. 0 q+ b$ e5 T) ^( U$ Z

  63. 6 C5 A+ Y4 Q1 W2 O+ Q$ {
  64. void SystemClock_Config(void)
    7 x: V; l  t1 Z! W* X" r5 A' Z* J
  65. {
    $ L' \' g! ?' R
  66.   LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);
    + Q9 y7 `2 [7 t: z- J" B" C! U
  67.   while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_4)) N. z; @( Y: @) R, E4 X0 @
  68.   {9 R) U9 e$ u0 k0 \2 S
  69.   }
    1 Z- j' d9 m- y; f' |5 w+ R) X
  70. / [5 G- G8 C5 e5 l6 {6 U: L4 k
  71.   LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);0 N/ m2 H6 `" l
  72.   LL_RCC_MSIS_Enable();0 K- k" p) ?9 A+ @' g, l, ^5 j

  73. * @3 W8 q" @3 _) I8 k8 Q. ~
  74.    /* Wait till MSIS is ready */3 G0 @4 V2 d$ z! ?
  75.   while(LL_RCC_MSIS_IsReady() != 1)' f% I( p8 A) a/ e
  76.   {
    # [3 M. M$ F( u  I
  77.   }; n" Y# p  C! C( h# s- X2 h$ I
  78. ( \# H0 n& K: l9 B% d/ d  E' n/ U$ E
  79.   LL_RCC_MSI_EnableRangeSelection();- ^* A5 {( N. I5 X
  80.   LL_RCC_MSIS_SetRange(LL_RCC_MSISRANGE_4);& G7 R0 g# z1 }3 P6 @% p" Q5 \/ q: @
  81.   LL_RCC_MSI_SetCalibTrimming(16, LL_RCC_MSI_OSCILLATOR_1);. ]- @% Z3 ]( Z: C1 y0 q
  82.   LL_RCC_PLL1_ConfigDomain_SYS(LL_RCC_PLL1SOURCE_MSIS, 1, 80, 2);
    9 r  M; k& y- @, n; h+ F7 Y
  83.   LL_RCC_PLL1_EnableDomain_SYS();
      v, R! B' s1 b& i" m
  84.   LL_RCC_SetPll1EPodPrescaler(LL_RCC_PLL1MBOOST_DIV_1);
      g* L& d7 n+ [" j& |& D8 N$ U: Q
  85.   LL_RCC_PLL1_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_4_8);
    # y* ?4 y4 J# k. g; L9 |* C: w
  86.   LL_RCC_PLL1_Enable();
    ) \4 y* u% I, B, [7 z

  87. # L. D, \) ?& O2 c+ ~6 [
  88.    /* Wait till PLL is ready */2 T* e5 }7 {; U+ ]. D$ `
  89.   while(LL_RCC_PLL1_IsReady() != 1)' d% J8 c1 S* f$ H: P% _* v
  90.   {3 I2 L3 w( b" t0 o, y, g
  91.   }+ K$ m5 H0 l, O) D/ A4 I% i
  92. 8 `. U7 P: g  U) c
  93.    /* Intermediate AHB prescaler 2 when target frequency clock is higher than 80 MHz */
    , o  ^$ U3 |7 y" w3 y: d% r8 w
  94.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
    9 ^$ Z" Q! ^0 }' X2 {

  95. " G2 b/ I- D/ f& e4 B
  96.   LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL1);9 ^+ W& _- k6 H% X
  97. $ f4 _1 m3 ~6 a8 h' k1 j6 @
  98.    /* Wait till System clock is ready */
    7 f8 z6 c8 g: S. ~7 Y
  99.   while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL1)
    % ~3 T# b) g+ M1 A) O, m
  100.   {! `# X8 J- y9 R
  101.   }& i( v, q1 I4 C" d5 H8 b+ S
  102. * J7 f  z7 V9 s( ~. @
  103.   /* Insure 1µs transition state at intermediate medium speed clock based on DWT*/
    : F# B- @& r5 x) O" p
  104.   CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;. }  O- e* H8 a9 ?; h
  105. 3 X# o1 N5 W0 M+ O+ ~
  106.   DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;) {; Q0 W' p- h( P, _. N. L! P
  107.   DWT->CYCCNT = 0;, C, N9 O% Z/ @* Y0 {7 T2 b7 ?
  108.   while(DWT->CYCCNT < 100);
    + ?5 H+ S6 o0 @7 n% S& c
  109. 0 V4 ?  d7 x! ~
  110.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);5 r6 v1 ?+ c: Z0 {# l1 H$ Y
  111.   LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);( t8 E& [: R" _; W7 o
  112.   LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    $ ~% h5 h& z' ~% e/ q, {1 N
  113.   LL_RCC_SetAPB3Prescaler(LL_RCC_APB3_DIV_1);$ o6 K5 F/ n: |2 G  Z
  114. 4 M! @" W# E& b
  115.   LL_Init1msTick(160000000);1 ?$ l/ e  N. S# M; z/ U& r; \

  116. 0 |- w5 F$ s+ v' U7 Q, E% l
  117.   LL_SetSystemCoreClock(160000000);
    1 S: E  F1 X, U% |8 y
  118. }9 j; L6 V/ N0 \$ u- {

  119. 8 R2 d0 w9 e) A
  120. /**
    , X3 I- Q  f; D5 U: \! y
  121.   * @brief GPIO Initialization Function7 H: ]7 R( q* i) T
  122.   * @param None
    2 c# F+ f& t/ p' z2 ^% t
  123.   * @retval None
    / s4 L* L7 y8 I, }5 u
  124.   */& \. c4 A" P% T! K
  125. static void MX_GPIO_Init(void)
    ; S# D/ D# z" n
  126. {
    / `8 s- @) z5 r' @1 I7 S
  127.   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};/ m* H6 i- \% y# }; l7 O7 Y
  128. " S, y$ `) c, B
  129.   /* GPIO Ports Clock Enable */( I/ g4 M6 z2 |/ J: n
  130.   LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
    % |3 U4 a9 G3 y4 p" H
  131. 4 W4 y& @* ~4 Q6 K. h
  132.   /**/0 n% V% ?$ c; I
  133.   LL_GPIO_ResetOutputPin(LED1_GPIO_Port, LED1_Pin);
    ( H) e8 k6 S/ x3 U0 M
  134. 7 x5 U7 O& ^$ I% O) B7 R* [
  135.   /**/3 D( t9 ~0 e$ c+ ^8 Q& @0 w' q
  136.   GPIO_InitStruct.Pin = LED1_Pin;- p6 D& |% ?) V- p6 ~- e
  137.   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
    7 U1 G$ V" R+ Z7 A9 P! ?
  138.   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
    9 y! B3 d9 {! V' V: s+ O
  139.   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    / {' ]9 B- I6 a6 d
  140.   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;# R- U6 w4 `  g; q. A3 K& c
  141.   LL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
    + d1 V, Y; X. s
  142. 5 W' R% N4 D0 |( @. k
  143. }4 D! N* A* G% U, Z/ E/ J! h
  144. + p( W3 J( ^: I+ y+ f
  145. 5 d+ _3 z9 Z$ k" T7 J% W' Y
  146. ; p: e, E* O7 `4 s. y3 T
  147. int main(void), \5 f9 x; v7 a3 R6 k
  148. {9 p; ~' d! w/ E( g/ n
  149.   LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PWR);8 E/ G9 O5 l' n4 N; v" K! h( o) n
  150.   SystemClock_Config();% w% }; b  D* x
  151.   SystemPower_Config();
    ; @: A) H. c2 ?/ _" K$ x/ T% H
  152.   MX_GPIO_Init();
    * c2 U0 @/ J! j/ ], G
  153.   MX_ICACHE_Init();
    & m3 h$ S3 z4 Z4 j, w* J/ l. h
  154.   while (1)
    9 ?, Y+ l# ]% k+ k' g( B
  155.   {" U- |0 h/ z; S4 ]
  156.                 LL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
    4 q  X, D* E1 G
  157.                 LL_mDelay(500);7 W' U/ R7 o- m) U7 E8 H  \
  158.   }
    ) d0 h4 r& |) k  D
  159.   /* USER CODE END 3 */
    & m) c' A; @% A# I7 b- M, @
  160. }  Y5 V2 _1 |( p, P1 L, Q- c

  161. # z- d% u" t; z( D8 ~

  162. 1 k4 F+ [+ F& y8 L1 T; O
  163. ) x' @% J& c: _! L* d  S1 ?
  164. #ifdef  USE_FULL_ASSERT" f! e& Z0 O$ I; q
  165. /**
    " E4 c& |# E: I
  166.   * @brief  Reports the name of the source file and the source line number, i9 u% {0 Q; L  [- z  |% i
  167.   *         where the assert_param error has occurred.- r) g; C$ }  L$ x8 I
  168.   * @param  file: pointer to the source file name, c, O- N- t; x
  169.   * @param  line: assert_param error line source number* R: K" D6 k( |$ A) m/ ~# J
  170.   * @retval None
    4 Z: E3 v% x4 a0 d& m( T) k8 N
  171.   */7 }- e& }7 Z  u( g! _6 X# C
  172. void assert_failed(uint8_t *file, uint32_t line)
    0 M/ Y$ C+ q4 h  B7 @
  173. {
    : g2 c8 Y1 W. W" w0 ~
  174.   /* USER CODE BEGIN 6 */
    ; N0 L1 A7 `' ]: p. ^

  175. * @5 g& {! h- z4 v# Q( b1 V
  176.   /* User can add his own implementation to report the file name and line number,
      Q% V" T& W; Q( |) d! r, i2 q
  177.      ex: printf("Wrong parameters value: file %s on line %d", file, line) */' V% I' v& ~# Y8 c5 i

  178. ) c/ K3 a/ X' l
  179.   /* Infinite loop */
    8 D; b% {1 I8 Z
  180.   while (1)8 P% [5 z  ^/ t" ]- _5 H9 D/ _8 S
  181.   {7 o6 s6 z/ ~0 l9 d* G
  182.   }
    9 w" W) z2 Z2 v+ `# @7 v- s& S, |8 Q
  183.   /* USER CODE END 6 */
    5 v- K7 x/ y9 `7 ?/ j# e% M
  184. }! V( g% y% `$ C! j2 a
  185. #endif /* USE_FULL_ASSERT */
    ' l8 A$ ~$ r, |" S3 c; W+ |# C
复制代码
在完成之后,编译,就可成功下载点灯,具体可查看附件。

" S  Y- H7 @) I
03-点灯图.png

9 P2 ^# L: z2 H( H9 K" q$ x& r: X
好了,先分享到这,过年后来了的第一篇。

3 n% m/ b9 K, ~; F$ Q+ S, E% d: T; z. e+ P, L2 y% u1 w1 b, `- M
% Z3 _; d& l# h, I, t
附件:工程源码 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 手机版