银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-11-06 | gingko | 初次建立 |
1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F429IGHx。 3.配置RCC,使用外部时钟源 4. 调试选择Serial Wire,时基源选择SysTick 5.将PI3,PI4,PH14设置为GPIO_Output,PG9设置为GPIO_Input 6.引脚模式配置 7.配置WWDG 8.开启中断 9.时钟源设置,选择外部高速时钟源,配置为最大主频 10.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可,IDE我们使用的是 MDK V5.27 11.点击Code Generator,进行进一步配置
控制寄存器( WWDG_CR) 位 31:8 保留,必须保持复位值。 位 7 WDGA:激活位 (Activation bit)
位 6:0 T[6:0]: 7 位计数器 (7-bit counter)( MSB 到 LSB)
配置寄存器 (WWDG_CFR) 位 31:13 保留,必须保持复位值。 位 12:11 WDGTB[1:0]: 定时器时基 (Timer base) 可按如下方式修改预分频器的时基:
位 10 保留,必须保持复位值。 位 9 EWI: 提前唤醒中断 (Early wakeup interrupt)
位 8:7 保留,必须保持复位值。 位 6:0 W[6:0]: 7 位窗口值 (7-bit window value)
状态寄存器 (WWDG_SR) 位 31:1 保留,必须保持复位值。 位 0 EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag)
当计数器值达到 0x40 时此位由硬件置 1。它必须由软件通过写入 0 来清零。写入 1 不起作用。如果不使能中断,此位也会被置 1。
本实验中iCore3L使用的是常开带复位按键,当按键没有按下时,ARM芯片的ARM_KEY引脚读取到的值是高电平,按键按下后读取到的值为低电平,按键没有按下时正常喂狗,当按键按下后停止喂狗。
int main(void) { HAL_Init(); SystemClock_Config(); HAL_Delay(300); MX_GPIO_Init(); MX_WWDG_Init(); LED_RED_ON; //初始化LED状态,红灯亮 while (1) { while(ARM_KEY_VALUE == KEY_DOWN){ //按键没按下则正常喂狗 } HAL_Delay(30); //30ms喂一次狗,19.6ms<喂狗时间<46.5ms HAL_WWDG_Refresh(&hwwdg); //喂狗 } }
void MX_WWDG1_Init(void) { hwwdg1.Instance = WWDG; hwwdg1.Init.Prescaler = WWDG_PRESCALER_8;//窗口看门狗预分频系数为8 hwwdg1.Init.Window = 100;//上限窗口值为100 hwwdg1.Init.Counter = 127;//计数器的值为127 hwwdg1.Init.EWIMode = WWDG_EWI_ENABLE;//打开提前唤醒 if (HAL_WWDG_Init(&hwwdg) != HAL_OK) { Error_Handler(); } }
WWDG配置:
喂狗函数:
HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
用户可写入代码,在MCU死前,执行重要操作
在没有按下ARM_KEY按键时,红灯点亮,当一直按下ARM_KEY按键,ARM不断复位,红灯闪烁。