1. 編程規(guī)范
對(duì)于新手來講,編程規(guī)范以及代碼架構(gòu)也非常重要,有一個(gè)良好的編程規(guī)范和代碼架構(gòu),可以提高開發(fā)效率,方便問題排查以及后續(xù)的程序維護(hù)。這里介紹的編程規(guī)范很簡單,要求不嚴(yán)格。主要有以下幾點(diǎn)
- ? 變量定義 變量定義時(shí)最好是能夠體現(xiàn)該變量所屬的外設(shè)模塊,該變量是否為全局變量,靜態(tài)變量或者指針變量。變量首字母小寫,后面的單詞首字母大寫。舉例如下
// 以ADC模塊為例,需要定義一個(gè)存儲(chǔ)AD值的變量,舉例說明變量命名方式
// 局部變量
u32 adValue = 0;
// 全局變量
u32 gAdcAdValue = 0; // 加一個(gè)g表示是全局變量
// 全局靜態(tài)變量
static u32 gsAdcAdValue = 0; // 加一個(gè)s表示靜態(tài)變量
// 指針變量
u32 *gpAdcAdValue = (u32*)0x2000800; // 加一個(gè)p表示為指針變量
- ? 注釋 函數(shù)注釋舉例如下
/*
*==============================================================================
*函數(shù)名稱:
*函數(shù)功能:
*輸入參數(shù):
*返回值:無
*==============================================================================
*/
對(duì)于程序語句注釋,如果過長可以在程序上方加注釋,如果不是很長可以在程序語句后面空三格輸入注釋。
- ? 函數(shù)命名 函數(shù)命名要體現(xiàn)函數(shù)所屬的層級(jí)以及函數(shù)的功能,關(guān)于層級(jí)會(huì)在代碼架構(gòu)的部分詳細(xì)說明,這里只說一下函數(shù)命名方式。
// 這里以ADC模塊的讀取AD值函數(shù)為例,說明函數(shù)命名方式
void Med_Adc_ReadAdValue (void)
{
// 函數(shù)內(nèi)容
}
這里med指示該函數(shù)位于功能層,屬于ADC模塊,作用是讀取AD值。
- ? if,while等語句的使用 使用if或者while等語句時(shí),需要在括號(hào)前面加一個(gè)空格,如下
if (gAdcAdValue == 0)
{
// 程序語句
}
- ? 四則運(yùn)算 四則運(yùn)算符號(hào)前后需要加空格,包括等于號(hào)等符號(hào)。如下
c = a * b;
2. 程序架構(gòu)
該程序架構(gòu)是本人在工作期間學(xué)習(xí)的,個(gè)人感覺還是有助于提高開發(fā)效率,方便后續(xù)維護(hù)的。主要思想是將一個(gè)模塊的程序分成三部分,每一部分是一個(gè)新建的文件夾,下面都是其他模塊相同層級(jí)的文件。
? Drv 驅(qū)動(dòng)層 該層主要是寫一些模塊的初始化程序,例如GPIO的初始化,ADC的初始化等。
? Med 功能層 該層主要是完成一些功能性的操作,比如讀取AD值,點(diǎn)亮LED等。Med層的函數(shù)可以包含Drv層的函數(shù)。
? App 業(yè)務(wù)層 該層主要是完成一些業(yè)務(wù),比如在點(diǎn)亮LED的基礎(chǔ)上實(shí)現(xiàn)流水燈,比如顯示電壓值等。
四、STM32F103ZET6簡介
STM32F103ZET6是由意法半導(dǎo)體(ST)生產(chǎn)的一款單片機(jī),32指32位。STM32也可以成為32位微處理器。STM32F103ZET6的主時(shí)鐘頻率為72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中斷,ADC,TMR,UART,DMA等。
五、程序模板
在使用Keil5編程時(shí),針對(duì)一個(gè)外設(shè)需要新建對(duì)應(yīng)的.c和.h文件。這里以LED模塊為例,簡單介紹一下本人的常用模板
.c文件
#include "LED.h" // LED頭文件
需要注意的是一定要空出來一格,否則編譯會(huì)報(bào)警告。
文件最后未空一行的警告
.h文件
#ifndef _LED_H
#define _LED_H
#include "sys.h" // STM32庫文件
#endif
.h文件最后也要空出一行,否則也會(huì)有警告。
新建完之后需要將這兩個(gè)文件添加到工程中。
對(duì)于.c文件,右鍵工程文件夾,選擇“Manage Project Items”打開。
點(diǎn)擊“Add Files”將新建的.c文件加入到對(duì)應(yīng)的文件夾下。
添加.c文件
對(duì)于.h文件,點(diǎn)擊魔術(shù)棒,選擇“C/C++”,點(diǎn)擊三個(gè)小點(diǎn)選擇對(duì)應(yīng)文件夾即可。
添加.h文件
六、ST-Link調(diào)試
在開發(fā)過程中學(xué)會(huì)使用Debug調(diào)試,能夠幫助我們更快地定位問題。這里簡單介紹一下利用ST-Link和普中核心板Debug調(diào)試方法。
6.1 硬件連接
首先將ST-Link與核心板連接起來,ST-Link的引腳如下
ST-Link引腳
核心板上并沒有給ST-Link預(yù)留單獨(dú)的接口,而是跟JTAG一起。
其原理圖和硬件圖如下
JTAG原理圖
JTAG硬件圖
由原理圖可知,ST-Link的“SWCLK”連接核心板的“JTCK”,“SWDIO”連接核心板的“JTMS”,“RST”接“RESET”。
VCC不要接,接好ST-Link后再單獨(dú)給核心板供電。
6.2 Keil配置
硬件連接好后開始配置Keil5,關(guān)于ST-Link驅(qū)動(dòng)的安裝這里就不再做介紹了。
? 首先確定ST-Link驅(qū)動(dòng)是否正常
確認(rèn)ST-Link驅(qū)動(dòng)是否安裝正常? 配置Debug 點(diǎn)擊魔術(shù)棒,選擇Debug,下圖處選擇“ST-Link Debugger”。
Debug配置
然后再點(diǎn)擊“Settings”,在“SWIO”右側(cè)不顯示“no target connected”就說明ST-Link連接正常。點(diǎn)擊“Flash Download”
Flash Download
按照?qǐng)D示配置,“Programming Algorithm”只要選擇符合芯片型號(hào)的即可,需要注意的是,只能保留一個(gè)。
Flash Download配置
按照下圖配置“Utilities”。
配置Utilities
至此,Keil5關(guān)于ST-Link的內(nèi)容配置完成,如果小伙伴遇到其他問題,可以多去看一些大佬們的博客。6.3 下載調(diào)試
配置完上面的內(nèi)容后就可以使用ST-Link進(jìn)行下載調(diào)試了。下載的話比較簡單,編譯完成后直接點(diǎn)擊下圖標(biāo)注的圖標(biāo),等到下載完成即可。
下載程序
調(diào)試時(shí)點(diǎn)擊下圖所示按鈕,進(jìn)入Debug調(diào)試。
調(diào)試按鈕
下面簡單介紹一下調(diào)試窗口中各個(gè)按鈕的作用,其他更加詳細(xì)的介紹需要小伙伴自行搜索,這里參考了這篇大佬的文章KEIL5中Debug調(diào)試。
調(diào)試窗口按鈕含義
第一部分從左到右
- ? 復(fù)位
- ? 全速運(yùn)行
- ? 停止
- ? 每點(diǎn)一次運(yùn)行一行,遇到函數(shù)體會(huì)進(jìn)入
- ? 每點(diǎn)一次運(yùn)行一行,遇到函數(shù)體不進(jìn)入,直接執(zhí)行完到下一行
- ? 快速執(zhí)行當(dāng)前函數(shù)剩余語句,然后跳出該函數(shù)體,準(zhǔn)備執(zhí)行下一條
- ? 直接運(yùn)行到光標(biāo)處
第二部分從左到右
- ? 設(shè)置當(dāng)前光標(biāo)處為斷點(diǎn)
- ? 失能當(dāng)前光標(biāo)處斷點(diǎn)
- ? 失能全部斷點(diǎn)
- ? 刪除全部斷點(diǎn)
打斷點(diǎn)的方法比較簡單,直接在想要打斷點(diǎn)的一行左側(cè)點(diǎn)擊一下,出現(xiàn)一個(gè)紅點(diǎn)就表示已經(jīng)添加了斷點(diǎn)。斷點(diǎn)的作用是能夠讓程序運(yùn)行到斷點(diǎn)處停止,有助于我們分析函數(shù)運(yùn)行方式以及變量的變化。
斷點(diǎn)示意圖
調(diào)試時(shí)可以查看某一個(gè)變量的值。選中想要查看的變量,右鍵
查看變量值
此時(shí)就會(huì)出現(xiàn)一個(gè)窗口,能夠查看該變量的值。
查看變量值
-
微處理器
+關(guān)注
關(guān)注
11文章
2244瀏覽量
82267 -
GPIO
+關(guān)注
關(guān)注
16文章
1188瀏覽量
51832 -
LED模塊
+關(guān)注
關(guān)注
0文章
27瀏覽量
12992 -
ADC模塊
+關(guān)注
關(guān)注
1文章
19瀏覽量
11049 -
STM32F103ZET6
+關(guān)注
關(guān)注
9文章
67瀏覽量
21068
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論