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

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

野火STM32學(xué)習(xí)筆記

2023-06-15 13:01 作者:是晃晃叔叔  | 我要投稿

互~涼~網(wǎng)的廣大觀眾朋友們大家好,本up豬在C站(CSDN俗稱糞坑)的ID叫飛天大司馬,鑒于C站雖然閱讀量大,但是本人反饋無法及時,因此在B站同步更新創(chuàng)作內(nèi)容,歡迎各位新老粉絲前來批評指正一起學(xué)習(xí)。

頭文件和C文件的創(chuàng)建

編寫這個函數(shù),我們首先建立一個叫“stm32f10x_gpio.c”的C文件,和一個“stm32f10x_gpio.h”C語言頭文件。如圖

導(dǎo)入工程列表

再回到工程界面,雙擊Source Group 1文件夾添加“stm32f10x_gpio.c”隨后要將頭文件導(dǎo)入進來,頭文件導(dǎo)入方法我會單獨出一個小專欄讓大家了解一下。導(dǎo)入成功文件目錄會出現(xiàn)下面的界面,如圖。

?頭文件編寫

接下來我們開始編寫函數(shù)的頭文件,在STM32當(dāng)中每一個頭文件的框架都是這樣的,如圖

?#ifndef空格兩個雙下劃線頭文件大寫把所有點改成下劃線

?#define空格兩個雙下劃線頭文件大寫把所有點改成下劃線

?頭文件程序

? #endif

? ? ? 至于為什么要這么寫,本up豬才疏學(xué)淺,不知道深層次的原因,只能從字面意思上翻譯:如果沒有定義此頭文件,我就定義這個頭文件······結(jié)束,作用是為了避免頭文件里的的內(nèi)容被重新定義。如果有了解更具體的同學(xué),大牛,歡迎在評論區(qū)留言。不明白也沒有關(guān)系,只要知道是這樣用就行了。

? ? ? 我們在編寫置位復(fù)位函數(shù)的時候,還是要用到之前的寄存器定義函數(shù)的頭文件的,因為置位復(fù)位本質(zhì)上也是對寄存器操作要用到“stm32f10x.h”里的寄存器定義,所以要把“stm32f10x.h”這個頭文件包含進來。

進入函數(shù)的C文件

頭文件配置完成,我們要進入C文件開始寫程序了,程序開頭同樣要導(dǎo)入stm32f10x.h。如圖

? ? ? 此時我如果按下編譯鍵,會出現(xiàn)一個問題,error:#256 invalid redeclaration of type name “ ···”。這就是因為在上節(jié)課的頭文件stm32f10x.h開頭和結(jié)尾沒有寫那樣的框架“#ifndef·········#endif”,導(dǎo)致的頭文件重定義錯誤。什么是頭文件重定義錯誤,這個是C語言的知識,可以在其他資料里面查找,這里不再贅述,改正方法如下圖。

? ? ? 前面的都是準備工作,到這里我們才開始正式編寫函數(shù)。首先,定義這個函數(shù)的名字,給他取名GPIO_SetBits,這個函數(shù)有兩個形式參數(shù),為什么呢?我來舉個栗子,就比如我要操作PB0這個端口,那我要告訴別人操作GPIOB這個寄存器,而且是GPIOB的Pin0。因此函數(shù)內(nèi)的第一個形式參數(shù)是GPIO_TypeDef * GPIOx這樣一個指針,當(dāng)這個x為B時,就對應(yīng)GPIOB這個寄存器的地址。第二個參數(shù)針對的是IO口,每個GPIO端口有16個IO,因此這個參數(shù)可以設(shè)定為uint16_t GPIO_Pin。將來這個參數(shù)怎么傳,下面會告訴大家先不要急。

? ? ? ?置位的時候我們就不操作端口ODR寄存器了,而是操作BSSR端口置位清除寄存器,而且我們只用他的低16位,我把技術(shù)手冊關(guān)于這個寄存器的功能截下來如圖

? ? ? ?因此我在這個函數(shù)里面操作BSSR寄存器輸入GPIOx->就會出現(xiàn)如下圖所示的界面,我們可以選擇要用的寄存器,那么光標移動到BSSR上點擊回車都可以選擇。由于BSSR寄存器都是置1有效,因此我們要對寄存器的某一位置1,如果直接用二進制或者16進制位進行|=運算的話,程序會顯得過于冗雜,于是ST公司給每一個IO口做了一個宏定義。代碼如下圖,看起來很可怕,其實原理很簡單,而且對后面的操作寄存器位非常有幫助。

還有一個細節(jié)要注意一下,一會我們要進入主函數(shù)測試剛才寫的程序,我們要把這個程序在頭文件里定義一下,才能被主函數(shù)方便調(diào)用

主函數(shù)的操作(測試)

現(xiàn)在看回主函數(shù)這兩行代碼我們把它們刪掉,如圖

改用我們剛寫的函數(shù),第一個參數(shù)改成GPIOB,第二個參數(shù)改成GPIO_Pin_0如圖所示,

? ? ?由于ODR寄存器默認置0,所以在GPIO_SetBits之前的代碼操作下燈是亮著的,將它置位之后,我們可以看到燈滅了。

? ? ?同理可得,復(fù)位的函數(shù),也是兩個參數(shù),只不過作用是置0的。大家依葫蘆畫瓢看看能不能寫出來,發(fā)在評論區(qū)。我會精選正確答案。

————————————————


版權(quán)聲明:本文為CSDN博主「飛天大司馬」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。




野火STM32學(xué)習(xí)筆記的評論 (共 條)

分享到微博請遵守國家法律
来凤县| 米易县| 招远市| 沂南县| 闻喜县| 嘉荫县| 五原县| 漳州市| 三原县| 鄢陵县| 冷水江市| 新晃| 石首市| 义马市| 衡东县| 台南市| 津南区| 都昌县| 盐津县| 呼伦贝尔市| 湛江市| 民勤县| 汨罗市| 平湖市| 乌兰浩特市| 额敏县| 常德市| 含山县| 台东市| 合川市| 瓮安县| 建阳市| 滦南县| 泸西县| 南充市| 仁布县| 元谋县| 神木县| 聂拉木县| 高陵县| 克山县|