list_device看不到看门狗

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

本帖最后由 aozima 于 2019-9-20 12:10 编辑
! Y. X- C" N. q: Z# T( o2 P( Q
  1. /** D( k7 W+ Q- J5 m% [3 `& t8 F
  2. * Copyright (c) 2006-2018, RT-Thread Development Team. _! O* {1 [# w& Z+ u  z
  3. *+ z6 M7 u: T- A* [4 O; A! X
  4. * SPDX-License-Identifier: Apache-2.0
    " U! l; t) f$ s) @( D0 w, |
  5. *
    : c9 O4 O0 v5 H, z# M- }, _, V5 V
  6. * Change Logs:! q; o" o6 S; w# ]
  7. * Date           Author       Notes
    ( g$ D5 P) c* ?: p* N, @# q
  8. * 2019-03-08     obito0   first version$ \% m: {  [0 i6 N) l
  9. */1 I( Z) b* D/ b$ O* g3 _
  10. 2 g$ B5 b" i, b5 n# n
  11. #include <rtthread.h>
    : i7 s/ S. `- P! c& J
  12. #include <rtdevice.h>7 d' K, D  `( D8 x* p
  13. #include <board.h>( e- I; _/ `  X: J

  14. 9 W' ^1 J2 w6 M8 F" z$ @0 d3 g
  15. void serial_usart1_inital(void);
    : Y- o- o6 i5 ~% c+ L# r. V
  16. /* defined the LED0 pin: PC13 */
    6 q) w6 w* I/ q) S( E
  17. #define LED0_PIN    GET_PIN(A, 8)) h7 g# T2 P/ U$ @; x7 H

  18. 6 T6 s9 j" m6 f) p. p
  19. #define IWDG_DEVICE_NAME  "wdt"% V8 P$ F1 s, W

  20. ' ~6 Y4 j7 n# w4 l! [* W( x
  21. static rt_device_t wdg_dev;/*看门狗设备句柄*/
    1 k; `( V( D4 M6 V! O

  22. , i1 H! G: u, ?" Y& W5 x3 O/ j
  23. //static rt_device_t serial; /* 串 口 设 备 句 柄 */% Y! X" o: R/ O$ C# T0 r

  24. 9 }* E3 l8 e% L; H8 F* U5 ]
  25. //char str[] = "hello RT-Thread!\r\n";
    % C# _0 f, ?6 ~

  26. 1 q$ m0 W3 y5 v0 P' k
  27. static void idle_hook(void)
    ( N; S- V% B( J0 q9 k
  28. {
    2 Q" @) W' V2 t- R9 J
  29.     rt_device_control(wdg_dev,RT_DEVICE_CTRL_WDT_KEEPALIVE,NULL);
    ! G7 k6 k# h( b# F4 t- c+ i7 i
  30. - a! s6 |" @5 v7 x$ q7 z% P. x
  31.     rt_kprintf("feed the dog\n");% J" h% {7 `. u1 R# u0 |
  32. }' |3 p4 l8 Q1 f* H4 ?* v; c" Y
  33. int main(void)( ?- r% L1 @( J8 G; U0 b" A% [
  34. {
    ; S+ z% J, S) w' U* K! p
  35.     int count = 1;        4 h" p& y  t$ {5 E
  36.     /* set LED0 pin mode to output */
    ! S4 g7 |! Z/ Y, R* G3 U4 `" c: e( Y
  37.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);; _2 d( H3 W3 z, F. u
  38. * b: ]7 j" |9 \
  39.     while (count++)
    1 S/ B( y* Y0 e% z/ w5 F
  40.     {& @3 M- }' G9 @% [0 [
  41.         rt_pin_write(LED0_PIN, PIN_HIGH);
    2 r/ ^% N6 M1 b+ I# ~" h5 r
  42.         rt_thread_mdelay(500);- S+ {2 K; A1 p2 d; l3 r+ q& v2 a
  43.         rt_pin_write(LED0_PIN, PIN_LOW);; ]1 l; ]  F( e. q2 m, b
  44.         rt_thread_mdelay(500);
    7 X" |- H- p% g0 ]8 m2 I, N
  45.     }
    2 k. R' Z0 f! _- ~9 t

  46. ; t/ P3 I3 s" `6 v* m/ d
  47. }' _. u1 Y4 n# Y

  48. 7 `& J0 X; ~2 j) R# t
  49. static int iwdg_sample(int argc,char *argv[])
    , C. K4 M) ?; e: E+ ^/ ^8 f
  50. {
    $ _3 X4 `, Q7 m" w2 V# v1 a% M8 j
  51.      rt_err_t result = RT_EOK;
    . q; E$ c' ]5 K, i, ?0 U6 G* q
  52.      rt_uint32_t timeout = 30;    /* 超时时间为1000ms*/7 {0 u& ?- ]1 N/ [( A, i. C
  53.      char device_name[RT_NAME_MAX];
    ! ~3 D$ `- e4 s' [& }2 K. L* d
  54. + a+ ?: o5 A* ]# O" p1 `4 K
  55.      /* 判断命令行参数是否给定了设备名称 */
    ) j( J. L# ~4 W. y0 ~! F- j
  56.      if (argc == 2). Y- a( S8 z& e# E
  57.      {
    $ y  P/ f& \' R5 o  b9 ?
  58.          rt_strncpy(device_name, argv[1], RT_NAME_MAX);, j6 N' f/ E6 U5 G1 D' |' U
  59.      }
    0 w# `  l( z" o1 \3 B! p2 R
  60.      else
    : l, h- R( O& P/ Z) d0 ?
  61.      {: b7 l' A7 c  X& `& ^; E: w
  62.          rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);
    3 Y" y/ }+ _: U! X8 C
  63.      }! ^0 Q1 Q- @* ]$ h, E
  64.      /* 根据设备名称查找看门狗设备,获取设备句柄 */0 W7 a" K) B+ y! x
  65.                  result = rt_hw_watchdog_register((rt_watchdog_t *)wdg_dev,device_name, RT_DEVICE_FLAG_RDWR,NULL);. l% _9 D& a; Y" Y" O
  66.      wdg_dev = rt_device_find(device_name);
    ' _  `+ ?2 J4 I4 q/ Y! A1 T* e
  67.      if (!wdg_dev)
    : ]7 x9 J' |: t1 l  t
  68.      {
    # J# A7 ~# t" M2 l. Y+ a+ @
  69.          rt_kprintf("find %s failed!\n",device_name);& J) ~* c1 O# A. x0 @4 G% L0 V3 W. ^
  70.          return RT_ERROR;
    2 W* R* b1 W4 _8 G6 r+ V4 h4 v( U, O
  71.      }# k/ ]7 j8 h( ~8 R4 O
  72.      /* 初始化设备 */
    0 R, S9 k5 C" U
  73.      result = rt_device_init(wdg_dev);* p( M6 j  R6 T' `4 A' t4 d- }
  74.      if (result != RT_EOK)
    8 R' R) P! P# V  W! m/ l
  75.      {+ R6 N- ?3 u' h' a6 s
  76.          rt_kprintf("initialize %s failed!\n",device_name);
    ; {' j: b+ h7 a* _0 o
  77.          return RT_ERROR;
    4 y' r5 f5 g( ^5 I* Q: D% B
  78.      }
    8 v$ c( y6 N: ^0 r' ^4 P; O
  79.      /* 设置看门狗溢出时间 */( `- W% x0 _5 O) r) l8 g+ y
  80.      result = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, (void*)timeout);0 A3 s; T, C: T2 h- x) S1 W7 F3 n
  81.      if (result != RT_EOK)9 S0 }0 r" c$ _* X% @
  82.      {) B& m$ [1 S4 u8 r! r1 i
  83.          rt_kprintf("set %s timeout failed!\n",device_name);
    * x8 b' o: z$ k+ S( Y7 R& q
  84.          return RT_ERROR;' N. C/ l3 F! x6 @) B$ @$ f% X! ?2 H
  85.      }
    ( {1 Q  I* W" r
  86.      /* 设置空闲线程回调函数 */! Q/ J, s5 A: t0 M) y! d
  87.      rt_thread_idle_sethook(idle_hook);' g: E& o* G' h  C. P" V! D8 b

  88. , R2 O- b( x5 q) [$ `
  89.      return result;: }6 H9 b# F% U
  90. }4 z$ B& O: `$ p
  91. /* 导出到 msh 命令列表中 */
    : j/ L4 e- Z. `# ~" W
  92. MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
    . @0 \4 F' {! n" y7 ?

  93. ' J2 ?8 A; `! m. B- m8 N
  94. #if 0
    % Z3 r: ^+ _( p  r5 F: T
  95. void serial_usart1_inital(void)
    5 E! @( ~" R1 Q
  96. {& d8 Q1 |3 m5 R$ S* O, [
  97. #define SAMPLE_UART_NAME "uart1" /* 串 口 设 备 名 称 */! Y' @8 w2 o# R" [* M
  98.     struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 配 置 参 数 */
    2 r6 B. j4 p  D7 \
  99.     serial = rt_device_find(SAMPLE_UART_NAME);/* 查 找 串 口 设 备 */" V$ Q. q0 b1 L! h. K  k
  100.     rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);/* 以 中 断 接 收 及 轮 询 发 送 模 式 打 开 串 口 设 备 */
    1 M/ K7 r  l, d$ J# b+ Q
  101.     config.baud_rate = BAUD_RATE_9600;- r1 Q8 A( h9 r
  102.     config.data_bits = DATA_BITS_8;
    5 p* _, K: o; B& T! _
  103.     config.stop_bits = STOP_BITS_2;
    + d; `* V7 i! @- p7 y. V/ }
  104.     config.parity = PARITY_NONE;
    ! F* O; S+ q* Z
  105.     rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);0 Q, d1 c, e6 @0 K; S- [
  106. }
    9 V0 X- y0 h8 `; R
  107. #endif6 j" B! G3 O- l5 w6 q% `

  108. + d+ H. m. q8 F* q  M
  109. #if 08 X/ }8 I; T! x- a
  110. static int rt_hw_spi_flash_init(void)
      N: I/ ~. H, n! y) S& w3 F& H
  111. {
    7 g. q- b* D1 B  @* l
  112.     __HAL_RCC_GPIOB_CLK_ENABLE();; w: W: T& r4 t* s! m( e+ Q2 h) W9 t
  113.     rt_hw_spi_device_attach("spi1","spi10", GPIOB, GPIO_PIN_14);
    / L/ G( }* H& V0 B; J6 _# D+ I  \
  114.     return RT_EOK;
    : C, u+ l: p8 }/ D; K2 J7 T: B
  115. }
    , s" R' V% A# m1 v( x- r. s0 |+ |2 }
  116. /* 导 出 到 自 动 初 始 化 */
    " P) C/ v. y) ^
  117. INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);+ Y4 \/ f$ Q" ~$ t8 w# J/ n
  118. #endif
复制代码
# S! M$ b7 m4 A8 }1 h
& t5 k. M' @6 z& w. R, X/ _0 u* Q1 `$ ~

2 E! d+ s! y. y% x) n: J) J7 `4 t帮忙看看怎么把看门狗 搞起来& V# O" a. S) f
# L& o/ ~  e4 [. }- b0 j$ ?( ~, S
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-12 14:21:35 | 显示全部楼层
Snipaste_2019-09-12_14-20-53.png
6 v! @+ f3 w# B" Q: z0 H/ t' D1 H4 E/ c# ~2 w; J
如上图,你的看门狗打开了吗
- H( J+ N6 M2 C8 w+ z
使用道具 举报 回复
发表于 2019-9-12 14:32:18 | 显示全部楼层
开了这个
' _9 M' }. U  A0 u0 P  N$ }
watchdog_menuconfig.PNG
使用道具 举报 回复
发表于 2019-9-12 14:51:08 | 显示全部楼层
xiaosa 发表于 2019-9-12 14:32) W$ c5 y& A) y/ B. a8 W
开了这个
1 t% ]8 |* R' a& m
你打开的这个只是框架,没有驱动的,得把驱动打开才行
使用道具 举报 回复
发表于 2019-9-12 15:13:51 | 显示全部楼层
只有这个,没有watchdog timer0 ~. A% {& {8 y4 q7 @; L
没有watchdog_timer.PNG
使用道具 举报 回复
发表于 2019-9-12 15:29:00 | 显示全部楼层
本帖最后由 xiaosa 于 2019-9-12 15:32 编辑 % r. {# g" W& d0 S5 V
$ \' \, _4 j! Q, P1 B* D( ^0 p
屏蔽了注册的函数  find这里出错   注册的这个应该也有问题7 m7 {' I6 o$ x% @" E1 j
找不到看门狗.PNG
使用道具 举报 回复
发表于 2019-9-12 16:01:57 | 显示全部楼层
上面只是定义了使用驱动,还需要需要定义 BSP_USING_WDT,具体需要什么定义可以在 bsp/stm32/libraries/HAL_Drivers/SConscript 看到,例如看门狗的是:
# U. [4 M+ ?7 t% `  L, M& F2 g        + p: G- E8 d- D9 M* D
  1.         & \8 o4 g3 M( R" J6 J
  2. if GetDepend(['BSP_USING_WDT']):5 i( i) \4 {: L- `
  3.     src += ['drv_wdt.c']
    6 M& g5 Q, X0 ]3 O) f( f
复制代码

& i1 V; w9 o* Q: M" \, m% g* X& R4 S2 `5 L
如果 menuconfig 没有这个选项可以手动修改 board/Kconfig 加上,或者直接在 rtconfig.h 里面添加 #define 也是一样的
使用道具 举报 回复
发表于 2019-9-12 16:03:49 | 显示全部楼层
需要自己添加一个:可以照抄模板中的看门狗部分到你board文件夹下的Kconfig中。模板路径: rt-thread\bsp\stm32\libraries\templates\stm32xx_board_Kconfig,
- {* W, F5 Z1 @. a6 H: x
  r% N8 d4 F& ^9 J9 R  x: _6 g8 c& @: E0 {/ J; @
2 y9 B; n* m! t6 L) d, Z
: _0 P1 Q" i6 W' a% c; x& G. A1 r% h, ~
1568275362(1).jpg
使用道具 举报 回复
发表于 2019-9-20 12:01:15 | 显示全部楼层
能看到设备,但是运行的时候还是find dwt failed
not_find.PNG
使用道具 举报 回复
发表于 2019-9-20 12:11:26 | 显示全部楼层
dwt != wdt
$ h% c6 N8 S2 M" P, w0 i- p8 f) N0 [看下代码是否有误
1 y. z" ]7 |4 r$ r+ X% ]4 r
使用道具 举报 回复
发表于 2019-9-20 12:16:20 | 显示全部楼层
你 说对了 我写错了
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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