<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32學(xué)習心得(3)

STM32學(xué)習心得(3)

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏


中斷代碼:

voidTIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2,TIM_IT_CC4)!=RESET)//判斷中斷來(lái)源

{

TIM_ClearITPendingBit(TIM2,TIM_IT_CC4);//清除中斷標志

GPIO_WriteBit(GPIOB,GPIO_Pin_11,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_11)));//變換LED色彩

IC4value=TIM_GetCapture4(TIM2);//獲取捕捉數值

}

}

i)簡(jiǎn)單應用:

//改變占空比

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=0x4;//濾波設置,經(jīng)歷幾個(gè)周期跳變認定波形穩定0x0~0xF

這個(gè)越長(cháng)就會(huì )捕捉數值越小,但是偏差幾十個(gè)數值,下面是0、4、16個(gè)周期濾波的比較,out是輸出的數值,in是捕捉到的。

現在有兩個(gè)疑問(wèn):

1、在TIM2的捕捉輸入通道初始化里面這句

TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);//選擇時(shí)鐘觸發(fā)源

按照硬件框圖,4通道應該對應TI4FP4??墒菍?shí)際使用TI1FP1,TI2FP2都行,其他均編譯錯誤未注冊。這是為什么?

2、關(guān)閉調試器和IAR程序,直接供電跑出來(lái)的結果第一個(gè)周期很正常,當輸出脈寬第二次循環(huán)變小后捕捉的數值就差的遠了。不知道是為什么







時(shí)鐘不息工作不止,systic時(shí)鐘應用

a)目的:使用系統時(shí)鐘來(lái)進(jìn)行兩項實(shí)驗——周期執行代碼與精確定時(shí)延遲。

b)初始化函數定義:

voidSysTick_Configuration(void);

c)初始化函數調用:

SysTick_Configuration();

d)初始化函數:

voidSysTick_Configuration(void)

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//時(shí)鐘除8

SysTick_SetReload(250000);//計數周期長(cháng)度

SysTick_CounterCmd(SysTick_Counter_Enable);//啟動(dòng)計時(shí)器

SysTick_ITConfig(ENABLE);//打開(kāi)中斷

}

e)在NVIC的初始化函數里面增加以下代碼打開(kāi)相關(guān)中斷:

NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,1,0);//中斷等級設置,一般設置的高一些會(huì )少受其他影響

f)在stm32f10x_it.c文件中找到voidSysTickHandler函數

voidSysTickHandler(void)

{

執行代碼

}

g)簡(jiǎn)單應用:精確延遲函數,因為systic中斷往往被用來(lái)執行周期循環(huán)代碼,所以一些例程中使用其中斷的啟動(dòng)和禁止來(lái)編寫(xiě)的精確延時(shí)函數實(shí)際上不實(shí)用,我自己編寫(xiě)了精確計時(shí)函數反而代碼更精簡(jiǎn),思路更簡(jiǎn)單。思路是調用后,變量清零,然后使用時(shí)鐘來(lái)的曾變量,不斷比較變量與延遲的數值,相等則退出函數。代碼和步驟如下:

i.定義通用變量:u16Tic_Val=0;//變量用于精確計時(shí)

ii.在stm32f10x_it.c文件中相應定義:

externu16Tic_Val;//在本文件引用MAIN.c定義的精確計時(shí)變量

iii.定義函數名稱(chēng):voidTic_Delay(u16Tic_Count);//精確延遲函數

iv.精確延時(shí)函數:

voidTic_Delay(u16Tic_Count)//精確延時(shí)函數

{Tic_Val=0;//變量清零

while(Tic_Val!=Tic_Count){printf("");}//計時(shí)

}

v.在stm32f10x_it.c文件中voidSysTickHandler函數里面添加

Tic_Val++;//變量遞增

vi.調用代碼:Tic_Delay(10);//精確延時(shí)

vii.疑問(wèn):如果去掉計時(shí)行那個(gè)沒(méi)用的printf("");函數將停止工作,這個(gè)現象很奇怪

C語(yǔ)言功底問(wèn)題。是的,那個(gè)“注意事項”最后的疑問(wèn)的原因就是這個(gè)

Tic_Val應該改為vu16

while(Tic_Val!=Tic_Count){printf("");}//計時(shí)

就可以改為:

while(Tic_Val!=Tic_Count);//檢查變量是否計數到位

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)初始化函數定義:鑒于兩只狗作用差不多,使用過(guò)程也差不多初始化函數栓一起了,用的時(shí)候根據情況刪減。

voidWDG_Configuration(void);

e)初始化函數調用:

WDG_Configuration();

f)初始化函數

voidWDG_Configuration()//看門(mén)狗初始化

{

//軟件看門(mén)狗初始化

WWDG_SetPrescaler(WWDG_Prescaler_8);//時(shí)鐘8分頻4ms

//(PCLK1/4096)/8=244Hz(~4ms)

WWDG_SetWindowValue(65);//計數器數值

WWDG_Enable(127);//啟動(dòng)計數器,設置喂狗時(shí)間

//WWDGtimeout=~4ms*64=262ms

WWDG_ClearFlag();//清除標志位

WWDG_EnableIT();//啟動(dòng)中斷

//獨立看門(mén)狗初始化

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//啟動(dòng)寄存器讀寫(xiě)

IWDG_SetPrescaler(IWDG_Prescaler_32);//40K時(shí)鐘32分頻

IWDG_SetReload(349);//計數器數值

IWDG_ReloadCounter();//重啟計數器

IWDG_Enable();//啟動(dòng)看門(mén)狗

}

g)RCC初始化:只有軟件看門(mén)狗需要時(shí)鐘初始化,獨立看門(mén)狗有自己的時(shí)鐘不需要但是需要systic工作相關(guān)設置。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

h)獨立看門(mén)狗使用systic的中斷來(lái)喂狗,所以添加systic的中斷打開(kāi)代碼就行了。軟件看門(mén)狗需要在NVIC打開(kāi)中斷添加如下代碼:

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQChannel;//通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//占先中斷等級

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應中斷優(yōu)先級

NVIC_Init(&NVIC_InitStructure);//打開(kāi)中斷

i)中斷程序,軟件看門(mén)狗在自己的中斷中喂狗,獨立看門(mén)狗需要使用systic的定時(shí)中斷來(lái)喂狗。以下兩個(gè)程序都在stm32f10x_it.c文件中。

voidWWDG_IRQHandler(void)

{

WWDG_SetCounter(0x7F);//更新計數值

WWDG_ClearFlag();//清除標志位

}

voidSysTickHandler(void)

{IWDG_ReloadCounter();//重啟計數器(喂狗)

}

j)注意事項:

i.有狗平常沒(méi)事情可以不理,但是千萬(wàn)別忘了喂它,否則死都不知道怎么死的!

ii.初始化程序的調用一定要在systic的初始化之后。

iii.獨立看門(mén)狗需要systic中斷來(lái)喂,但是systic做別的用處不能只做這件事,所以我寫(xiě)了如下幾句代碼,可以不影響systic的其他應用,其他systic周期代碼也可參考:

第一步:在stm32f10x_it.c中定義變量

intTic_IWDG;//喂狗循環(huán)程序的頻率判斷變量

第二步:將SysTickHandler中喂狗代碼改為下面:

Tic_IWDG++;//變量遞增

if(Tic_IWDG>=100)//每100個(gè)systic周期喂狗

{IWDG_ReloadCounter();//重啟計數器(喂狗)

Tic_IWDG=0;//變量清零

}

本文引用地址:http://dyxdggzs.com/article/201611/321206.htm

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: STM32學(xué)習心

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>