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

STM32F0的LL库使用(一)

[复制链接]
lebment 发布时间:2018-1-5 23:01
  鉴于各位大佬都熟悉STM32,我只是抛砖引玉LL库的性能也接近寄存器,很有实用价值,所以本贴只是探索LL库用来学习,各位大佬多多交流,大家的进步会更快。
" `+ D% X( b5 H6 Z, E7 X  这里就不介绍LL库的背景了,咱们直接上点灯。8 f% T0 H' ?$ R% N( @# G
  硬件: STM32F030F4P6$ t& b/ {) ]) X/ u
              板载的LED灯接PA4
6 l, X. ?1 q( `4 M, J3 |* `8 |  软件:CubeMX+IAR(V8.20). U8 ?" a0 b& t) [
            LL库版本V1.9.06 V# L% }0 C: Q- u7 I& Y! B1 J
     6 b+ b1 y4 J5 B2 \
     不多说,CubeMX不会用请看官方PDF,我直接贴图: 捕获.PNG
5 W& a& X0 q/ W, k! r 捕获.PNG 这里库选择LL库,然后生成代码。) m1 n2 Q% a" O7 G1 P! l# U. w
以下是主函数,其余的都未改动。
7 ^9 N, V$ l, e4 lint main(void)0 ~3 z& Y3 i5 V8 u' A/ ]
{! M' o$ u( V' ~$ T+ ~$ u
; T, X. q! P7 J6 g$ Z, q
  /* USER CODE BEGIN 1 */5 z+ J& C( t7 k1 V% U0 w' B5 v

/ H0 v8 O' |. f2 E" z  /* USER CODE END 1 */( u' i( ^: O% ?; i
! \5 l0 J9 O( l3 ]1 K. I1 E2 i% ?7 b( W
  /* MCU Configuration----------------------------------------------------------*/
( R8 Y$ i1 j1 `+ V+ E' @; F6 B% j' W$ |( l2 e, h
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */1 y' l& `9 S- y, ^$ L7 v
  LL_Init();
( m# O- c: o, O, \3 Z
# ^( C- x$ E8 a2 N  /* USER CODE BEGIN Init */# Y0 J( j8 M$ W, i+ K: O# N& e. f2 |
  3 }" Y: X$ k- s: b3 n
  /* USER CODE END Init */
8 g! Q: i  f5 V: \' V  s3 M+ t" @& w5 K7 r
  /* Configure the system clock */, h( p* ?/ z& F! e% d: X
  SystemClock_Config();1 p$ N" M, x' v- `" d9 W
: I0 j* U- D! N- I) K
  /* USER CODE BEGIN SysInit */
( g2 o6 z: L$ w0 Y3 o. P% r- d4 l6 N- \2 @+ w4 H  e' ]& s
  /* USER CODE END SysInit */
! {7 p9 |; u6 P- O
  T+ N! H# e  D- h* I* s0 Z; q) ^  /* Initialize all configured peripherals */4 b- Z3 q: I! n6 w
  MX_GPIO_Init();5 A& N. A, j+ r
3 ^3 |; b7 [1 f) j* d+ X
  /* USER CODE BEGIN 2 */8 I8 K' G& H, n5 ~

8 f6 I5 k4 n3 P, n  /* USER CODE END 2 */
# D9 d9 T9 B1 T* d) w& P" N+ |' \' f( F, E2 |* b
  /* Infinite loop */
- p+ `* E; B) @- q) z  /* USER CODE BEGIN WHILE */2 B3 q" {8 f& ~4 T6 r
  while (1)
* d4 _$ }* m; U6 j. }; \- h  {8 C- G$ T4 `6 O& F1 r+ t
  /* USER CODE END WHILE */. U: J+ }# D* I* Q! Y* B. s
  /* USER CODE BEGIN 3 */
' d& L2 i0 p6 J5 [  LL_mDelay(50);
  `7 u6 Q, Y% F% t  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);6 m- c0 i* z9 O2 i$ y" V! \2 p- m
  }
6 t3 C# @/ }1 g: X, D  /* USER CODE END 3 */( O: @! f0 k$ S$ x1 F) C6 l! o
}
9 a1 c+ P' _" |) b) V1 U9 J
" }4 O+ R% ^7 |3 F1 E: X$ F你以为就这么完了吗-***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************-
" U) V: }* ^( m& w并没有
+ k& |$ X4 {4 `, V6 C3 _8 @本人发现一个问题:. k0 O4 f) p3 k/ v0 b
  LL_mDelay(50);  a. X0 b+ W" y
  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);这样是可以翻转的( ]9 @( k& Z5 `) W, ]. u
如果改成  0 |" y: B4 F3 t6 X/ \
  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平7 ]$ r5 R$ H" ~$ \5 h
  LL_mDelay(50);
9 K+ }6 X4 K! r+ a  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平1 x$ _) W1 C+ j1 K
并未发生翻转现象。
' Z  D0 Y1 t9 k- S1 m3 J7 U经过一翻摸索改为:
3 b5 g( p# @/ |8 i5 I- L) Y* Y  LL_mDelay(25);) ~+ z, K# h; |: E" N
  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平1 E, Y* D2 u7 v, F
  LL_mDelay(25);
4 M  q  u. G  j- x- B  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平
7 o" w/ l& `0 |+ _8 |
! w  z& f6 }/ @! ]5 U正常翻转,有没有大佬解释一下,本人不擅长寄存器,我对那些解答一些困惑的大佬表示十分感谢。
+ F) \/ x7 p: u  X" T- z/ d
. H$ W, [7 f( v4 E9 |$ I$ ~, U3 j6 n看大家对此贴的讨论,再写出操作其它外设的代码。后续出PWM(已完成)的操作。有可能还有L4的帖子。谢谢大家支持我的一帖。
( v  I) A' B) ?
& N" k- h: R( c( x8 Q)   
; @0 U! a! d( L' M. C: @& c2 [2 ^$ l- n) `2 X
继续阅读:6 m( \: K' A# K+ U  u: ]
STM32F0的LL库使用(二)' `6 J* ~; p" _  e0 i
STM32F0的LL库使用(三)
# R* {( [0 v$ e* f

评分

参与人数 1 ST金币 +2 收起 理由
MrJiu + 2 还阔以,以资鼓励!!!

查看全部评分

赞 收藏 2 评论10 发布时间:2018-1-5 23:01

举报

10个回答
涛哥2035 回答时间:2018-1-6 08:34:19
  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
+ s- N2 T  }) X) X: ]4 U% v3 F: c  LL_mDelay(50);
/ V3 N% s  ]1 |5 b: ^) N" f  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平
( [& |! M2 X6 S+ G% E) F/ j; m这是输出高电平后立马就又改成输出低电平,所以看不出来高电平了,要再加一个延时函数

评分

参与人数 1ST金币 +2 收起 理由
Inc_brza + 2

查看全部评分

slotg 回答时间:2018-1-6 01:19:00
在 while(1) 内输出低电平后延时再输出高电平,然后又会再输出低电平,这样的流程应该会被编译器优化吧!
Inc_brza 回答时间:2018-1-6 09:08:00
whtt 发表于 2018-1-6 08:34/ o) t- P6 W( l( [( T9 u* J- H
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
" g2 Q. V* F) S$ x- g  c, V  LL_mDelay(50);
5 B- l6 \, I. a$ [  LL_GPIO_SetOutputPi ...
; ^" g5 k: B0 ^0 y. u7 s
正解
pythonworld 回答时间:2018-1-6 18:02:23
谢谢分享!!!
anywill 回答时间:2018-1-7 07:52:17
学习学习LL新生事物
lebment 回答时间:2018-1-7 12:49:23
anywill 发表于 2018-1-7 07:52
# }! _) e; H; g! u学习学习LL新生事物
! J7 i! ]4 L" |. g
谢谢大佬
lebment 回答时间:2018-1-7 12:49:59
pythonworld 发表于 2018-1-6 18:02
, V, m) V; O! ]! {/ y谢谢分享!!!
. y7 d" Z  _# P" C% @5 ]
大佬,客气
板子粉丝 回答时间:2018-2-28 09:20:20
对应用LL有帮助
kirbymore 回答时间:2018-3-1 16:54:05
以前写汇编的,一般不用延时的方法,这样CPU效率低,是不是应该换一种程序结构?
wdliming-222461 回答时间:2019-2-28 10:36:30
whtt 发表于 2018-1-6 08:34
' H9 z# b8 r# q5 B( U; F) lLL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平6 j, y: V9 @$ U- S, |' t
  LL_mDelay(50);" K1 E9 ]9 r! X% h2 B$ ?6 M% |2 ?$ i
  LL_GPIO_SetOutputPi ...
" C! I2 x0 N$ u& q" P
这个是低级错误了

所属标签

相似技术帖

官网相关资源

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