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

STM32 维护丨 点灯 V2.1.0

[复制链接]
STMCU小助手 发布时间:2021-1-13 15:19
STM32 维护丨 点灯V2.1.0
之前的点灯最终版,最终在后续的测试中,还是发现了一些小问题。今晚就先来维护一下这个小小的LED驱动。
首先就是,之前的使能函数,有不合理的地方,我这里先贴之前的程序。
  1. <font face="微软雅黑">/** @brief        使能LED
    - h0 r, E, e3 u- q3 a
  2.   * @param[in]    Enable :使能 & N$ V  |: {" E7 H: K' p9 B
  3.   * @param[out]   无
    ( }& ~1 P; Y8 \! o  p( _8 P8 \
  4.   * @retval       无9 v9 W# e+ k& s, A6 \& B- W* J
  5.   * @note         无
    1 a' q) b) G1 n
  6.   */
    " d) s/ W& m5 S1 U( c, }, \
  7. void sLED_Enable(u8 Enable)
    / _1 X' E' p: q+ k2 \$ G9 o( f" P
  8. {# N: M* Z3 e: V9 D( f
  9.     Enable = (Enable != 0);# w  h8 f- m* {4 x
  10.     s_LED.Enable = sLed_Polar(s_LED.PolarLED , Enable);5 w' W) a* }' M" I, B2 n! Y. t
  11. }</font>
复制代码
从我们Debug的情况来看,我们只要给Enable赋值1,灯就能亮了,所以,在这个使能函数里,不需要在进行翻转,也不需要进行端口检测,直接赋值就好。修改后的程序如下
  1. <font face="微软雅黑">/** @brief        使能LED1 l2 P9 N+ e, X$ g9 V, S
  2.   * @param[in]    Enable :使能 ' [2 H) T6 D+ b+ G5 O* b; f- x
  3.   * @param[out]   无
    ' J" @% O. C% ~5 M7 y  g5 B+ _% r/ y# a
  4.   * @retval       无
    ; i" R; p: z: r9 K5 P
  5.   * @note         无# G3 J3 o. R: {' l1 }; [1 D
  6.   */- K' r! i% a* t6 y9 c2 j: P  X) [/ g
  7. void sLED_Enable(u8 Enable)
    * g- n0 E; d2 q
  8. {
      q& w6 j3 y3 q/ P! }  |% X$ n" I. }
  9.     s_LED.Enable = Enable;3 K8 H2 T9 t7 G
  10. }</font>
复制代码
对,就是这么简单。
程序嘛,都是修改出来的,都是在用的时候,不顺手了,就顺手修改一下,最后就顺手了。
在应用的过程中,我发现没有给故障码赋值的函数,我也在程序里加了这个功能。
  1. <font face="微软雅黑">/** @brief        设置LDE的故障码
    $ x( X$ W% I2 ?: o; c8 s
  2.   * @param[in]    Err   : 类型9 q5 Q$ q) q0 D! M
  3.   * @param[out]   无
    8 G( X. I9 u" u& P
  4.   * @retval       1   : 设置成功
    ( P5 @( c" f1 Y) D
  5.                   0   : 设置失败
    ) @; |4 j) J9 P
  6.   * @note         无. o- w- }. B( v0 F
  7.   */# {4 |! [8 ?: ~/ a
  8. void sLED_SetErrNum(u8 Num)7 t- R- }# b2 C. o0 l( _
  9. {
    3 k5 J! m$ M, f4 r
  10.     s_LED.Err_num = Num;
    6 G. j% F5 F9 d. d
  11. }</font>
复制代码
在应用的过程中,我还发现,赋值的函数有点多,需要每个参数都单独赋值,这么一来,程序接口的初衷就体现不出来,所以我添加了一个同时给LED所有参数赋值的函数,当然,同时也需要有读所有参数的函数。
设置所有参数。
  1. <font face="微软雅黑">/** @brief        设置LED所有参数
    + {: [& p- {' s% `
  2.   * @param[in]    led :led的参数的指针 & Y! {/ j3 X" z
  3.   * @param[out]   无
    ) w2 Z6 @9 o3 R5 i. s2 G
  4.   * @retval       无& F) }' b+ V6 {9 Q+ A$ ?& d
  5.   * @note         无
    , r. L! \9 a/ T+ R
  6.   */
    - ~* d1 L) e( Z" X( j
  7. void sLED_SetAllDat(LED_t *led)% b3 E# f0 Q/ t' F6 E* j  l
  8. {, A1 k+ [6 d( w2 V" R
  9.     s_LED = *led;   
    4 y+ }7 _  A( S. o" C6 A
  10. }</font>
复制代码
6 D9 j: g( x/ C0 U9 x9 e
读所有参数

$ {/ j4 z1 O! z, A- O
  1. <font face="微软雅黑">/** @brief        设置LED所有参数
    4 d9 {* j2 l# h/ Z$ N( R1 K# d0 S
  2.   * @param[in]    led :接收led参数的指针
    " u% c, B9 m. h9 _, t
  3.   * @param[out]   无8 e4 K; l1 k) d6 a
  4.   * @retval       无( r7 i% Y2 E0 o; c) f  |
  5.   * @note         无0 h; X5 B3 j& Q* c& W( ^
  6.   */
    ( F; I: V9 p: ?5 T8 f8 V$ s. R, \# f
  7. void sLED_ReAllDat(LED_t *led)" g9 G9 L0 t, B5 x/ r9 ]( ^0 Z
  8. {7 C7 Y8 D# a. J! S5 F5 n) ]6 W$ o3 f
  9.     *led = s_LED;   ! x5 C& F. i, p' u$ u
  10. }</font>
复制代码

/ [. w0 U+ S1 c: j
既然需要在其他文件里用到我们的结构体定义,那么我们就需要将结构体的定义放到头文件里,这样只要其他文件包含了头文件,就可以在其他文件里用我们结构体的定义来定义参数了。
现在暂时算是完成了,当然,哪天用得不顺手,也是有可能修改、维护的。如果大家懒得复制这些函数,也可以在公众号后台找我要完整的工程文件。
文章出处:  Yue無缺
, Z/ g( i( r. _6 U( m" c& ?% q/ ]7 ^
赞 收藏 评论1 发布时间:2021-1-13 15:19

举报

1个回答
zsdonline 回答时间:2021-1-14 11:26:30
学习

所属标签

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