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

LL 库现在BUG太多希望官方能重视LL库

[复制链接]
lqs0905 发布时间:2018-11-30 11:58
本帖最后由 lqs0905 于 2018-11-30 12:20 编辑
5 i. O! \1 b4 s5 F% T& |3 T/ F# G  U; p% F( g* F, j1 l$ I
本人是做消费电子的,所以在成本能节省就节省,在项目上就没有使用HAL这种很占用资源的库。在开发过程中我使用 cubeMX 配置单片机 库使用LL。我发现CubeMx 进行配置使用HAL库都没有问题,但是换成LL库之后问题就是一大堆,例如:
! C, q/ ^4 M8 Y% d1.CubeMx在初始化IO口将IO口设为输低电平,如果使用HAL库就是正常的,换成LL库之后你会发现,在初始化IO口时根本就没有实现IO设成低电平的代码。
1 Z: X% |& q9 H) u6 U, m% q2.CubeMX 在重管脚时使用HAL库在初始化时就有重映的代码,但是在LL库中就没有这一功能,需要手动加上去,但是LL库中关于重映的代码还有BUG不能用,详情看我的贴子https://www.stmcu.org.cn/module/forum/thread-618115-1-1.html2 T  j$ t: n7 `- W- h* x! x

9 ]: B- {- L! t( W" H5 s6 Z/ r5 A- X2 E: r4 a$ U

评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20 活动奖励

查看全部评分

赞 收藏 评论14 发布时间:2018-11-30 11:58

举报

14个回答
奏奏奏 回答时间:2018-11-30 12:01:45
你说具体一点哪个系列哪个型号,我有点不相信想试给你看
七哥 回答时间:2018-11-30 12:41:34
MCU型号、STM32CubeMx版本、HAL(及LL)库版本,都是什么?没有交代前提条件,直接说BUG没意义。3 \/ G- O5 _$ T- h) U6 ^7 [  P, \
我也在STM32F103、STM32L496,在STM32CubeMx 2.5之前遇到过HAL、LL库的Bug,习惯库随时更新最新版本。不过等STM32CubeMx和HAL库更新到新版本后,发现已知BUG已被ST偷偷修复。5 ]. r# u/ b8 T
lqs0905 回答时间:2018-11-30 13:35:46
本帖最后由 lqs0905 于 2018-11-30 13:36 编辑
1 p; L1 t3 Z. G6 \- r" j% Y  d3 L$ B
大家帮忙看一下,另一个不能重映射的见我另一个贴一楼有链接
' d5 y3 }+ E8 h7 |' ^# m
# R- t: H8 U& r) Y
捕获.PNG
捕获1.PNG

LED.zip

下载

1.79 KB, 下载次数: 1

lqs0905 回答时间:2018-11-30 13:42:08
我觉得像STM32这么大的团队应该是很严谨的,我发现的这两个问题也不是什么藏的很深的BUG,只要用LL生成一下工程就能试出来。我觉得很不应该
MrJiu 回答时间:2018-11-30 13:42:08
本帖最后由 MrJiu 于 2018-11-30 13:43 编辑 + L$ f! z6 Q  W2 L2 s

# ^- z1 z$ `: p& r# R  t* PHAL和LL本身都是都是对寄存器的封装,至于功能的实现,那不叫bug,那叫未实现,或者说是功能不提供!!!而且,既然是省资源,或多或少会因为架构原因,导致某些东西不能实现(仅仅只得是特殊地方,因为架构都是针对普通大众)。。。换句话说就是,hal的功能可以覆盖80%的程序需求,LL或许只能覆盖70%的需求,另外的特殊需求要自己实现。。。就拿你说的,初始化后,IO口电平不能指定,自己后面加一句话不就得了。。。至于你说的管脚重映射bug,这个要指定某个版本的某个芯片来说,因为使用IO的时候,都他妈需要重映射。。。
; O8 L5 C8 k0 w最后,我hal和ll都使用,到目前为止,我是未遇到什么bug的,要说唯一的逻辑错误,那就是adc的channe设置存在一个特殊原因导致的逻辑错误,需要自己看代码才知道原因。。至于其他bug未遇到。。。还有,多看hal和ll本身代码,很多东西看代码就知道怎么回事。。。不要动不动就搞大新闻,你看看hal和ll代码质量远高于在座的各位,自己心里要有点B数!!!
lqs0905 回答时间:2018-11-30 13:53:29
MrJiu 发表于 2018-11-30 13:42( a/ @8 n' g/ k
HAL和LL本身都是都是对寄存器的封装,至于功能的实现,那不叫bug,那叫未实现,或者说是功能不提供!!!而 ...
# m: M8 r+ t* I6 b' }1 ]8 Y6 a( N
因为我是做产品的,我一惯的思维就是我提供不了的功能,我是不出现在我的产品说明书里,退一步要留我也会说明这个功能暂未实现。我只是希望stm32给我们提供更优质的代码,没有你想的什么大新闻来华众取宠。还有重映射这个加不了几个字节的代码,你再看看LL库生成的代码 PB4   ------> TIM3_CH1 ' K7 ?/ k, ?3 ]' r
  */
, o8 q2 N- i: s" ~# {  GPIO_InitStruct.Pin = LL_GPIO_PIN_4;
9 q9 |8 k4 @" x# W  GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
& U- o5 }- V9 K0 N3 u- w  LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 这个都有你说应不应该加上重映射???
MrJiu 回答时间:2018-11-30 13:57:32
lqs0905 发表于 2018-11-30 13:53
; v! K; G' n8 Y因为我是做产品的,我一惯的思维就是我提供不了的功能,我是不出现在我的产品说明书里,退一步要留我也会 ...
9 k% G, ?' |$ q0 D  B' R' z; |+ H
都是做产品得。。。没人不是做产品得。。。虽然不知道你怎么设置得,因为我没有用F1系列得芯片,懒的去下载库文件包,但是我F0同样的初始化代码是这个样子, `- k8 H# z) w7 w! F( ~; u
GPIO_InitStruct.Pin = DP_00_Pin;- o. |( h; {0 L* M# r/ v
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;- Q3 ?9 V3 P2 \3 C
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;/ X  n$ s. l7 X: H4 I
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
9 O3 I& @5 H6 L( b' W  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
) |. B5 P& C4 u- w' v* F- ^  GPIO_InitStruct.Alternate = LL_GPIO_AF_1;  [2 P1 g/ Q4 Z% F; @& L; w
  LL_GPIO_Init(DP_00_GPIO_Port, &GPIO_InitStruct);
MrJiu 回答时间:2018-11-30 14:06:43
lqs0905 发表于 2018-11-30 13:536 c# ~# J6 T" ~9 X
因为我是做产品的,我一惯的思维就是我提供不了的功能,我是不出现在我的产品说明书里,退一步要留我也会 ...

0 P/ p+ y* Q7 o至于说明书,你还别说,还真有,很显然你没看就说别人没有。。。不要搞什么一贯思维,懒就是你的思维!!!附上说明后缀.chm去库驱动路径里面找找,绝对有这个文档!!!没怎么看代码,也没怎么看文档吧!!!人啊,还是要低调,不要搞大事情!!!
Snail_Feng 回答时间:2018-11-30 14:07:01
向来自己使用库有问题进去看下寄存器操作方式,有bug很正常,不过用过F3 L0 L1 F4 F7基本都没遇到过BUG,有小量BUg直接进去修改LL库即可都是小问题
lqs0905 回答时间:2018-11-30 15:20:41
本帖最后由 lqs0905 于 2018-11-30 15:25 编辑
( k, d% v3 X4 W# b" a; C$ O! I9 D! T9 g- e& e4 G  U9 x; {7 C% K/ v
1.就当我哔众取宠吧, {! s" S% f" }# [
2.希望我的发现对一些人有用, ]1 B6 {$ A" F7 J
3.希望STM 的LL库越来越好用
3 W$ Z* [" p, L6 w1 d; U$ v  Y4.无意冒犯请原谅
0 W3 L0 B+ O+ F5 a. F, V8 L* z! Z2 {
deyagu 回答时间:2018-11-30 16:05:45
你看的是例程吧!再说了你看了程序运行时寄存器值吗?LL库也确实有很多不完整的地方
MrJiu 回答时间:2018-11-30 16:17:16
lqs0905 发表于 2018-11-30 15:20
2 p# G2 _6 t+ r: G  r1.就当我哔众取宠吧- m+ z* R" S& D( i# \# @& K4 l6 [
2.希望我的发现对一些人有用, y) K; T* v3 w& O! }
3.希望STM 的LL库越来越好用

- E8 D; {; S5 e$ F也不要看到别人否决了,就萎下去了。。。要勇于反抗!!!拿出证据,一步一步认证举例。。。打别人得脸可是很好玩得事情,滑稽。。。问题嘛,就是在反复探讨中成长,但是,一切都有但是,作为个人,很多东西,不要动不动就说别人这不行,那不行,比如你这标题起的,官方LL库bug太多,直接就表明了LL垃圾的一逼啊,感觉就像一以前UC震惊部。。。怎么问才合适呢,比如:官方得LL库这里好像有个bug,不知各位有木有遇到。。。谦虚一点,毕竟个人再牛逼,能力都是由限的!!!
lqs0905 回答时间:2018-11-30 16:58:09
本帖最后由 lqs0905 于 2018-12-1 11:16 编辑
: P* y9 ?7 D( o2 i. s; W6 p* h% D
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct)8 }7 E; A. F; {( q% F/ h
{0 [7 x; C9 P3 M6 h+ ]
  uint32_t pinmask;
- z- h) x2 X$ M7 X0 [3 j. c  uint32_t pinpos;
  |# V' Y/ R& n- |* k2 E% B) a0 }  uint32_t currentpin;
# {: |3 K% v0 V/ u4 f0 B. ^& `
, [4 Q. d) @. ~- d+ M, A7 ~7 X. j  /* Check the parameters */6 z3 \5 _6 `4 V  ^0 ~- y& N( R; N
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));6 D/ c2 c0 \, `8 ?% ^  j' y
  assert_param(IS_LL_GPIO_PIN(GPIO_InitStruct->Pin));. h5 N+ H" Y. y  J9 ~" M5 R4 n8 k

' v( x! i' @* q5 A% R  /* ------------------------- Configure the port pins ---------------- */8 C8 i2 d* S" Y  [' W
  /* Initialize  pinpos on first pin set */0 A" G: s0 O$ ~7 _

+ B" @/ f3 B" R3 p9 o& N  pinmask = ((GPIO_InitStruct->Pin) << GPIO_PIN_MASK_POS) >> GPIO_PIN_NB;
; r& m& Y3 M( g. u  pinpos = POSITION_VAL(pinmask);
+ o: J% E* e' w6 J# e1 |2 \5 ]. L; _, e; e& g$ y( p3 G. F/ a
  /* Configure the port pins */0 Y7 c/ J4 [4 f8 s
  while ((pinmask  >> pinpos) != 0U)  B  g7 b8 z, l7 Y' _3 m
  {
6 k2 M5 H$ v$ |% O' `9 P' E6 q    /* skip if bit is not set */
3 v0 {& Z0 v+ w. x9 L* I/ P$ O    if ((pinmask & (1U << pinpos)) != 0U)
6 u  i6 o: v* v; }9 ]/ U2 B0 U  ]3 \    {
! G+ x( w4 P; f7 d6 x* H8 s- n      /* Get current io position */6 L& |1 K" W% }. J9 B4 w6 Y" L
      if (pinpos < GPIO_PIN_MASK_POS)- L. w) J  o/ k
      {
2 `5 N3 @" u) t: y1 D% f, g        currentpin = (0x00000101U << pinpos);
- Z* Z  {9 g" a$ O& K: T% _0 J      }( \9 z# s1 w/ G2 r9 f* s0 B
      else. h0 S: f# ]5 E2 s4 q7 u, x/ T
      {
8 p' r& J+ b# o$ a4 J: Y+ ~        currentpin = ((0x00010001U << (pinpos - GPIO_PIN_MASK_POS)) | 0x04000000U);0 R3 l: n) v6 d+ W) z& t
      }6 N3 t5 v8 C9 w0 ?( [

8 b0 R3 O% \7 B! h$ C! }      /* Check Pin Mode and Pin Pull parameters */( j6 _1 m6 a( d
      assert_param(IS_LL_GPIO_MODE(GPIO_InitStruct->Mode));
/ |7 D6 x, z+ j+ @4 W* G4 G      assert_param(IS_LL_GPIO_PULL(GPIO_InitStruct->Pull));
# Q% B" o* Z2 w- ]" a8 `/ s, P# y: H! j
      /* Pin Mode configuration */5 {# z# j8 c$ n
      LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
2 z; I) u: V; S
" B3 e. ?" K! R" K      /* Pull-up Pull-down resistor configuration*/! i/ X' d8 F# j0 @2 E/ _
      LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull);//这是一个BUG这一行不管设成输入输去都会执行% m, d+ \4 c" R! X
/ L/ ^/ I* G. l, H  \
      if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))# V' d$ q" @5 u
      {
6 {7 f1 k, |2 z4 g6 R        /* Check speed and Output mode parameters */
! ~2 d2 i3 S$ b& T9 ]        assert_param(IS_LL_GPIO_SPEED(GPIO_InitStruct->Speed));
+ I& l- j1 H+ \8 h        assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
) t# v6 z' s/ G( L0 N* P1 F4 |* O8 ]6 \  R8 F8 U" y; L
        /* Speed mode configuration */- k6 _0 ^& A$ U9 G$ ]
        LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
