银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-09-26 | gingko | 初次建立 |
1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3.配置RCC,使用外部时钟源 4.时基源选择SysTick 5.将PA10,PB7,PB8设置为GPIO_Output,PH7设置为GPIO_Input 6.引脚模式配置 7.配置WWDG1 8.开启中断 9.时钟源设置,选择外部高速时钟源,配置为最大主频 10.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 11.点击Code Generator,进行进一步配置
12.然后点击GENERATE CODE 创建工程 创建成功,打开工程。
窗口看门狗的超时公式如下:
其中:
控制寄存器( WWDG_CR) 位 31:8 保留,必须保持复位值。 位 7 WDGA:激活位 (Activation bit)
位 6:0 T[6:0]: 7 位计数器 (7-bit counter)( MSB 到 LSB)
配置寄存器 (WWDG_CFR) 位 31:14 保留,必须保持复位值。
位 13:11 WDGTB[2:0]: 定时器时基 (Timer base) 可按如下方式修改预分频器的时基:
位 10 保留,必须保持复位值。
位 9 EWI: 提前唤醒中断 (Early wakeup interrupt)
位 8:7 保留,必须保持复位值。
位 6:0 W[6:0]: 7 位窗口值 (7-bit window value)
位 31:1 保留,必须保持复位值。
位 0 EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag) 当计数器值达到 0x40 时此位由硬件置 1。它必须由软件通过写入 0 来清零。写入 1 不起作用。如果不使能中断,此位也会被置 1。
本实验中iCore4T使用的是常开带复位按键,当按键没有按下时,ARM芯片的ARM_KEY引脚读取到的值是高电平,按键按下后读取到的值为低电平,按键没有按下时正常喂狗,当按键按下后停止喂狗。
int main(void) { int cnt = 0; HAL_Init(); SystemClock_Config(); i2c.initialize(); axp152.initialize(); axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER] axp152.set_dcdc2(1200);//[FPGA INT & PLL D] axp152.set_aldo1(2500);//[FPGA PLL A] axp152.set_dcdc4(3300);//[POWER_OUTPUT] axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable] axp152.set_aldo2(3300);//[FPGA BK3][Adjustable] axp152.set_dldo1(3300);//[FPGA BK7][Adjustable] axp152.set_dldo2(3300);//[FPGA BK5][Adjustable] HAL_Delay(300); MX_GPIO_Init(); MX_WWDG1_Init(); MX_USART2_UART_Init(); usart2.initialize(115200); usart2.printf("Hello,I am iCore4T!\r\n"); LED_ON; while (1) { while(ARM_KEY_VALUE == KEY_DOWN){//按键没按下则正常喂狗 } HAL_Delay(30); //30ms喂狗一次 HAL_WWDG_Refresh(&hwwdg1); //喂狗 usart2.printf("Hello,I am iCore4T! %d\r\n",cnt++);//打印文本,并且数值不断增大 } }
void MX_WWDG1_Init(void) { hwwdg1.Instance = WWDG1; hwwdg1.Init.Prescaler = WWDG_PRESCALER_16;//窗口看门狗预分频系数为16 hwwdg1.Init.Window = 100;//上限窗口值为100 hwwdg1.Init.Counter = 127;//计数器的值为127 hwwdg1.Init.EWIMode = WWDG_EWI_ENABLE;//打开提前唤醒 if (HAL_WWDG_Init(&hwwdg1) != HAL_OK) { Error_Handler(); } }
HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
功能:判断中断是否正常,并进入中断回调函数。 WWDG 中断服务程序,如果发生了此中断,表示程序已经出现了故障,这是一个死前中断。在此中断服务程序中应该干最重要的事,比如保存重要的数据等。
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
用户可写入代码,在MCU死前,执行重要操作。
在没有按下ARM_KEY按键时,终端输出文本,并且数值不断增大,当一直按下ARM_KEY按键,ARM不断复位,打印的数值不断循环,不会一直增大。