GPIO引腳初始化程式設計STM32F103晶片序列口1的資料

2021-04-19 06:16:51 字數 5592 閱讀 3603

1樓:匿名使用者

gpio_initstructure.gpio_pin=gpio_pin_9;

gpio_initstructure.gpio_speed=gpio_speed_2mhz;

gpio_initstructure.gpio_mode=gpio_mode_af_pp;//

gpio_initstructure.gpio_pin=gpio_pin_10;

gpio_initstructure.gpio_speed=gpio_speed_2mhz;

gpio_initstructure.gpio_mode=gpio_mode_in_floating;

stm32串列埠在程式中配置時pa9,usart-tx和pa10,usart-rx為什麼工作模式配置成複用推輓輸出和浮空輸入??

2樓:雲淡淡的楓

usart串列埠,首先tx是作為輸出的,邏輯上輸出

的資料都是0或者1,也就是由高低電平來表示,推輓就是能穩定輸出1或者0。而複用,是因為這個io受的是內部的的usart模組來控制,並非是gpio暫存器來控制。至於rx設定為浮空輸入那就很好理解了,首先接收的肯定是要設定為輸入,才能檢測外界的電平,其次,浮空就能收到高和低的電平,也才能分析出0和1.

3樓:匿名使用者

關於stm32的usart配置,需要完成以下幾個步驟1,開啟usart時鐘

2,配置pa9及pa10

由於usart屬於可選功能項

所以tx要設定成gpio_mode_af_pp;,即複用推輓輸出rx用於資料輸入,被設定成浮空輸入

這是由於stm32的io口引腳總共只有以下幾種模式gpio_mode_ain = 0x0,

gpio_mode_in_floating = 0x04,gpio_mode_ipd = 0x28,gpio_mode_ipu = 0x48,gpio_mode_out_od = 0x14,gpio_mode_out_pp = 0x10,gpio_mode_af_od = 0x1c,gpio_mode_af_pp = 0x18對於特殊功能模式,只有一個複用開漏及複用推輓。

這兩種都是用於輸出的情況。

所以rx只能被設定成浮空輸入

這不僅是usart,對於其他的如spi也是如此。

4樓:吾乃嫖客

這個,因為串列埠的兩根資料線tx是用來傳送資料,rx是用來接收資料的.然後複用是因為使用了gpio的複用功能,然後推輓輸出是為了增強io口的輸出能力.

stm32f103的usb對應的gpio引腳是否不用配置就可以使用usb功能

5樓:

關於stm32的baiusart配置

,需要完成以

du下幾個步驟zhi 1,開啟usart時鐘 2,配dao置pa9及pa10 由於usart屬於專可選功能

項屬 所以tx要設定成gpio_mode_af_pp;,即複用推輓輸出 rx用於資料輸入,被設定成浮空輸入 這是由於stm32的io口引腳總共只有以下幾種模式

6樓:匿名使用者

印象中預設io配置為高阻態,不配置不能使用複用功能。

hal庫配置複用功能,gpio口不用配置了嗎

7樓:5糠送pos機

一、 stm32的輸入輸出管腳有下面8種(4輸入 2輸出 2複用輸出)可能的配置:

① 浮空輸入_in_floating

② 帶上拉輸入_ipu

③ 帶下拉輸入_ipd

④ 模擬輸入_ain

⑤ 開漏輸出_out_od

⑥ 推輓輸出_out_pp

⑦ 複用功能的推輓輸出_af_pp

⑧ 複用功能的開漏輸出_af_od

1.1 i/o口的輸出模式下,有3種輸出速度可選(2mhz、10mhz和50mhz),這個速度是指i/o口驅動電路的響應速度而不是輸出訊號的速度,輸出訊號的速度與程式有關(晶片內部在i/o口 的輸出部分安排了多個響應速度不同的輸出驅動電路,使用者可以根據自己的需要選擇合適的驅動電路)。通過選擇速度來選擇不同的輸出驅動模組,達到最佳的噪聲控制和降低功耗的目的。

