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

歡迎光臨散文網(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ó)家法律
阿城市| 刚察县| 开平市| 高州市| 曲麻莱县| 砀山县| 格尔木市| 景洪市| 搜索| 临海市| 浮梁县| 彭泽县| 衡东县| 鄂州市| 云霄县| 法库县| 五台县| 师宗县| 商南县| 绵阳市| 栖霞市| 兰考县| 东台市| 正镶白旗| 蓝山县| 五常市| 滨州市| 阿荣旗| 元阳县| 措勤县| 长垣县| 文化| 翁源县| 化德县| 兴宁市| 安义县| 贵溪市| 白水县| 嫩江县| 丰都县| 海晏县|