找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5126|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

GPIO控制流水燈的心得

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99624 發(fā)表于 2015-12-27 03:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    原來學(xué)習(xí)的STM32真的是太膚淺,覺得配置GPIO很簡單,用GPIO控制流流水燈也不過如此,今天我自己真正配置了一遍,才知道能學(xué)習(xí)的東西有很多。
      1、stm32f10x.h 這個函數(shù)才是ST公司的庫函數(shù),平時調(diào)用的bsp_led.h是野火公司寫的用戶函數(shù),所以還有寫程序不易直接調(diào)用,還要自己親自來寫。
      2、首先,在main.c中,調(diào)用的頭文件,必有#include "stm32f10x.h",其次就是自己寫的用戶函數(shù)。
      
     上面是我自己寫的用戶函數(shù)(PS:其實也是學(xué)來的)
        3、#ifndef __LED_H
             #define __LED_H
                .........
             #endif
             預(yù)處理,條件編譯。如果第一次已經(jīng)編譯過了,防止重復(fù)編譯的代碼。
             __LED_H:這個部分寫什么都無所謂,這樣寫就是為了易懂程序。
        4、#define LED1_OFF  LED_OFF(GPIOB,GPIO_Pin_0)
             #define LED_OFF(p,i)  {p->BSRR=i;}
             對這兩句說明下,其他類似。
              其實也就是宏定義,其實也沒啥,p、i。也就是上一句的GPIOB,GPIO_Pin_0.
               在stm3f10x.h里面有他的宏定義 #defineGPIOB              ((GPIO_TypeDef *) GPIOB_BASE)
                                                                #defineGPIOB_BASE           (APB2PERIPH_BASE + 0x0C00)
              在stm32f10x_gpio.h中有他們的宏定義#defineGPIO_Pin_0                ((uint16_t)0x0001)
              歸根結(jié)底也就是用的寄存器操作,直接給寄存器相應(yīng)的地址寫值。
              這樣寫使代碼看上去更加簡潔。
        5、#define LED1(a) if(a)   \
                              GPIO_SetBits(GPIOB,GPIO_Pin_0); \
                                             else  \
                             GPIO_ResetBits(GPIOB,GPIO_Pin_0)
               這一步,宏定義,為啥每一行后邊還有\(zhòng)呢?
                "\"用于#define中,就是表示這一行還沒有結(jié)束。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表