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中斷同時開啟,...