使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为看门狗的使用。
1 新建项目
在PIO的Home页面新建项目,项目名称wdt,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
项目建立完成后在src目录下新建main.c主程序文件;
修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
1 2 upload_protocol = cmsis-dap debug_tool = cmsis-dap
2 编写程序 2.1 看门狗基本使用方法
1 iwdg_set_period_ms(600 );
比如设置600ms周期;最大为32768ms;
一般在初始化工作都完成后开始启动看门狗;
这个函数必须保证在看门狗周期内进行执行,如上面设置周期为600,这个函数就必须在600ms之内调用,如每500ms调用一次;
2.2 使用例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 #include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/gpio.h> #include <libopencm3/stm32/iwdg.h> #include <libopencm3/cm3/systick.h> #define LED_1_RCC RCC_GPIOC #define LED_1_PORT GPIOC #define LED_1_PIN GPIO12 static void systick_setup (void ) { systick_set_reload(64000 ); systick_set_clocksource(STK_CSR_CLKSOURCE_AHB); systick_counter_enable(); systick_interrupt_enable(); } volatile uint32_t tick_counter = 0 ;void sys_tick_handler (void ) { tick_counter++; } uint32_t millis (void ) { return tick_counter; } int main (void ) { rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]); rcc_periph_clock_enable(LED_1_RCC); gpio_mode_setup(LED_1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,LED_1_PIN); systick_setup(); int x = 0 ; uint32_t lastTime = millis(); while (1 ){ if ( (millis() - lastTime) > 100 ) { lastTime = millis(); gpio_toggle(LED_1_PORT,LED_1_PIN); if (x++ > 10 ){ break ; } } } iwdg_set_period_ms(600 ); iwdg_start(); lastTime = millis(); while (1 ){ if ( (millis() - lastTime) > 500 ) { lastTime = millis(); gpio_toggle(LED_1_PORT,LED_1_PIN); iwdg_reset(); } } while (1 ){} return 0 ; }
以上为看门狗的基本使用实例,设置600ms的看门狗周期,然后每个500ms时间内进行喂狗,如果大于600ms没有喂狗就会导致复位;