STM32電燈總結

2021-10-09 16:02:49 字數 1300 閱讀 8131

stm32點亮三個led燈學習總結

在進行位址進行巨集定義時候,一定要強制性型別轉化

現在我們開始對時鐘rcc裡面的rcc_apb2_enr使能暫存器進行位址的巨集定義,有

#define periph_base ((unsigned int) 0x40000000)

#define ahb_periph_base (periph_base + 0x20000)

#define rcc_base ( ahb_periph_base + 0x1000)

//正確的寫法是

#define rcc_apb2_enr *((uint32_t *) (rcc_base + 0x18))

//容易造成的錯誤寫法是

#define rcc_apb2_enr *((uint32_t *) rcc_base + 0x18);

在寫入了上面三條**之後,我們就可以定位到最小暫存器的位址了,可以進行功能的設定了,比如說

在暫存器裡面進行寫入操作有

//開啟gpiob的時鐘 往暫存器裡面的第三個位置寫入1

rcc_apb2_enr |= ((1 ) << 3);

void gpio_setbit(gpio_typedef * gpiox, uint32_t gpio_pin)

//bsrr是設定和清除暫存器,其中0 - 15 是設定暫存器,可以對0 - 15 個io口寫入1或者0預設為 0. 16 - 31是清除暫存器,就是將io口進行初始化設定的

void gpio_restsetbit(gpio_typedef * gpiox, uint32_t gpio_pin)

// brr是清除暫存器,其中僅僅有15個位置,可以對16個io口進行初始化設定,和上面的bsrr設定一樣的

在進行巨集定義的時候,我們可以設定gpiox和gpio_pin進行巨集定義的設定,以後非常容易對**進行的修改

比如說·有· gpio_inittypedef gpio_initstructure

gpio_initstructure.gpio_pin = gpio_pin_0;

//上面的gpio_pin_0就可以進行巨集定義了

#define led_gpiob_pin gpio_pin_0

以後直接

gpio_initstructure.gpio_pin = led_gpiob_pin

也可以對port進行巨集定義

例如#define led_gpio gpiob

到時候可以直接傳入引數進去

gpio_setbit(led_gpio, &gpio_initstructure);

stm32(十四)IIC總結

一 iic匯流排知識 sda 雙向資料線,主機可以通過sda線傳送資料給集群,集群也可以通過sda線傳送資料給主機 scl 時鐘訊號線,驅動資料線收發資料的脈衝訊號由scl提供,scl脈衝訊號永遠由主機發出 在匯流排上sda和scl都有上拉電阻,因為iic匯流排介面的晶元sda,scl輸出都是開漏輸...

STM32的GPIO開發總結

gpio開發總結 gpio模式 a 浮空輸入 in floating b 帶上拉輸入 ipu in push up c 帶下拉輸入 ipd in push down d 模擬輸入 ain anolog in e 開漏輸出 out pd od 代表開漏,既open drain,oc代表開集,open ...

STM32外設DMA使用總結

stm32外設dma使用總結 1 根據需要選擇dam模式 1 迴圈模式 dma mode dma mode circular 2 正常模式 dma mode dma mode normal 2 對於dma1的chanel3,對應外設為usart3的rx 試想 如果串列埠接收中斷和dam中斷同時開啟,...