Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | - | - | ||||
BUILD.gn | D | 12-May-2024 | 1.2 KiB | 32 | 28 | |
README_zh.md | D | 12-May-2024 | 5.4 KiB | 248 | 178 | |
hdf_watchdog_test.c | D | 12-May-2024 | 3.4 KiB | 118 | 86 |
README_zh.md
1# Niobe407开发板OpenHarmony基于HDF驱动框架编程开发——Watchdog 2本示例将演示如何在Niobe407开发板上通过HDF驱动框架使用看门狗。 3 4## 接口说明 5 6### WatchdogOpen() 7 8``` 9int32_t WatchdogOpen(int16_t wdtId, DevHandle *handle) 10``` 11 12**描述:** 13 14watchdog Open打开看门狗函数。 15 16**参数:** 17 18| 名字 | 描述 | 19| :----- | :------- | 20| wdtId | 看门狗ID | 21| handle | 设备句柄 | 22 23### WatchdogClose() 24 25``` 26void WatchdogClose(DevHandle handle) 27``` 28 29**描述:** 30 31watchdog close关闭看门狗函数。 32 33**参数:** 34 35| 名字 | 描述 | 36| :----- | :------- | 37| handle | 设备句柄 | 38 39### WatchdogFeed() 40 41``` 42int32_t WatchdogFeed(DevHandle handle) 43``` 44 45**描述:** 46 47watchdog feed喂狗函数。 48 49**参数:** 50 51| 名字 | 描述 | 52| :----- | :------- | 53| handle | 设备句柄 | 54 55### WatchdogGetStatus() 56 57``` 58int32_t WatchdogGetStatus(DevHandle handle, int32_t *status) 59``` 60 61**描述:** 62 63watchdog getStatus获取看门狗状态函数。 64 65**参数:** 66 67| 名字 | 描述 | 68| :----- | :------------- | 69| handle | 设备句柄 | 70| status | 看门狗状态指针 | 71 72### WatchdogStart() 73 74``` 75int32_t WatchdogStart(DevHandle handle) 76``` 77 78**描述:** 79 80watchdog start启动看门狗函数。 81 82**参数:** 83 84| 名字 | 描述 | 85| :----- | :------- | 86| handle | 设备句柄 | 87 88### watchdogStop() 89 90``` 91int32_t WatchdogStop(DevHandle handle) 92``` 93 94**描述:** 95 96watchdog stop停止看门狗函数。 97 98**参数:** 99 100| 名字 | 描述 | 101| :----- | :------- | 102| handle | 设备句柄 | 103 104### WatchdogSetTimeout() 105 106``` 107int32_t WatchdogSetTimeout(DevHandle handle, uint32_t seconds) 108``` 109 110**描述:** 111 112watchdog setTimeout设置看门狗超时时间函数。 113 114**参数:** 115 116| 名字 | 描述 | 117| :------ | :------- | 118| handle | 设备句柄 | 119| seconds | 超时时间 | 120 121### WatchdogGetTimeout() 122 123``` 124int32_t WatchdogGetTimeout(DevHandle handle, uint32_t *seconds) 125``` 126 127**描述:** 128 129watchdog getTimeout获取看门狗超时时间函数。 130 131**参数:** 132 133| 名字 | 描述 | 134| :------ | :--------------------- | 135| handle | 设备句柄 | 136| seconds | 超时时间指针,单位为秒 | 137 138 139## 编译调试 140- 进入//kernel/liteos_m目录, 在menuconfig配置中进入如下选项: 141 142 `(Top) → Platform → Board Selection → select board niobe407 → use talkweb niobe407 application → niobe407 application choose` 143 144- 选择 `205_hdf_watchdog` 145 146- 在menuconfig的`(Top) → Driver`选项中使能如下配置: 147 148``` 149 [*] Enable Driver 150 [*] HDF driver framework support 151 [*] Enable HDF platform driver 152 [*] Enable HDF platform watchdog driver 153``` 154- 回到sdk根目录,执行`hb build -f`脚本进行编译。 155 156## 运行结果 157 158示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手可查看到如下日志: 159``` 160[HDF:E/HDF_LOG_TAG]HdfWatchdogTestEntry ---------- 161 162[HDF:E/HDF_LOG_TAG]WatchdogGetStatus: 0 163 164[HDF:E/HDF_LOG_TAG]WatchdogGetTimeout: 500 165 166[HDF:E/HDF_LOG_TAG]WatchdogSetTimeout: 1200 167 168[HDF:E/HDF_LOG_TAG]WatchdogGetTimeout: 1200 169 170[HDF:I/HDF_LOG_TAG]WatchdogDevStart: watchdog Started! timeout: 1200ms 171 172[HDF:E/HDF_LOG_TAG]---> WatchdogStart. 173 174[HDF:E/HDF_LOG_TAG]WatchdogGetStatus: 1 175 176[HDF:E/HDF_LOG_TAG]--> WatchdogFeed success! 177[HDF:E/HDF_LOG_TAG]--> WatchdogFeed success! 178[HDF:E/HDF_LOG_TAG]--> WatchdogFeed success! 179[HDF:E/HDF_LOG_TAG]--> WatchdogFeed success! 180``` 181## HDF HCS配置 182开发板使用的默认配置(`//device/board/talkweb/niobe407/liteos_m/hdf_config/default.hcs`)中,默认没有配置Watchdog,需要同级目录下的`BUILD.gn`改用`hdf.hcs`文件, 或参考该文件添加watchdog配置: 183 184- 在`default_device_info.hcs`中添加如下配置: 185``` 186root { 187 module = "talkweb,stm32f407"; 188 device_info { 189 match_attr = "hdf_manager"; 190 template host { 191 hostName = ""; 192 priority = 100; 193 template device { 194 template deviceNode { 195 policy = 0; 196 priority = 100; 197 preload = 0; 198 permission = 0664; 199 moduleName = ""; 200 serviceName = ""; 201 deviceMatchAttr = ""; 202 } 203 } 204 } 205 platform :: host { 206 hostName = "platform_host"; 207 priority = 50; 208 209 device_watchdog :: device { 210 watchdog0 :: deviceNode { 211 policy = 1; 212 priority = 20; 213 permission = 0644; 214 moduleName = "ST_WATCHDOG_MODULE_HDF"; 215 serviceName = "HDF_PLATFORM_WATCHDOG_0"; 216 deviceMatchAttr = "st_watchdog"; 217 } 218 } 219 } 220 } 221} 222``` 223 224- 在`default.hcs`中添加如下配置: 225``` 226#include "default_device_info.hcs" 227root { 228 platform { 229 watchdog_config { 230 template watchdog_controller { 231 id = 0; 232 regBase = 0x12050000; 233 regStep = 0x1000; 234 timeout = 1000; // watchdog interval(ms) 235 match_attr = ""; 236 } 237 st_watchdog :: watchdog_controller { 238 match_attr = "st_watchdog"; 239 timeout = 500; 240 } 241 } 242 } 243} 244``` 245 246## 约束 247 248STM32F407的看门狗是硬件独立看门狗,不支持关闭功能,使用时需注意看门狗的应用场景。