STM32學習心得(3)
中斷代碼:
void
{
TIM_ClearITPendingBit(TIM2,
GPIO_WriteBit(GPIOB,
IC4value
}
i)
//改變占空比
TIM_SetCompare4(TIM3,
j)
管腳的IO輸出模式是根據(jù)應用來定,比如如果用PWM輸出驅(qū)動LED則應該將相應管腳設為AF_PP,否則單片機沒有輸出
我的測試程序可以發(fā)出不斷循環(huán)三種波長并捕獲,對比結果如下:
捕捉的穩(wěn)定性很好,也就是說,同樣的方波捕捉到數(shù)值相差在一兩個數(shù)值。
捕捉的精度跟你設置的濾波器長度有關,在這里
TIM_ICInitStructure.TIM_ICFilter
這個越長就會捕捉數(shù)值越小,但是偏差幾十個數(shù)值,下面是0、4、16個周期濾波的比較,out是輸出的數(shù)值,in是捕捉到的。
現(xiàn)在有兩個疑問:
1、在TIM2的捕捉輸入通道初始化里面這句
TIM_SelectInputTrigger(TIM2,
按照硬件框圖,4通道應該對應TI4FP4。可是實際使用TI1FP1,TI2FP2都行,其他均編譯錯誤未注冊。這是為什么?
2、關閉調(diào)試器和IAR程序,直接供電跑出來的結果第一個周期很正常,當輸出脈寬第二次循環(huán)變小后捕捉的數(shù)值就差的遠了。不知道是為什么
a)
b)
void
c)
SysTick_Configuration();
d)
void
{
}
e)
NVIC_SystemHandlerPriorityCon
f)
void
{
執(zhí)行代碼
}
g)
i.
ii.
extern
iii.
iv.
void
{
}
v.
vi.
vii.
C語言功底問題。是的,那個“注意事項”最后的疑問的原因就是這個
Tic_Val應該改為vu16
while(Tic_Val
就可以改為:
while(Tic_Val
STM32筆記之十三:惡搞,兩只看門狗
a)
了解兩種看門狗(我叫它:系統(tǒng)運行故障探測器和獨立系統(tǒng)故障探測器,新手往往被這個并不形象的象形名稱搞糊涂)之間的區(qū)別和基本用法。
b)
都是用來探測系統(tǒng)故障,通過編寫代碼定時發(fā)送故障清零信號(高手們都管這個代碼叫做“喂狗”),告訴它系統(tǒng)運行正常。一旦系統(tǒng)故障,程序清零代碼(“喂狗”)無法執(zhí)行,其計數(shù)器就會計數(shù)不止,直到記到零并發(fā)生故障中斷(狗餓了開始叫喚),控制CPU重啟整個系統(tǒng)(不行啦,開始咬人了,快跑……)。
c)
獨立看門狗Iwdg——我的理解是獨立于系統(tǒng)之外,因為有獨立時鐘,所以不受系統(tǒng)影響的系統(tǒng)故障探測器。(這條狗是借來的,見誰偷懶它都咬?。┲饕糜诒O(jiān)視硬件錯誤。
窗口看門狗wwdg——我的理解是系統(tǒng)內(nèi)部的故障探測器,時鐘與系統(tǒng)相同。如果系統(tǒng)時鐘不走了,這個狗也就失去作用了。(這條狗是老板娘養(yǎng)的,老板不干活兒他不管!)主要用于監(jiān)視軟件錯誤。
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)
{
}本文引用地址:http://cafeforensic.com/article/201611/321206.htm
評論