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

STM32F0的LL库使用(一)

[复制链接]
lebment 发布时间:2018-1-5 23:01
  鉴于各位大佬都熟悉STM32,我只是抛砖引玉LL库的性能也接近寄存器,很有实用价值,所以本贴只是探索LL库用来学习,各位大佬多多交流,大家的进步会更快。
7 H; \) A; E8 }7 X& c5 d* H  这里就不介绍LL库的背景了,咱们直接上点灯。" T0 A0 j2 i+ S+ [
  硬件: STM32F030F4P6
$ k+ i; @( i% w# e4 G              板载的LED灯接PA44 ^7 F6 q% ~( g* S/ E
  软件:CubeMX+IAR(V8.20)
6 h: N- U3 T! D            LL库版本V1.9.0
8 x2 ?: C% q  A0 s1 T2 }! ?     
) l# L! }- y2 n! ~& k     不多说,CubeMX不会用请看官方PDF,我直接贴图: 捕获.PNG
' f, `/ q% L8 p4 q% F7 e 捕获.PNG 这里库选择LL库,然后生成代码。$ J: O) ~& `/ v; E
以下是主函数,其余的都未改动。
) P1 |) p) v( G  ^int main(void)
; M- W) g2 h, j/ n% u{% m3 \9 M" ^1 @7 s" h! j

9 X- r( o/ K7 a( {* l  /* USER CODE BEGIN 1 */
. K9 ~3 @6 v7 N* X; t# V, ^6 b( [
' a4 V+ P* ~/ i% x3 O9 @! B5 d+ K0 F4 |  /* USER CODE END 1 */
' ~  n7 t) Z2 f  D5 A9 i2 u- p2 V" p) m
  /* MCU Configuration----------------------------------------------------------*/7 M% [* s/ D, z, L' ?

& g! Z9 z6 E% V* J  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */4 u( K: T  }2 x; H) s% L
  LL_Init();$ N. S# |: A7 Q6 i4 [

6 a/ I  o6 W6 J  {& I  /* USER CODE BEGIN Init */$ j9 w0 v- ^- x, ~9 y; l
  ! R9 Z" ~) Q8 ~' r' Z! S% B
  /* USER CODE END Init */
% B9 j, }' [% w# X
$ S$ a! z1 r* h, P  /* Configure the system clock */
% u0 I+ `, f7 X( ^+ W7 k( B  SystemClock_Config();9 p( b% M) g# B7 c1 s  B# t

) p5 f3 q) ]# o* M' y4 v  /* USER CODE BEGIN SysInit */6 {, T/ [4 p. h  `& c1 z4 q
4 e' ~  `6 U9 C
  /* USER CODE END SysInit */
" s+ @) d6 U( k( _/ t1 D; w$ l7 j1 u' F; Q. r$ `% C) l( G+ R( B
  /* Initialize all configured peripherals */
* T2 A" u. r  @1 }& o4 V; j6 R, P  MX_GPIO_Init();
# x# \3 x8 R2 Q1 K. `; w% X' x( s) b/ u( G. ]5 d
  /* USER CODE BEGIN 2 */
8 R7 M9 [9 H  h' P2 v% Q. e
7 o. h* _* B# _3 l+ T7 P" y! ^; O  /* USER CODE END 2 */. k+ X. v3 S: c) m1 W# W+ }
, Y% `! E8 L, K: f
  /* Infinite loop */
, g, t7 Y# J7 _/ ^, {9 v  /* USER CODE BEGIN WHILE */
) c* f( {4 }. f+ z$ x  while (1)
. p3 x6 g$ Z0 s: P3 K5 `  {
, B' X! h. `* ?+ D7 v  /* USER CODE END WHILE */  X) E! s9 J4 \  b0 W
  /* USER CODE BEGIN 3 */7 J' I9 V8 [. v* v; r( D4 M5 d" q
  LL_mDelay(50);4 h/ F' F& A; q7 [4 a- p
  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
5 G% H4 N5 S, x0 c8 H  }
0 Z9 k3 N9 Q8 d  /* USER CODE END 3 */% p' w( Q) k2 x7 Y6 k5 {
}
3 @  u+ b! i' f; T3 w8 L+ @
1 g) o, c. V% l- Z5 d# t你以为就这么完了吗-***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************-( B, K9 {* H/ O- Q/ q
并没有. Q( G/ ^% r4 ^8 O
本人发现一个问题:* B0 a7 H4 k% K0 w, {
  LL_mDelay(50);0 V6 p0 ?+ Q$ a$ x5 `/ C
  LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);这样是可以翻转的3 n: n$ j& u3 K7 R; J, n! b" p
如果改成  
9 g' h, n2 f% _* y  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平1 i9 }2 I8 B( [, ]4 o
  LL_mDelay(50);
- `9 N7 w9 l1 f0 f& j  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平
* R7 A& ]) }; e3 J并未发生翻转现象。
; ?' E9 g$ @9 K* H经过一翻摸索改为:- n/ W/ q1 X0 P# D: z8 Q
  LL_mDelay(25);2 M' h+ p2 {& a6 p3 h5 Q
  LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
$ a3 E6 X, z3 B5 L5 Q  T- e1 a* Y  LL_mDelay(25);
" k8 F3 H" K2 _8 Z" z4 K  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平6 h) q# i$ h9 _* ~  y
* ~! ]; @% D- ]  t$ X- @
正常翻转,有没有大佬解释一下,本人不擅长寄存器,我对那些解答一些困惑的大佬表示十分感谢。
% p3 H* ~- Y& v: |. Z$ ^2 k; q, \2 X; V) Q' N
看大家对此贴的讨论,再写出操作其它外设的代码。后续出PWM(已完成)的操作。有可能还有L4的帖子。谢谢大家支持我的一帖。5 Y0 {& O+ N9 N' P' n' g

. u6 e5 s1 w" Y" a)   5 v( V) n( |* d) u- i8 u7 z& o

