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