list_device看不到看门狗

2019-9-12 13:55 [复制链接] 10 486

本帖最后由 aozima 于 2019-9-20 12:10 编辑
6 m# ~0 ?: V: y" k! m4 g6 u
  1. /*' J* T- L+ m2 m. X4 f% D4 I
  2. * Copyright (c) 2006-2018, RT-Thread Development Team% U4 y: F# H. s+ {; G
  3. *; |. \. h4 R; l; F  N2 z3 Q! e
  4. * SPDX-License-Identifier: Apache-2.0- {, \/ g- s8 `! V5 w, H# a
  5. *
    2 K3 w7 b5 S* t/ P& C
  6. * Change Logs:; b9 z! ~6 {& R  ^
  7. * Date           Author       Notes8 J0 C3 i: M9 C9 }; r( d
  8. * 2019-03-08     obito0   first version; W& ]! a# \0 l* ]8 t: S; x
  9. */
    / x* Z$ p" S% ^8 _8 Q$ v2 f; Y
  10. , N5 W+ `5 k6 D6 l: G  z! w* o
  11. #include <rtthread.h>$ i  y6 p# Q. R  V' G
  12. #include <rtdevice.h>
    ; b/ L3 B/ M) Y4 s) a7 g
  13. #include <board.h>
    & d: J& P% {) D3 t& a+ m

  14. 9 D% A5 U! F0 ]$ g4 [! L  Y* K
  15. void serial_usart1_inital(void);
    6 ]' k( r/ C( G* J4 e) n1 _/ @& P
  16. /* defined the LED0 pin: PC13 */
    % }+ H) I, b& C; c, B5 E
  17. #define LED0_PIN    GET_PIN(A, 8)+ y9 W) e- y8 k2 n. a9 ~8 K9 `

  18. % T1 @! h( r% w+ G' [% v5 M4 p' q
  19. #define IWDG_DEVICE_NAME  "wdt"
    ; p3 Q8 K* Z/ r1 U' {( d! k

  20. ) I/ J& D9 E9 [: c/ W3 }  T& P
  21. static rt_device_t wdg_dev;/*看门狗设备句柄*/
    7 v0 g) k+ w8 P1 ?3 _
  22. & L) W# B0 K% E) L
  23. //static rt_device_t serial; /* 串 口 设 备 句 柄 */6 S$ \# x/ \) l+ N

  24. 8 X& x  z  [# ~+ c( ]
  25. //char str[] = "hello RT-Thread!\r\n";$ a, l4 g- G; }9 c4 D
  26. + z( ]3 z4 e8 c
  27. static void idle_hook(void)
    9 ?9 }8 `' x7 W( F6 I) m7 {
  28. {
    - D+ A4 U4 y$ c* u* J: w
  29.     rt_device_control(wdg_dev,RT_DEVICE_CTRL_WDT_KEEPALIVE,NULL);" `9 j$ e( a2 C- V

  30. - Z; y0 h4 L, M7 y% c
  31.     rt_kprintf("feed the dog\n");  S7 P/ P' A- L* V" _% F2 L+ l
  32. }
    * S& T0 @9 D: H. R1 b- ~
  33. int main(void)
      E1 w2 D! r, c( u5 `% Q
  34. {
    / r3 B# e8 K8 {
  35.     int count = 1;        
    " u9 U7 G1 Q/ v2 T  ]+ H  y
  36.     /* set LED0 pin mode to output */- z3 u$ P% h8 D; h6 [
  37.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);& G, G& X# ?* a  K8 S3 E6 R% z

  38. ' O  ?- `) w. r& l
  39.     while (count++)$ a6 H  B( G" P2 T  t9 e' r
  40.     {; {) d% C# ], @  c2 a
  41.         rt_pin_write(LED0_PIN, PIN_HIGH);
    $ J+ D( s. c5 _, E
  42.         rt_thread_mdelay(500);% [& Y/ G/ c& A3 W4 i
  43.         rt_pin_write(LED0_PIN, PIN_LOW);
    " Y( J8 p, H! D2 @# R
  44.         rt_thread_mdelay(500);
    ) A  U* E4 D7 P) \4 a8 S. ?
  45.     }2 x3 l6 X) r3 I3 Y

  46. . y- n# O6 Q, ^0 V4 j
  47. }
    7 G9 z4 Z1 j' [* A3 K+ Q* Z9 Y, s
  48. % y. j: {7 N" I% Y, t: S" A
  49. static int iwdg_sample(int argc,char *argv[])
    7 W  n4 K0 h# m; d- F3 N
  50. {+ c2 h" M6 e$ b
  51.      rt_err_t result = RT_EOK;
    8 f  G' R/ E: {  R  R
  52.      rt_uint32_t timeout = 30;    /* 超时时间为1000ms*/+ }8 Q5 A/ D4 |4 d$ {
  53.      char device_name[RT_NAME_MAX];
    ( F" j, S  {  t4 g8 f! \- @

  54.   \+ u, p0 |" w2 G2 @7 \
  55.      /* 判断命令行参数是否给定了设备名称 */4 @1 @$ P9 L5 X  b& M3 p, g+ ~
  56.      if (argc == 2)
    8 |3 n5 H1 {9 W, L, O, p1 P
  57.      {
    / Z4 T9 O, I% z, U0 B
  58.          rt_strncpy(device_name, argv[1], RT_NAME_MAX);. Z+ }" G$ \2 o; m; T4 j- ^" _
  59.      }: S- j. g, Z; S* \- C
  60.      else
    3 X1 B/ [+ X' P( J
  61.      {
    " I) |7 \) x3 B* X2 B1 z
  62.          rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);( N$ ^4 z9 m9 \$ X4 @* b! V
  63.      }, G8 K+ I, Y3 N
  64.      /* 根据设备名称查找看门狗设备,获取设备句柄 */5 v! a7 O& S/ W# F  x
  65.                  result = rt_hw_watchdog_register((rt_watchdog_t *)wdg_dev,device_name, RT_DEVICE_FLAG_RDWR,NULL);
    & S; Z# ^0 ?- ^1 h
  66.      wdg_dev = rt_device_find(device_name);: C% f; X" v/ y
  67.      if (!wdg_dev)* S$ _# C* ]; \. A5 I/ A: q
  68.      {
    : `9 L  g& r8 R2 i
  69.          rt_kprintf("find %s failed!\n",device_name);, G6 I9 p4 M3 D: C# s
  70.          return RT_ERROR;+ y# }1 j- X9 y0 N4 n2 y- D2 X. J
  71.      }3 K* a- K  B6 D7 c' v/ C) g# \
  72.      /* 初始化设备 */
    ) z  i5 _/ m  o
  73.      result = rt_device_init(wdg_dev);8 d( Y" n) _6 p+ }# e0 T1 E
  74.      if (result != RT_EOK)7 [. p  B  D& [9 @7 P. J: C' Y
  75.      {1 E9 o6 [9 s2 P% N. Y
  76.          rt_kprintf("initialize %s failed!\n",device_name);' c. h9 W: E+ {2 a& _
  77.          return RT_ERROR;
    $ w/ d4 z5 k7 D0 {" G. k" N- |* T
  78.      }
    ( {' l  K% T0 r- F' w/ f
  79.      /* 设置看门狗溢出时间 */+ v6 M5 z" q0 ~* k
  80.      result = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, (void*)timeout);6 h, \* q, g( O% N% b, Z9 e, o4 l
  81.      if (result != RT_EOK)
    5 p; D+ k1 F1 D, w
  82.      {. C# u1 [' t$ o" H
  83.          rt_kprintf("set %s timeout failed!\n",device_name);( {  c' O( L5 ~0 \* ~4 ]0 U( n& i
  84.          return RT_ERROR;
    ; ]' x  B# W& ^, o% H
  85.      }) x1 g$ D2 Z. _8 i* N
  86.      /* 设置空闲线程回调函数 */& j2 w' b, f: J: K" X
  87.      rt_thread_idle_sethook(idle_hook);% s, ^" ~. t. J& L
  88. + J9 _8 S# V5 b* n5 D9 `, u' V
  89.      return result;
      Q4 g6 K' t" y1 z3 k+ }
  90. }
    % A( d+ ?9 C4 g# l* K, F6 K
  91. /* 导出到 msh 命令列表中 */9 q& E* P) k0 Q$ C$ e
  92. MSH_CMD_EXPORT(iwdg_sample, iwdg sample);/ z0 o$ a% [' E. X- p# e& `
  93. ; {8 ?' S, t# R" w  ?( D* }+ D
  94. #if 0
      i; y4 o8 V  {0 G0 c1 b
  95. void serial_usart1_inital(void)# x1 m: h% s0 Z
  96. {
    ' j7 ~2 d6 \0 y7 j9 b4 x+ U' m; m
  97. #define SAMPLE_UART_NAME "uart1" /* 串 口 设 备 名 称 */2 G8 o3 b- P5 g$ L/ Y* ]' X1 v
  98.     struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 配 置 参 数 */
    ! h8 i$ p# Q, b* |
  99.     serial = rt_device_find(SAMPLE_UART_NAME);/* 查 找 串 口 设 备 */% i* \# K# j- Q! P; F4 ^! R
  100.     rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);/* 以 中 断 接 收 及 轮 询 发 送 模 式 打 开 串 口 设 备 */
    - c3 v- }' g+ H1 F$ l) ?9 s8 t
  101.     config.baud_rate = BAUD_RATE_9600;
    6 j2 ^# F. u/ X2 L0 ~
  102.     config.data_bits = DATA_BITS_8;. B. {7 I+ v, Z$ a" j6 f6 d
  103.     config.stop_bits = STOP_BITS_2;" s- O. j6 B0 t. C; w: B9 V' a7 P# R
  104.     config.parity = PARITY_NONE;
    1 F" a+ Z  T; t' L4 j& y0 ?0 L
  105.     rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);( c  O/ j7 w$ ]- x% S$ k
  106. }
    $ Z: E. p. k' x7 x1 n
  107. #endif; @- ]8 t; @; r: s

  108. 4 R# P- {  H9 Y' m$ w( a
  109. #if 0
    , f0 W% {6 u+ R8 S% z
  110. static int rt_hw_spi_flash_init(void)
    5 `  ]3 Y: e; z  ~8 V
  111. {
    1 q7 y. |  I+ n% g  A+ ]$ v
  112.     __HAL_RCC_GPIOB_CLK_ENABLE();6 J3 Z' f# ]5 b
  113.     rt_hw_spi_device_attach("spi1","spi10", GPIOB, GPIO_PIN_14);
    6 R3 d1 m0 j9 a; G8 N' z
  114.     return RT_EOK;5 F+ L( ]4 r0 `0 Q1 |# c  v1 v
  115. }6 F& T2 Y4 Q# f2 H9 F: ]3 `% G1 j
  116. /* 导 出 到 自 动 初 始 化 */
    & d# j' n4 }  _* X+ E. R$ N, `
  117. INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
    . ?/ O9 n# u2 ~
  118. #endif
复制代码
2 f+ m7 l# \; t9 ?- O2 M

: E: ?1 D" Z0 Q5 p2 s# Q& C
, L8 Y& t) x5 h8 o! Q帮忙看看怎么把看门狗 搞起来+ w4 v" z) b. y  G, `- u' v0 S- ~

3 E) [# R9 a- q7 P2 {" }% U
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-12 14:21:35 | 显示全部楼层
Snipaste_2019-09-12_14-20-53.png
4 L( T/ s  Z  n$ Y% j' D. G, E$ I- k, B
如上图,你的看门狗打开了吗- K$ p+ A+ e4 m8 ?, k' y5 K; G
使用道具 举报 回复
发表于 2019-9-12 14:32:18 | 显示全部楼层
开了这个% i( l- t# g$ N0 `- A, F2 ]
watchdog_menuconfig.PNG
使用道具 举报 回复
发表于 2019-9-12 14:51:08 | 显示全部楼层
xiaosa 发表于 2019-9-12 14:32, }" L7 q- j2 k2 G8 M8 `3 t
开了这个

8 @) c( w, ^, ^你打开的这个只是框架,没有驱动的,得把驱动打开才行
使用道具 举报 回复
发表于 2019-9-12 15:13:51 | 显示全部楼层
只有这个,没有watchdog timer
0 i# N' q1 L( l. m5 }( ?! n5 J
没有watchdog_timer.PNG
使用道具 举报 回复
发表于 2019-9-12 15:29:00 | 显示全部楼层
本帖最后由 xiaosa 于 2019-9-12 15:32 编辑
* G  M, U" c6 Q8 L1 h, h
2 p2 Z% k: w+ h& n5 G9 a4 R  T% d屏蔽了注册的函数  find这里出错   注册的这个应该也有问题- [+ _4 Q! U) I. w8 I% S
找不到看门狗.PNG
使用道具 举报 回复
发表于 2019-9-12 16:01:57 | 显示全部楼层
上面只是定义了使用驱动,还需要需要定义 BSP_USING_WDT,具体需要什么定义可以在 bsp/stm32/libraries/HAL_Drivers/SConscript 看到,例如看门狗的是:8 k0 ?8 f& Z8 k! q$ m
        
! e' z! _4 K' t/ I% z
  1.         
    4 h7 R# k5 j& O$ D
  2. if GetDepend(['BSP_USING_WDT']):' \( I* z( s2 [5 l) r+ X( S: P+ S
  3.     src += ['drv_wdt.c']3 A4 C7 `( ?. k% d! O
复制代码
; ]& ]- R3 I' V
' G, x4 v, a7 G* s/ W3 V
如果 menuconfig 没有这个选项可以手动修改 board/Kconfig 加上,或者直接在 rtconfig.h 里面添加 #define 也是一样的
使用道具 举报 回复
发表于 2019-9-12 16:03:49 | 显示全部楼层
需要自己添加一个:可以照抄模板中的看门狗部分到你board文件夹下的Kconfig中。模板路径: rt-thread\bsp\stm32\libraries\templates\stm32xx_board_Kconfig,
# V) F' ?+ ?! W) i$ S+ ]( S! L$ A& ], S/ w; `0 U! z2 r
7 a- T$ O( B9 I$ d

0 J- U4 u. o; |9 Z( A3 K- W" G6 q9 N" {
1568275362(1).jpg
使用道具 举报 回复
发表于 2019-9-20 12:01:15 | 显示全部楼层
能看到设备,但是运行的时候还是find dwt failed
not_find.PNG
使用道具 举报 回复
发表于 2019-9-20 12:11:26 | 显示全部楼层
dwt != wdt; N( o! x9 p7 K" B  T$ E$ F
看下代码是否有误5 a$ D* }0 r8 F: h# Y0 \
使用道具 举报 回复
发表于 2019-9-20 12:16:20 | 显示全部楼层
你 说对了 我写错了
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 4 主题
  2. 76 帖子
  3. 76 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表