這星期因工作比較繁忙,每天都很晚下班,剩余的時(shí)間少之又少。但這個(gè)星期過(guò)的非常充實(shí),把自己的想要在不需要改動(dòng)任何代碼的情況下檢測(cè)并自動(dòng)適配底層驅(qū)動(dòng)的設(shè)計(jì)思路得到驗(yàn)證,從而實(shí)現(xiàn)一套系統(tǒng)兼容多種不同的硬件設(shè)備,讓客戶在硬件上有多種組合選擇的余地。雖然還只是比較粗糙的框架,倘若繼續(xù)深入完善該設(shè)計(jì),一定會(huì)讓我們公司的系統(tǒng)更加智能化,從而減輕軟件方面的負(fù)擔(dān),提高工作效率,蠻有成就感的。說(shuō)的好像好高大上,哈哈。其實(shí)也就是一堆的函數(shù)指針指來(lái)指去的。越來(lái)越喜歡C了,喜歡這種不受束縛的實(shí)現(xiàn)自己想法的感覺(jué)。這次的實(shí)現(xiàn),感覺(jué)仍有很多地方考慮的不夠周全,仍有很多瑕疵。不過(guò)重要的是得到了鍛煉,總體來(lái)說(shuō),收獲蠻大的,
之前都是跳著學(xué)STM32,這次打算重新系統(tǒng)的去學(xué),以下為學(xué)STM32時(shí),看視頻、看書(shū)時(shí),覺(jué)得比較好的部分,摘錄下來(lái)的內(nèi)容。方便查詢復(fù)習(xí)使用。 STM32F103ZET6: 1、一共有7組IO口 -> GPIOA ~ GPIOG 2、每組IO口有16個(gè)IO 3、一個(gè)16*7=112個(gè)IO口 STM32的大部分引腳除了當(dāng)GPIO使用外,還可以復(fù)用為外設(shè)功能引腳(如串口). STM32共有8種模式: 4種輸入模式: 浮空輸入模式(GPIO_Mode_IN_FLOATING) 上拉輸入模式(GPIO_Mode_IPU) 下拉輸入模式(GPIO_Mode_IPD) 模擬輸入模式(GPIO_Mode_AIN) 4種輸出模式(反轉(zhuǎn)速度 2MHz、10MHz、50MHz): 普通推挽輸出模式(GPIO_Mode_Out_PP) 普通開(kāi)漏輸出模式(GPIO_Mode_Out_OD) 復(fù)用推挽輸出模式(GPIO_Mode_AF_PP) 復(fù)用開(kāi)漏輸出模式(GPIO_Mode_AF_OD) 輸入模式: 浮空輸入模式: IO口的電平狀態(tài)經(jīng)過(guò)TTL施密特觸發(fā)器(開(kāi)),再到輸入數(shù)據(jù)寄存器,CPU即可從數(shù)據(jù)寄存器讀取到該電平狀態(tài)。內(nèi)部的上拉下拉的開(kāi)關(guān)是關(guān)閉的。當(dāng)此IO口懸空,其電平狀態(tài)是不確定的,由外部輸入決定,這個(gè)模式直接用電壓表測(cè)量其引腳電壓為1點(diǎn)幾伏。由于其輸入阻抗比較大,一般這種輸入模式用于標(biāo)準(zhǔn)的通訊協(xié)議如I2C、USART的接收端。 上拉輸入模式: 和浮空很相似,唯一不同地方在于,上拉的開(kāi)關(guān)被打開(kāi)(該上拉電阻大約在30~50K),若IO口處于懸空狀態(tài),會(huì)有上拉電阻拉高。即默認(rèn)電平為高電平。 下拉輸入模式: 和上拉輸入模式很相似,唯一不同的地方在于下拉的開(kāi)關(guān)被打開(kāi),IO口懸空時(shí)默認(rèn)電平為低電平。 模擬輸入模式: 接入到IO口的不是電平狀態(tài),而是電壓,3V、2V這些,上下拉被關(guān)閉、TTL施密特觸發(fā)器被關(guān)閉,加在IO口的電壓直接到模擬輸入。當(dāng)IO口被用作ADC采樣時(shí)就是這種解構(gòu),當(dāng)使用ADC外設(shè)時(shí),必須設(shè)置為模擬輸入模式。
輸出模式: 普通推挽輸出模式: 往寄存器寫(xiě) 1 ,通過(guò)輸出控制電路,P-MOS管導(dǎo)通,N-MOS管關(guān)閉,IO口即為高電平。往寄存器寫(xiě) 0 ,通過(guò)輸出控制電路,P-MOS管關(guān)閉,N-MOS管導(dǎo)通,IO口即為低電平。兩個(gè)管子輪流導(dǎo)通,一個(gè)負(fù)責(zé)灌電流、一個(gè)負(fù)責(zé)拉電流,使其負(fù)載能力和開(kāi)關(guān)速度都比普通的方式有很大的提升,推挽輸出的低電平為0V,高電平為 3.3 V。 無(wú)論何時(shí),CPU 都可以通過(guò)輸入驅(qū)動(dòng)器讀取該IO口的實(shí)際電平值。 普通開(kāi)漏輸出模式 該模式下,P-MOS管不起作用,往寄存器寫(xiě)0,通過(guò)輸出控制電路,則使N-MOS管導(dǎo)通,使輸出接地,IO口即為低電平。往寄存器寫(xiě)1,N-MOS管截至,此時(shí)IO口即不是高電平也不是低電平,為高阻態(tài),即無(wú)法直接輸出高電平,使用時(shí)必須在外部接上一個(gè)上拉電阻,當(dāng)輸出為高阻態(tài)時(shí)由上拉將該IO口拉高,一般用于電平不匹配的情況下,如需要輸出5V高電平,就需要加上拉電阻,電源為5V,當(dāng)輸出為高阻態(tài)時(shí),由上拉電阻和電源向外輸出5V電平。 注意,此模式具有“線與”特性,即很多個(gè)開(kāi)漏模式引腳連在一起時(shí),只有當(dāng)所有引腳都輸出高阻態(tài)(即1),才會(huì)被外部上拉電阻拉高提供電平,此時(shí)電平的電壓為外部上拉電阻所接電源的電壓,若其中一個(gè)引腳為低電平,那線路就相當(dāng)于短接到地,使得整條線路為低電平(0V)。 上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的沿的速度,阻值越大,速度越低功耗越小。 只有在寫(xiě)1時(shí),才可以通過(guò)輸入驅(qū)動(dòng)器讀取該IO口的實(shí)際電平值,利用此原理,適合模擬I2C,接上拉電阻,就能夠正確輸出0和1,讀值時(shí)先GPIO_SetBits(GPIOB, GPIO_Pin_0) 拉高,然后使用GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)讀IO的值。 復(fù)用推挽輸出模式 復(fù)用推挽輸出模式和普通推挽輸出模式基本是一樣,只是一個(gè)是由片上外設(shè)控制,一個(gè)是由CPU控制。 無(wú)論何時(shí),CPU 都可以通過(guò)輸入驅(qū)動(dòng)器讀取該IO口的實(shí)際電平值。 復(fù)用開(kāi)漏輸出模式 復(fù)用開(kāi)漏輸出模式和普通開(kāi)漏輸出模式基本是一樣,只是一個(gè)是由片上外設(shè)控制,一個(gè)是由CPU控制。 無(wú)論何時(shí),CPU 都可以通過(guò)輸入驅(qū)動(dòng)器讀取該IO口的實(shí)際電平值。 復(fù)用模式是根據(jù)GPIO的復(fù)用功能來(lái)選擇的,如GPIO的引腳作用串口TX,則采用復(fù)用推挽輸出模式,如果是I2C、SMBUS這些線與功能的復(fù)用場(chǎng)合則采用復(fù)用開(kāi)漏輸出模式。 在使用任何一種開(kāi)漏模式時(shí),一般都是接上拉電阻。 通常有 5 種方式使用某個(gè)引腳功能,它們的配置方式如下:
1)作為普通 GPIO 輸入:根據(jù)需要配置該引腳為浮空輸入、 帶弱上拉輸入或帶弱下拉輸入,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
2)作為普通 GPIO 輸出:根據(jù)需要配置該引腳為推挽輸出或開(kāi)漏輸出,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
3)作為普通模擬輸入:配置該引腳為模擬輸入模式,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
4)作為內(nèi)置外設(shè)的輸入:根據(jù)需要配置該引腳為浮空輸入、 帶弱上拉輸入或帶弱下拉輸入,同時(shí)使能該引腳對(duì)應(yīng)的某個(gè)復(fù)用功能模塊。
5)作為內(nèi)置外設(shè)的輸出:根據(jù)需要配置該引腳為復(fù)用推挽輸出或復(fù)用開(kāi)漏輸出,同時(shí)使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
如果有多個(gè)復(fù)用功能模塊對(duì)應(yīng)同一個(gè)引腳,只能使能其中之一,其它模塊保持非使能狀態(tài)。 stm32 復(fù)位后,IO 端口處于輸入浮空狀態(tài)。 復(fù)位后, JTAG引腳被置于輸入上拉或下拉模式:
─ PA15: JTDI置于上拉模式
─ PA14: JTCK置于下拉模式
─ PA13: JTMS置于上拉模式
─ PB4: JNTRST置于上拉模式 所有 IO 端口都具有外部中斷能力,端口必須配置成輸入模式,才能使用外部中斷功能. IO 端口復(fù)用功能配置:
1、對(duì)于復(fù)用功能輸入,端口可以配置成任意輸入模式或者復(fù)用功能輸出模式.
2、對(duì)于復(fù)用功能輸出,端口必須配置成復(fù)用功能輸出
3、對(duì)于雙向復(fù)用功能,端口必須配置成復(fù)用功能輸出
4、stm32 的部分 IO 端口的復(fù)用功能可以重新映射成另外的復(fù)用功能.
5、stm32 具有 GPIO 鎖定機(jī)制,即鎖定 GPIO 配置,下次復(fù)位前不能再修改.
6、當(dāng) LSE 振蕩器關(guān)閉時(shí),OSC32_IN 和 OSC32_OUT 可以用作通用 IO PC14 和 PC15.
7、當(dāng)進(jìn)入待機(jī)模式或者備份域由 Vbat 供電,PC14,PC15 功能丟失,該兩個(gè) IO 口線設(shè)置為模擬輸入功能.
8、OSC_IN 和 OSC_OUT 可以重新映射為 GPIO PD0,PD1. 注意 PD0,PD1 用于輸出地時(shí)候僅能用于 50MHz 輸出模式.
注意:PC13,PC14,PC15 只能用于 2MHz 的輸出模式,,最多只能帶 30pf 的負(fù)載,并且同時(shí)只能使用一個(gè)引腳。 外設(shè)的GPIO配置可以在STM32中文參考手冊(cè)——V10 第110頁(yè)可以查詢。
|