高頻的驅動電路,噪聲也高,當不需要高的輸出頻率時,請選用低頻驅動電路,這樣非常有利於提高系統的emi效能。當然如果要輸出較高頻率的訊號,但卻選用了較低頻率的驅動模組,很可能會得到失真的輸出訊號。

輸出速度又稱輸出驅動電路的響應速度,可理解為:輸出驅動電路的頻寬,即一個驅動電路可以不失真地通過訊號的最大頻率。

如果一個訊號的頻率超過了驅動電路的響應速度,就有可能訊號失真。如果訊號頻率為10mhz,而你配置了2mhz的頻寬,則10mhz的方波很可能就變成了正弦波。就好比是公路的設計時速,汽車速度低於設計時速時,可以平穩地執行,如果超過設計時速就會顛簸,甚至翻車。

關鍵是: gpio的引腳速度跟應用相匹配,速度配置越高,噪聲越大,功耗越大。

頻寬速度高的驅動器耗電大、噪聲也大,頻寬低的驅動器耗電小、噪聲也小。使用合適的驅動器可以降低功耗和噪聲。

gpio的引腳速度跟應用匹配(推薦10倍以上)。比如:

1.1.1 對於串列埠,假如最大波特率只需115.2k,那麼用2m的gpio的引腳速度就夠了,既省電也噪聲小。

1.1.2 對於i2c介面,假如使用400k波特率,若想把餘量留大些,那麼用2m的gpio的引腳速度或許不夠,這時可以選用10m的gpio引腳速度。

1.1.3 對於spi介面,假如使用18m或9m波特率,用10m的gpio的引腳速度顯然不夠了,需要選用50m的gpio的引腳速度。

1.2 gpio口設為輸入時,輸出驅動電路與埠是斷開,所以輸出速度配置無意義。

1.3 在復位期間和剛復位後,複用功能未開啟,i/o埠被配置成浮空輸入模式。

1.4 所有埠都有外部中斷能力。為了使用外部中斷線,埠必須配置成輸入模式。

1.5 gpio口的配置具有上鎖功能,當配置好gpio口後,可以通過程式鎖住配置組合,直到下次晶片復位才能解鎖。

二、gpio的翻轉速度指:輸入/輸出暫存器的0 ,1 值反映到外部引腳(apb2上)高低電平的速度.手冊上指出gpio最大翻轉速度可達18mhz。

通過簡單的程式測試,用示波器觀察到的翻轉時間是綜合的時間,包括取指令的時間、指令執行的時間、指令執行後訊號傳遞到暫存器的時間(這其中可能經過很多環節,比如ahb、apb、匯流排仲裁等),最後才是訊號從暫存器傳輸到引腳所經歷的時間。如有上拉電阻,其阻值越大,rc延時越大,即邏輯電平轉換的速度越慢,功耗越大。

三、在stm32中如何配置片內外設使用的io埠

首先,一個外設經過 ①配置輸入的時鐘和 ②初始化後即被啟用(開啟);③如果使用該外設的輸入輸出管腳,則需要配置相應的gpio埠(否則該外設對應的輸入輸出管腳可以做普通gpio管腳使用);④再對外設進行詳細配置。

對應到外設的輸入輸出功能有下述三種情況:

① 外設對應的管腳為輸出:需要根據外圍電路的配置選擇對應的管腳為複用功能的推輓輸出或複用功能的開漏輸出。

② 外設對應的管腳為輸入:則根據外圍電路的配置可以選擇浮空輸入、帶上拉輸入或帶下拉輸入。

③ adc對應的管腳:配置管腳為模擬輸入。

如果把埠配置成複用輸出功能,則引腳和輸出暫存器斷開,並和片上外設的輸出訊號連線。將管腳配置成複用輸出功能後,如果外設沒有被啟用,那麼它的輸出將不確定。

四、 通用io埠(gpio)初始化

4.1 gpio初始化

41.1 rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | b | c, enable):使能apb2匯流排外設時鐘;

