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

STM32 维护丨 点灯 V2.1.0

[复制链接]
STMCU小助手 发布时间:2021-1-15 15:01
STM32 维护丨 点灯V2.1.0
之前的点灯最终版,最终在后续的测试中,还是发现了一些小问题。今晚就先来维护一下这个小小的LED驱动。
首先就是,之前的使能函数,有不合理的地方,我这里先贴之前的程序。
  1. /** @brief        使能LED8 x+ b6 h, J) [( F; _; T) x
  2.   * @param[in]    Enable :使能
    ' {5 X; B$ X. z
  3.   * @param[out]   无
    / u$ ^, K. o+ N
  4.   * @retval       无
    & W% l  V5 i3 q( |: q6 L6 z
  5.   * @note         无) M& Q2 _# Q1 z! B
  6.   */" U/ h+ v; K6 w2 ^2 L% S" l
  7. void sLED_Enable(u8 Enable)( x. H" I9 D6 C) m4 W$ J/ E6 G
  8. {( E% z) L/ Q9 O: Q8 K
  9.     Enable = (Enable != 0);; ?5 `. ~3 t; I
  10.     s_LED.Enable = sLed_Polar(s_LED.PolarLED , Enable);1 }4 `' K* a) v& z8 }8 a
  11. }
复制代码
, E( }+ z3 r0 Z& J! g4 T2 Z; P
从我们Debug的情况来看,我们只要给Enable赋值1,灯就能亮了,所以,在这个使能函数里,不需要在进行翻转,也不需要进行端口检测,直接赋值就好。修改后的程序如下
  1. /** @brief        使能LED0 s7 c0 ]* t& H
  2.   * @param[in]    Enable :使能 ) E" x. [% Q8 y4 J
  3.   * @param[out]   无
    ' j. K6 ^' O2 D& j) V
  4.   * @retval       无' y& }* s3 K  b. \
  5.   * @note         无0 y5 E" y" w1 Z
  6.   */* e4 b/ `7 h1 }
  7. void sLED_Enable(u8 Enable)0 ]' ?9 _( z  m: U, o
  8. {
    & }+ k3 ^( B; g' |) u
  9.     s_LED.Enable = Enable;
    $ s+ p1 E( W( b: R( m7 M- }
  10. }
复制代码

6 v7 g% y& l3 y( R4 P% H, O
对,就是这么简单。
程序嘛,都是修改出来的,都是在用的时候,不顺手了,就顺手修改一下,最后就顺手了。
在应用的过程中,我发现没有给故障码赋值的函数,我也在程序里加了这个功能。
  1. /** @brief        设置LDE的故障码( |3 H! u' U9 {' @6 D; w! P
  2.   * @param[in]    Err   : 类型
    * K- V9 l8 [- U: v# n0 G2 g
  3.   * @param[out]   无
    " W4 I6 X* w/ m  w! o0 f* E
  4.   * @retval       1   : 设置成功
    . U' @" `; o. N( m
  5.                   0   : 设置失败; [6 h/ [; p5 O/ J
  6.   * @note         无! f2 X" U7 [$ q5 N. K+ j
  7.   */  V% i5 A# l* U4 C
  8. void sLED_SetErrNum(u8 Num)+ @/ P# Z- t- w0 v! h
  9. {: y: I6 O% d" d1 V  t, ?
  10.     s_LED.Err_num = Num;
    + a+ u# q& @, x- d
  11. }
复制代码

" t0 K( k: L+ @! x& g( a- d
在应用的过程中,我还发现,赋值的函数有点多,需要每个参数都单独赋值,这么一来,程序接口的初衷就体现不出来,所以我添加了一个同时给LED所有参数赋值的函数,当然,同时也需要有读所有参数的函数。
设置所有参数。
  1. /** @brief        设置LED所有参数
    5 j* m/ k  N+ p( h% J6 }- b) A
  2.   * @param[in]    led :led的参数的指针
    $ E! C- V, U; r5 i
  3.   * @param[out]   无, `5 d7 T+ x9 g
  4.   * @retval       无
    $ X5 |' [0 N6 c
  5.   * @note         无
    / S2 b1 o) v4 P. |
  6.   */5 p8 X) b/ w# O2 `$ O0 L% _
  7. void sLED_SetAllDat(LED_t *led)
    / t1 B3 J) i! Q. s# y; x
  8. {" I; ]4 P" B+ Z/ @  F
  9.     s_LED = *led;   
    1 S$ }" T% B# r- Y- J
  10. }
复制代码
( f6 f4 s2 Q8 m! A
读所有参数
  1. /** @brief        设置LED所有参数2 M; ?% L: Z8 Z7 s# E
  2.   * @param[in]    led :接收led参数的指针 ) Y+ d: a; A3 m2 ]+ S
  3.   * @param[out]   无
    5 t8 C7 E  c& D+ J
  4.   * @retval       无  a! t8 P+ u3 h+ A
  5.   * @note         无
    7 E+ R) n1 T9 z9 \6 T4 x
  6.   */
    6 [" p8 a2 m8 @- q6 ^9 `. p
  7. void sLED_ReAllDat(LED_t *led)
    4 p6 V. k% h* T2 B+ q
  8. {
      e* e( C2 q% @2 j( u
  9.     *led = s_LED;   , c, P0 ]$ x9 I9 T( z7 a/ N  H
  10. }) U6 M5 M4 ]( [& c
复制代码

/ c6 }; O& q6 ]% D- X+ i0 N' h
既然需要在其他文件里用到我们的结构体定义,那么我们就需要将结构体的定义放到头文件里,这样只要其他文件包含了头文件,就可以在其他文件里用我们结构体的定义来定义参数了。
现在暂时算是完成了,当然,哪天用得不顺手,也是有可能修改、维护的。
文章出处: Yue無缺
. p5 D( W( ^! }
赞 收藏 评论0 发布时间:2021-1-15 15:01

举报

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