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