41.2 rcc_ apb2periphresetcmd (rcc_apb2periph_gpioa | b | c, disable):釋放gpio復位。

4.2 置各個pin埠(模擬輸入_ain、輸入浮空_in_floating、輸入上拉_ipu、輸入下拉_ipd、開漏輸出_out_od、推輓式輸出_out_pp、推輓式複用輸出_af_pp、開漏複用輸出_af_od)。

4.3gpio初始化完成。

五、 的gpio操作函式

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);//讀gpio某一位的輸入

uint16_t gpio_readinputdata(gpio_typedef* gpiox);//讀gpio的輸入

uint8_t gpio_readoutputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);//讀gpio某一位的輸出

uint16_t gpio_readoutputdata(gpio_typedef* gpiox);//讀gpio的輸出

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);//將gpio的某個位置位

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);//將gpio的某個位復位

void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);//寫gpio的某個位

void gpio_write(gpio_typedef* gpiox, uint16_t portval);//寫gpio

六、管腳的複用功能 重對映

1、複用功能:內建外設是與i/o口共用引出管腳(不同的功能對應同一管腳)

stm32 所有內建外設的外部引腳都是與標準gpio引腳複用的,如果有多個複用功能模組對應同一個引腳,只能使能其中之一,其它模組保持非使能狀態。

2、重對映功能:複用功能的引出腳可以通過重對映,從不同的i/o管腳引出,即複用功 能的引出腳位是可通過程式改變到其他的引腳上!

直接好處:pcb電路板的設計人員可以在需要的情況下,不必把某些訊號在板上繞一大圈完成聯接,方便了pcb的設計同時潛在地減少了訊號的交叉干擾。

如:usart1: 0: 沒有重映像(tx/pa9,rx/pa10); 1: 重映像(tx/pb6,rx/pb7)。

(參考afio_mapr暫存器介紹)[0,1為一暫存器的bit值]

【注】 下述複用功能的引出腳具有重對映功能:

- 晶體振盪器的引腳在不接晶體時,可以作為普通i/o口

- can模組; - jtag除錯介面;- 大部分定時器的引出介面; - 大部分usart引出介面

- i2c1的引出介面; - spi1的引出介面;

舉例:對於stm32f103vbt6,47引腳為pb10,它的複用功能是i2c2_scl和 usart3_tx,表示在上電之後它的預設功能為pb10,而i2c2的scl和usart3的tx為它的複用功能;另外在tim2的引腳重對映後,tim2_ch3也成為這個引腳的複用功能。

(1)要使用stm32f103vbt6的47、48腳的usart3功能,則需要配置47腳為複用推輓輸出或複用開漏輸出,配置48腳為某種輸入模式,同時使能usart3並保持i2c2的非使能狀態。

(2)使用stm32f103vbt6的47腳作為tim2_ch3,則需要對tim2進行重對映,然後再按複用功能的方式配置對應引腳。

魔獸爭霸3不能初始化DirectX問題

不管你用的dx多少的版本 最簡單的解決辦法 是在檔案屬性上執行引數上新增 opengl 直接無視dx dx就不會用到 相信你在玩cs的時候見過這個 重灌下!我前幾天也是這個問題 directx v9.0c 中英文正式版 microsoft微軟directx 9.0c最新官方正式多語言版for 魔獸爭...

模擬人生3 無法開始遊戲,初始化失敗。怎麼辦?

刪除登錄檔 開啟開始選單 執行 regedit 刪除。hkey local machine software sims 也或者是hkey local machine software electronic arts sims lz找找看吧。我情況和你一樣。也是服務初始化失敗0 0175dcbb。剛剛...

金蝶K3的應付賬款反初始化在那個模組

財務會計 應付款管理 初始化 反初始化 在財務管理 應付款管理 初始化 系統設定 初始化 應付款管理 反初始化 金蝶k3如何修改已經結束初始化應收應付的啟用會計期間 5 金蝶k3已經結束初始化是無法直接修改應收應付的啟用會計期間,只能先進行反初始化然後才能直接設定啟用會計期間,或者將需要修改該模組的...