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

STM32F0的LL库使用(一)

[复制链接]
lebment 发布时间:2018-1-5 23:01
  鉴于各位大佬都熟悉STM32,我只是抛砖引玉LL库的性能也接近寄存器,很有实用价值,所以本贴只是探索LL库用来学习,各位大佬多多交流,大家的进步会更快。0 p" \% r, [1 Y( C1 f: p
  这里就不介绍LL库的背景了,咱们直接上点灯。
- F2 B) H. p7 W+ K; a7 i' ]  硬件: STM32F030F4P6
( \2 i0 ^9 l: X; f  Y3 t2 j( I              板载的LED灯接PA4
8 t/ H8 B8 c" W/ d$ M& S9 E  软件:CubeMX+IAR(V8.20)
2 g2 Y' ?% ]4 R. L            LL库版本V1.9.0  b: T( ^) g# y% v+ f& W- P6 |' y6 E4 v
     
/ X0 o; A, M, I) `( \# Y     不多说,CubeMX不会用请看官方PDF,我直接贴图: 捕获.PNG " E1 L5 R0 t- c( O8 S5 z
捕获.PNG 这里库选择LL库,然后生成代码。
( I! w: p0 W3 J7 x1 P以下是主函数,其余的都未改动。
- q6 T) r+ \1 `$ z1 wint main(void)* k9 m+ S6 G) W5 |
{) `/ @0 i5 c* U# O* z) h/ \

1 |" \  B& a" G2 J- D% E  /* USER CODE BEGIN 1 */& t5 k1 o6 w% _' c! R. C
8 b) c+ \) L% @1 L8 y# a6 I# q; t
  /* USER CODE END 1 */
* o$ F0 G4 t6 M- v/ H9 `/ m* r
  /* MCU Configuration----------------------------------------------------------*/: z: z1 I, _0 K2 |
9 Z7 S0 z# N! R" L# m
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */$ V1 n& K' @/ b) w0 Y7 c9 Q
  LL_Init();0 K9 A: X1 q, ~8 r

3 Z& |4 h) ^1 e5 H' q* D) `; b  /* USER CODE BEGIN Init */
% I  E. n# Q, w7 K, y7 K  2 J' u! O  ]! x6 [& b
  /* USER CODE END Init */
& G- }9 o4 a4 k1 D" o
$ d0 G4 B0 e1 \) @* E) d8 {% U4 t3 z. W  /* Configure the system clock */
, V* G" k" B* [9 z  {6 ^8 P4 ?- o  SystemClock_Config();
( L: w" T3 d1 k- y* \: D; F; n8 [7 e5 ^% e3 ^( P
  /* USER CODE BEGIN SysInit */
  A. _) n# C4 b* o# i- o3 U1 \% |5 c  W
  /* USER CODE END SysInit */( E& F0 P' i# O

3 J( o7 m( H7 M- s% J- k  /* Initialize all configured peripherals */
9 k( w  ?4 @! E  MX_GPIO_Init();+ n5 v( c) G2 `3 ~; c

- |/ S, T% _0 c  /* USER CODE BEGIN 2 */5 ~- D0 f7 [7 D6 H0 ]

& ?0 |0 V; ~/ c1 i1 U2 @* j4 S  /* USER CODE END 2 */
, e8 |4 g: Z1 S0 q: G1 f9 G: s# @4 |- V
  /* Infinite loop */3 v% f0 j3 E  q: X- B
  /* USER CODE BEGIN WHILE */3 u4 [6 o4 K; u0 V
  while (1)9 t  V& r7 y; t5 u; M" a
  {/ u0 ]) o+ X6 s$ y6 d; ^* d
  /* USER CODE END WHILE */
/ @+ Z, m2 w# u( U  /* USER CODE BEGIN 3 */) d5 \% J+ q" C6 c% B& k0 Q# J3 i: C
  LL_mDelay(50);9 H2 X" q9 \+ P1 J
  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
/ N( d9 a, L/ T$ t3 ^/ f" y  }
# x2 O" c9 n5 s1 ~% ?  /* USER CODE END 3 */
) ]  Z+ x" P) e}& X0 I; ^  ~; U3 s1 Y' ^

7 E- n/ j0 \: ?0 e" [你以为就这么完了吗-***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************-
& i2 v" X1 m5 V8 U并没有
4 n& a; V6 b* O本人发现一个问题:
: f9 W* Q, m( |0 W0 W  LL_mDelay(50);
5 w" B/ L* p: h3 m' K* Y  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);这样是可以翻转的' s+ L9 u+ }4 q+ {% }
如果改成  
- _) R  N- M- `9 A3 J  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
' x9 A/ k3 E9 l, A& g6 Y  LL_mDelay(50);
1 u/ R6 p1 W  G7 p$ b. d  @- k  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平+ A7 G2 X6 _2 p. t
并未发生翻转现象。
) J5 O6 v% ]7 ?经过一翻摸索改为:
5 e/ w5 e" P/ A* W  }3 c  LL_mDelay(25);3 Z/ M7 O9 [0 q/ H, J; C
  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
, W3 U$ g& q) K) t! F# G1 J  LL_mDelay(25);
4 Z& @# U: p, V. X  N% O  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平2 n# N* }6 |; r! M

$ ~4 ~" C& w* |/ ?- X) I" I- g正常翻转,有没有大佬解释一下,本人不擅长寄存器,我对那些解答一些困惑的大佬表示十分感谢。
- E- t, i6 {) x$ d: o6 R* e3 h3 v# G0 E
看大家对此贴的讨论,再写出操作其它外设的代码。后续出PWM(已完成)的操作。有可能还有L4的帖子。谢谢大家支持我的一帖。( G% e& \& v# o; T; N6 Z0 T$ N5 ^

* b3 p. i. Q, k)   6 y3 W( L  b; C- M' X  e

' o3 @( a3 {. F. v2 S继续阅读:
# [: S+ O0 O6 K2 Q; jSTM32F0的LL库使用(二)
: a& Y; s1 e) M2 K8 {STM32F0的LL库使用(三)# S" n: u0 _4 t0 @

评分

参与人数 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);//输出低电平2 ]" b% \; O8 Y5 h+ t4 o
  LL_mDelay(50);
& B9 @6 \3 q! ~  Z5 z6 A  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平, g8 S  c: v4 T' G% Q
这是输出高电平后立马就又改成输出低电平,所以看不出来高电平了,要再加一个延时函数

评分

参与人数 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
1 H  q. O4 C# N  G* `9 N9 ALL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平" q; p! b7 U) ~) _* H" ]
  LL_mDelay(50);% U- [0 O) [9 I1 ^/ r/ P1 @
  LL_GPIO_SetOutputPi ...
2 Y/ N& _5 {6 i+ W1 J+ y
正解
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:522 g% s9 ]- P2 ?$ o; E
学习学习LL新生事物

+ k2 A0 S: H4 @$ L3 r, h谢谢大佬
lebment 回答时间:2018-1-7 12:49:59
pythonworld 发表于 2018-1-6 18:02/ Q$ ^# m4 E0 q& F8 k
谢谢分享!!!

5 ]1 H, a% ~4 V8 I- R大佬,客气
板子粉丝 回答时间: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# d# ~0 s. B( P( P0 h: _
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
6 u" T3 Z1 \' N4 ^  LL_mDelay(50);' @6 |) L0 x$ L* ~' T
  LL_GPIO_SetOutputPi ...

; S4 v- r3 j8 Y; g# R$ W! w) N这个是低级错误了

所属标签

相似技术帖

官网相关资源

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