STM32学习心得(3)
中断代码:
void
{
TIM_ClearITPendingBit(TIM2,
GPIO_WriteBit(GPIOB,
IC4value
}
i)
//改变占空比
TIM_SetCompare4(TIM3,
j)
管脚的IO输出模式是根据应用来定,比如如果用PWM输出驱动LED则应该将相应管脚设为AF_PP,否则单片机没有输出
我的测试程序可以发出不断循环三种波长并捕获,对比结果如下:
捕捉的稳定性很好,也就是说,同样的方波捕捉到数值相差在一两个数值。
捕捉的精度跟你设置的滤波器长度有关,在这里
TIM_ICInitStructure.TIM_ICFilter
这个越长就会捕捉数值越小,但是偏差几十个数值,下面是0、4、16个周期滤波的比较,out是输出的数值,in是捕捉到的。
现在有两个疑问:
1、在TIM2的捕捉输入通道初始化里面这句
TIM_SelectInputTrigger(TIM2,
按照硬件框图,4通道应该对应TI4FP4。可是实际使用TI1FP1,TI2FP2都行,其他均编译错误未注册。这是为什么?
2、关闭调试器和IAR程序,直接供电跑出来的结果第一个周期很正常,当输出脉宽第二次循环变小后捕捉的数值就差的远了。不知道是为什么
a)
b)
void
c)
SysTick_Configuration();
d)
void
{
}
e)
NVIC_SystemHandlerPriorityCon
f)
void
{
执行代码
}
g)
i.
ii.
extern
iii.
iv.
void
{
}
v.
vi.
vii.
C语言功底问题。是的,那个“注意事项”最后的疑问的原因就是这个
Tic_Val应该改为vu16
while(Tic_Val
就可以改为:
while(Tic_Val
STM32笔记之十三:恶搞,两只看门狗
a)
了解两种看门狗(我叫它:系统运行故障探测器和独立系统故障探测器,新手往往被这个并不形象的象形名称搞糊涂)之间的区别和基本用法。
b)
都是用来探测系统故障,通过编写代码定时发送故障清零信号(高手们都管这个代码叫做“喂狗”),告诉它系统运行正常。一旦系统故障,程序清零代码(“喂狗”)无法执行,其计数器就会计数不止,直到记到零并发生故障中断(狗饿了开始叫唤),控制CPU重启整个系统(不行啦,开始咬人了,快跑……)。
c)
独立看门狗Iwdg——我的理解是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。(这条狗是借来的,见谁偷懒它都咬!)主要用于监视硬件错误。
窗口看门狗wwdg——我的理解是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。(这条狗是老板娘养的,老板不干活儿他不管!)主要用于监视软件错误。
d)
void
e)
WDG_Configuration();
f)
void
{
//软件看门狗初始化
//
WWDG_SetWindowValue(65);
//
WWDG_ClearFlag();
//独立看门狗初始化
}
g)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,
h)
i)
void
{
WWDG_ClearFlag();
}
void
{
}
j)
i.
ii.
iii.
第一步:在stm32f10x_it.c中定义变量
int
第二步:将SysTickHandler中喂狗代码改为下面:
Tic_IWDG++;
if(Tic_IWDG>=100)
{
}本文引用地址:https://www.eepw.com.cn/article/201611/321206.htm
评论