, D3 z+ @3 G; I# j( `0 I8 C8 I
6 O5 o; H0 P' E8 @& s! i3 O        /* Output mode configuration*/
& P7 u3 V& o3 E/ D* Z; w        LL_GPIO_SetPinOutputType(GPIOx, currentpin, GPIO_InitStruct->OutputType);9 m6 W4 U) H1 j' f
      }. p2 |, V+ W2 x; M* L0 |1 w; z0 I
    }7 P) J. K$ D+ n3 M
    pinpos++;1 L5 N& A* `% H
  }4 L! @  T- O: W) F. G! q
  return (SUCCESS);: l/ t# P! k3 L. b+ U4 r# l3 c
}: T. M8 N' m1 w: |+ w3 x2 f: `

2 w3 R9 z6 R- W( v3 O+ L) x9 ]& E7 q6 ~- _( E! S
7 x5 A9 C/ v4 f" C8 V4 H$ h% n

3 Z/ a8 [0 h5 M& i' H' ]
2 t- I' B' R2 _7 [$ l4 |# S1 J
Ankky 回答时间:2019-11-1 14:13:11
MrJiu 发表于 2018-11-30 13:42
+ ?7 v$ ]$ J6 G2 l5 a: SHAL和LL本身都是都是对寄存器的封装,至于功能的实现,那不叫bug,那叫未实现,或者说是功能不提供!!!而 ...
% y; Q! h. M: Z+ b
版主大人说话尖酸、刻薄,但是说的非常有道理。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版