新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)前班教程之六:這些代碼大家都用得到

STM32學(xué)前班教程之六:這些代碼大家都用得到

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


1、閱讀exti:外部設(shè)備中斷函數(shù)

我的理解——外部設(shè)備通過(guò)引腳給出的硬件中斷,也可以產(chǎn)生軟件中斷,19個(gè)上升、下降或都觸發(fā)。EXTI0~EXTI15連接到管腳,EXTI線16連接到PVD(VDD監(jiān)視),EXTI線17連接到RTC(鬧鐘),EXTI線18連接到USB(喚醒)。

基礎(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必須代碼。

用法:voidEXTI_Configuration(void)

{

EXTI_InitTypeDefEXTI_InitStructure;//外部設(shè)備中斷恢復(fù)默認(rèn)參數(shù)

EXTI_InitStructure.EXTI_Line=通道1|通道2;

//設(shè)定所需產(chǎn)生外部中斷的通道,一共19個(gè)。

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//產(chǎn)生中斷

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

//上升下降沿都觸發(fā)

EXTI_InitStructure.EXTI_LineCmd=ENABLE;//啟動(dòng)中斷的接收

EXTI_Init(&EXTI_InitStructure);//外部設(shè)備中斷啟動(dòng)

}



2、閱讀dma:通過(guò)總線而越過(guò)CPU讀取外設(shè)數(shù)據(jù)

我的理解——通過(guò)DMA應(yīng)用可以加速單片機(jī)外設(shè)、存儲(chǔ)器之間的數(shù)據(jù)傳輸,并在傳輸期間不影響CPU進(jìn)行其他事情。這對(duì)于入門開(kāi)發(fā)基本功能來(lái)說(shuō)沒(méi)有太大必要,這個(gè)內(nèi)容先行跳過(guò)。

3、閱讀systic:系統(tǒng)定時(shí)器

我的理解——可以輸出和利用系統(tǒng)時(shí)鐘的計(jì)數(shù)、狀態(tài)。

基礎(chǔ)應(yīng)用1,精確計(jì)時(shí)的延時(shí)子函數(shù)。推薦使用的代碼。

用法:

staticvu32TimingDelay;//全局變量聲明

voidSysTick_Config(void)//systick初始化函數(shù)

{

SysTick_CounterCmd(SysTick_Counter_Disable);//停止系統(tǒng)定時(shí)器

SysTick_ITConfig(DISABLE);//停止systick中斷

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

//systick使用HCLK作為時(shí)鐘源,頻率值除以8。

SysTick_SetReload(9000);//重置時(shí)間1毫秒(以72MHz為基礎(chǔ)計(jì)算)

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

}

voidDelay(u32nTime)//延遲一毫秒的函數(shù)

{

SysTick_CounterCmd(SysTick_Counter_Enable);//systic開(kāi)始計(jì)時(shí)



TimingDelay=nTime;//計(jì)時(shí)長(zhǎng)度賦值給遞減變量

while(TimingDelay!=0);//檢測(cè)是否計(jì)時(shí)完成



SysTick_CounterCmd(SysTick_Counter_Disable);//關(guān)閉計(jì)數(shù)器

SysTick_CounterCmd(SysTick_Counter_Clear);//清除計(jì)數(shù)值

}

voidTimingDelay_Decrement(void)

//遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c”中的中斷響應(yīng)函數(shù)定義好了。

{

if(TimingDelay!=0x00)//檢測(cè)計(jì)數(shù)變量是否達(dá)到0

{

TimingDelay--;//計(jì)數(shù)變量遞減

}

}

注:建議熟練后使用,所涉及知識(shí)和設(shè)備太多,新手出錯(cuò)的可能性比較大。新手可用簡(jiǎn)化的延時(shí)函數(shù)代替:

voidDelay(vu32nCount)//簡(jiǎn)單延時(shí)函數(shù)

{

for(;nCount!=0;nCount--);(循環(huán)變量遞減計(jì)數(shù))

}

當(dāng)延時(shí)較長(zhǎng),又不需要精確計(jì)時(shí)的時(shí)候可以使用嵌套循環(huán):

voidDelay(vu32nCount)//簡(jiǎn)單的長(zhǎng)時(shí)間延時(shí)函數(shù)

{inti;//聲明內(nèi)部遞減變量

for(;nCount!=0;nCount--)//遞減變量計(jì)數(shù)

{for(i=0;i<0xffff;i++)}//內(nèi)部循環(huán)遞減變量計(jì)數(shù)

}

4、閱讀gpio:I/O設(shè)置函數(shù)

我的理解——所有輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開(kāi)漏、模擬、推挽模式,頻率特性為2M,10M,50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)。

基礎(chǔ)應(yīng)用1,gpio初始化函數(shù)。所有程序必須。

用法:voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;//GPIO狀態(tài)恢復(fù)默認(rèn)參數(shù)

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_標(biāo)號(hào)|GPIO_Pin_標(biāo)號(hào);

//管腳位置定義,標(biāo)號(hào)可以是NONE、ALL、0至15。

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;//輸出速度2MHz

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入模式

GPIO_Init(GPIOC,&GPIO_InitStructure);//C組GPIO初始化

//注:以上四行代碼為一組,每組GPIO屬性必須相同,默認(rèn)的GPIO參數(shù)為:ALL,2MHz,F(xiàn)LATING。如果其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論如果前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GPIO_InitTypeDefGPIO_InitStructure代碼),本組應(yīng)用也是默認(rèn)參數(shù)的話,那么也可以省略。以下重復(fù)這個(gè)過(guò)程直到所有應(yīng)用的管腳全部被定義完畢。

……

}

基礎(chǔ)應(yīng)用2,向管腳寫入0或1

用法:GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitAction)0x01);//寫入1

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

關(guān)鍵詞: STM32學(xué)前班教

評(píng)論


技術(shù)專區(qū)

關(guān)閉