' M  v6 M* o, v5 `# I$ j* j继续阅读:
- _( _+ e5 ?, `; m7 ?' n+ sSTM32F0的LL库使用(二)' |0 G" A! J% X7 A* x. U
STM32F0的LL库使用(三)! U7 Z& Y. [) U; o. A2 G7 _. R8 c

评分

参与人数 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);//输出低电平8 ]1 y$ N( t+ x4 C# V# I* w8 j
  LL_mDelay(50);8 h: Q2 U! ?+ F7 j7 U6 i
  LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);//输出高电平
6 P$ \! X! F# O$ D% l0 p这是输出高电平后立马就又改成输出低电平,所以看不出来高电平了,要再加一个延时函数

评分

参与人数 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
+ D% t9 [, D; jLL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平
& B) V! f9 {" \* g8 s8 C  LL_mDelay(50);& Z3 y! Q) Z3 U
  LL_GPIO_SetOutputPi ...

2 e6 U8 c5 E. M$ p正解
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% y: W$ C' y  Y: x. i
学习学习LL新生事物

( k! J# r- g1 H# v  n: p1 L谢谢大佬
lebment 回答时间:2018-1-7 12:49:59
pythonworld 发表于 2018-1-6 18:028 J+ ^3 @( i5 o3 Q
谢谢分享!!!

+ c! y. J3 T7 x2 J! ?; ?$ {大佬,客气
板子粉丝 回答时间: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
$ f" g: L' A" f$ v( sLL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);//输出低电平; I9 y: N, [6 N
  LL_mDelay(50);  x$ }8 ^  A/ K8 V! \/ g
  LL_GPIO_SetOutputPi ...

0 _( G# }; |( t8 S1 q, Z/ ?这个是低级错误了

所属标签

相似分享

官网相关资源

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