生活随笔
收集整理的這篇文章主要介紹了
STM32单片机初学者编程之常用小程序--GPIO配置延时函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
聲明:本專題系列的博文主要是用于個人學(xué)習(xí)以及后續(xù)查閱調(diào)用,由于是這方面的初學(xué)者,所以寫的比較淺陋,有喜歡的朋友可以一起學(xué)習(xí),編程大神們請略過。。。。。。
1、以一個GPIO的初始化程序為例,以下是GPIO的配置:
void GPIO_Init() //端口初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
//聲明一個結(jié)構(gòu)體變量,用來初始化GPIO
SystemInit(); //首先進行GPIO模塊的時鐘初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//因為使用的GPIOC端口,所以使能GPIOC端口的時鐘/* 配置GPIO的模式和IO口*/
GPIO_InitStructure.GPIO_Pin=LED; //選擇你要設(shè)置的IO口,這里以一個LED接口為例;這里的“LED”實際上是一個宏定義,在相應(yīng)頭文件中已申明所代表的含義,目的主要是便于后續(xù)修改、調(diào)整GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//設(shè)置推挽輸出模式,這里的GPIO模式共有八種,分別是:
GPIO_Mode_AIN模擬輸入,GPIO_Mode_IN_FLOATING浮空輸入,
GPIO_Mode_IPD下拉輸入,GPIO_Mode_IPU上拉輸入,
GPIO_Mode_Out_OD開漏輸出,GPIO_Mode_Out_PP推挽輸出,
GPIO_Mode_AF_OD復(fù)用開漏輸出,GPIO_Mode_AF_PP復(fù)用推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//設(shè)置傳輸速率GPIO_Init(GPIOC,&GPIO_InitStructure);
//初始化該IO口所在的GPIO組,并指向該GPIO結(jié)構(gòu)的指針
}
2、延時函數(shù)
以下延時函數(shù)是常用的一個通過占用CPU來達到延時效果的函數(shù),延時不準(zhǔn)確,但對于日常開發(fā),多用于此。
void delay(u32 i)
{
while(i–);
}
函數(shù)比較簡單,只需要在相應(yīng)的功能模塊的“.C”文件中寫好,即可直接調(diào)用,如:delay(6000000);//延時約為1s
3、系統(tǒng)定時器延時函數(shù)
該函數(shù)可精確定時,在一些延時要求精度較高的場合應(yīng)用。
微秒延時函數(shù):
void delay_us(u32 i)
{
u32 temp;
SysTick->LOAD=9i;
//設(shè)置重裝數(shù)值,72MHz時;這里之所以“9i”,是因為系統(tǒng)時鐘在這里經(jīng)過了8分頻,這里是9MHz,即換算為時間就是約為1us,所以后續(xù)想要延時多少us,就直接給“i”賦值
SysTick->CTRL=0X01; //CTRL是該定時器的控制和狀態(tài)寄存器,需要先使能,即就是將該寄存器最低位置1使能SysTick->VAL=0; //VAL是當(dāng)前值寄存器,需要先清零計數(shù)器
do
{temp=SysTick->CTRL; //讀取當(dāng)前倒計數(shù)值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待時間到達,若當(dāng)前值計數(shù)減到0的時候,CTRL寄存器的第16位(標(biāo)志位)則會置1,此時則跳出循環(huán),該次延時完畢SysTick->CTRL=0; //關(guān)閉計數(shù)器
SysTick->VAL=0; //清空計數(shù)器
}
毫秒延時函數(shù):
void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i;
//設(shè)置重裝數(shù)值,72MHz時;
SysTick->CTRL=0X01; //使能,減到0是無動作,采用外部時鐘源SysTick->VAL=0; //清零計數(shù)器
do
{temp=SysTick->CTRL; //讀取當(dāng)前倒計數(shù)值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待時間到達
SysTick->CTRL=0; //關(guān)閉計數(shù)器
SysTick->VAL=0; //清空計數(shù)器
}
同樣調(diào)用的時候比較簡單,直接:
delay_ms(1000); //精確延時1s
總結(jié)
以上是生活随笔為你收集整理的STM32单片机初学者编程之常用小程序--GPIO配置延时函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。