最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

野火STM32學(xué)習(xí)筆記(構(gòu)建庫函數(shù)模型第五節(jié)課)提高程序的可移植性

2023-08-22 11:06 作者:是晃晃叔叔  | 我要投稿

可移植性高的必要性

? ? ? ? 舉個(gè)例子,當(dāng)我們使用不同的板子時(shí),LED燈的接口可能不一樣,這個(gè)時(shí)候大家如果再使用野火課程的程序就會(huì),出現(xiàn)很多的問題,野火指南者板子的LED燈是PB口,原理圖如圖所示:

? ? ? ? 如果其他的板子是PC口,或者是PD口呢?我們就要修改很多很多東西,比如時(shí)鐘,端口號(hào),初始化的端口等等,如圖所示:

? ? ? ? 我們?nèi)绻粋€(gè)一個(gè)去改這些,很有可能會(huì)漏改,如何避免這樣的情況呢,我們可以對(duì)硬件進(jìn)行封裝。封裝的方法也是使用宏定義。

? ? ? ? 我們用初始化一個(gè)GPIO來舉例子,它涉及到端口,是一個(gè)綠燈。那我們就設(shè)置這樣一個(gè)宏定義,在main函數(shù)的頭文件下面寫:

#define? ? LED_G_GPIO_PORT? ? ? ? ? ? ? ? ? ? ? ? GPIOB(LED燈_綠色_GPIO端口)??? ? ? ??

? ? ? ? 這是關(guān)于控制哪一個(gè)GPIO口的,下面還需要封裝一下可以使GPIO時(shí)鐘的使能代碼,宏定義就這樣寫:

#define? ? ??LED_G_GPIO_CLK_ENABLE?? ? ? ? ? ? ? RCC->APB2ENR? |=? ( (1) << 3 )(我們還沒有寫關(guān)于RCC的固件庫,因此只能先把寄存器編程的控制時(shí)鐘的部分拷貝過來)?

? ? ? ? ?再一個(gè)我們就要封裝定義的引腳了,這樣寫:

#define LED_G_GPIO_PIN? ? ? ? ? ? ? ? ? ? GPIO_Pin_0



這些宏定義設(shè)定好以后,GPIO的初始化函數(shù)改成這樣,可以看到它的可讀性和可移植性有明顯提高:

上面三個(gè)宏定義,即LED_G_GPIO_PORT,LED_G_GPIO_CLK_ENABLE?,LED_G_GPIO_PIN在程序中每遇到它們就會(huì)被替換成GPIOB,RCC->APB2ENR? |=? ( (1) << 3?),GPIO_Pin_0了,最后我們于main函數(shù)里再寫一個(gè)LED燈閃爍函數(shù)看看效果。

LED燈閃爍函數(shù)

閃爍需要延時(shí)函數(shù),我們使用一個(gè)軟件延時(shí):


寫在main函數(shù)的宏定義下面就行,接著在初始化函數(shù)下面寫一個(gè)while循環(huán):

可以看到GPIO的置位復(fù)位函數(shù)里面的GPIOB,GPIO_Pin_0都被替換了,但是效果是一樣的,我們程序的可移植性就這樣可以提高了,下次我們要使紅色燈亮,只需要在宏定義這樣添加。


我們就這樣提高封裝硬件提高了程序的可移植性。

野火STM32學(xué)習(xí)筆記(構(gòu)建庫函數(shù)模型第五節(jié)課)提高程序的可移植性的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
两当县| 洛宁县| 黑水县| 宝坻区| 象山县| 容城县| 田东县| 武定县| 施秉县| 麟游县| 长阳| 河源市| 顺昌县| 葫芦岛市| 绩溪县| 元谋县| 屏东县| 大荔县| 乐东| 德江县| 盈江县| 和龙市| 大连市| 长泰县| 邵东县| 克山县| 东乡族自治县| 克东县| 芷江| 澄江县| 安泽县| 福鼎市| 上高县| 桦南县| 桃源县| 隆安县| 闽清县| 横峰县| 新宾| 嵊泗县| 仁布县|