完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32窗口看门狗的喂狗初值传递的思考
利用原子哥的精英板学习窗口看门狗的过程中,有点疑问,在此写下来,希望能够起到抛砖引玉的作用,希望大家指正。 本次讨论的内容是窗口看门狗的源文件(wwdg.c),该源文件可在正点原子精英板的附带实例中找到,在该文件的第39行,定义了一个变量: u8 WWDG_CNT=0x7f;//保存WWDG计数器的设置值,默认为最大。 在该文件的最后是一个中断服务函数,在该函数中实现喂狗操作,如下: viod WWDG_IRQHandler(void) { WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位 WWDG_ClearFlag(); //清除提前唤醒中断标志位 LED1=!LED1; //LED状态翻转 } 我们注意到,喂狗就要写入初值,但该处写入的并不是初值,而是初值能取的最大值, 这个值可以是0x7f,也可以是小于等于0x7f,且大于等于0x4f的任何值,基于此,我认为应该对此处进行更改,以还原喂狗的初衷。 我在源文件中声明了一个变量“u8 WWDG_counter”,注意是声明而不是定义,因为我希望通过第19行的初始化函数“void IWDG_Init(u8 prer,u16 rlr) ”的第一个参数来初始化该变量,通过在该函数中加入 “WWDG_counter = prer;“语句来实现该变量的初始化,这样就把喂狗的计数初值传递到源文件中,这样中断服务函数中喂狗操作就能取得该值,从而避开了中断服务函数不能传入或返回参数的问题。改动如下: viod WWDG_IRQHandler(void) { WWDG_SetCounter(WWDG_counter); //当禁掉此句后,窗口看门狗将产生复位 WWDG_ClearFlag(); //清除提前唤醒中断标志位 LED1=!LED1; //LED状态翻转 } 经过改动后,程序能正常运行,实现既定的功能,希望大家一起来讨论,还有没有更好的办法来将参数传送到中断服务函数中来,请大家批评指正,多多吐槽,谢谢! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1850浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
614浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
506浏览 3评论
510浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
491浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 21:07 , Processed in 0.508731 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号