0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32速成筆記(1)概述

冬至子 ? 來源:二土電子 ? 作者:二土電子 ? 2023-10-23 16:15 ? 次閱讀

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è)窗口,能夠查看該變量的值。

圖片

查看變量值

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微處理器
    +關(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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32速成

    喲管STM32速成貼?求助
    發(fā)表于 01-23 14:34

    速成Cadence Allegro的方法概述

    4周小白成為大神,速成Cadence Allegro 讓你走向職場巔峰!.pdf(114.83 KB)
    發(fā)表于 10-08 07:49

    STM32電源監(jiān)控器概述原因

    MCU學(xué)習(xí)筆記電源管理系統(tǒng)1. STM32電源監(jiān)控器概述2. STM32電源3. HAL庫配置PVD實(shí)例
    發(fā)表于 11-03 07:01

    筆記概述

    筆記概述          &nbs
    發(fā)表于 12-18 10:10 ?371次閱讀

    筆記本電腦選購與使用常識(shí)(高手速成)

    筆記本電腦選購與使用常識(shí)(高手速成) 專家建議,在筆記本電腦選購時(shí),一般來講,應(yīng)該從價(jià)格、性能、質(zhì)量和服務(wù)4個(gè)方面綜合考慮
    發(fā)表于 01-20 11:51 ?755次閱讀

    筆記本屏幕測試速成

    筆記本屏幕測試速成篇   暑期的到來,廣大學(xué)生朋友著實(shí)給本已經(jīng)垂死掙扎的市場注入了一針強(qiáng)心劑,不過今天我們討論的并不
    發(fā)表于 01-23 08:59 ?1240次閱讀

    STM32各模塊學(xué)習(xí)筆記

    STM32個(gè)模塊學(xué)習(xí)筆記 目錄 STM32筆記之一 中斷優(yōu)先級(jí).....................................................
    發(fā)表于 11-30 03:32 ?3131次閱讀

    MCU學(xué)習(xí)筆記_STM32低功耗模式概述

    MCU學(xué)習(xí)筆記電源管理系統(tǒng)1. STM32低功耗模式概述2. 寄存器和庫函數(shù)配置3. HAL庫配置PVD實(shí)例1.
    發(fā)表于 10-28 17:36 ?9次下載
    MCU學(xué)習(xí)<b class='flag-5'>筆記</b>_<b class='flag-5'>STM32</b>低功耗模式<b class='flag-5'>概述</b>

    STM32學(xué)習(xí)筆記1)——LED和蜂鳴器

    閱讀前提示: 我們使用的板子是正點(diǎn)原子的ALIENTEK精英STM32F103。本文使用固件庫進(jìn)行編程,因?yàn)槭褂霉碳炀幊梯^為方便,且閱讀程序也較易理解。STM32學(xué)習(xí)筆記1)——L
    發(fā)表于 11-26 11:51 ?15次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(<b class='flag-5'>1</b>)——LED和蜂鳴器

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)之keil5編程與GPIO開發(fā)

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)之keil5編程與GPIO開發(fā)
    發(fā)表于 11-30 12:36 ?4次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b><b class='flag-5'>1</b>——軟硬件基礎(chǔ)之keil5編程與GPIO開發(fā)

    STM32筆記)一、STM32特點(diǎn)

    我用的是正點(diǎn)的STM32F767來進(jìn)行學(xué)習(xí)。之后的這個(gè)系列筆記開頭未標(biāo)明的話,用的也是這個(gè)板子。一、STM32 特點(diǎn)1、什么是
    發(fā)表于 12-04 14:36 ?8次下載
    (<b class='flag-5'>STM32</b><b class='flag-5'>筆記</b>)一、<b class='flag-5'>STM32</b>特點(diǎn)

    STM32學(xué)習(xí)筆記--------day1

    STM32學(xué)習(xí)筆記--------day1
    發(fā)表于 12-05 20:36 ?8次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>--------day<b class='flag-5'>1</b>

    stm32學(xué)習(xí)筆記1

    此博客僅個(gè)人學(xué)習(xí)筆記,用以本人學(xué)習(xí)stm32的記錄、分析、總結(jié)。有所錯(cuò)漏再所難免,有則改之無則加勉。這里就直接以通俗的語言來記錄了,大家見諒。學(xué)習(xí)stm32首先我們要有兩個(gè)平臺(tái),一個(gè)是安裝在電腦上
    發(fā)表于 01-18 08:37 ?59次下載
    <b class='flag-5'>stm32</b>學(xué)習(xí)<b class='flag-5'>筆記</b><b class='flag-5'>1</b>

    AN5597_STM32WB3或5xxx和STM32WB1xxx應(yīng)用筆記

    AN5597_STM32WB3或5xxx和STM32WB1xxx應(yīng)用筆記
    發(fā)表于 11-21 08:11 ?0次下載
    AN5597_<b class='flag-5'>STM32</b>WB3或5xxx和<b class='flag-5'>STM32WB1</b>xxx應(yīng)用<b class='flag-5'>筆記</b>

    STM32速成筆記(6)—定時(shí)器

    關(guān)于什么是定時(shí)器,簡單來講,就是是用來定時(shí)的。STM32F103ZET6有兩個(gè)基本定時(shí)器TIM6和TIM7,四個(gè)通用定時(shí)器TIM2~TIM5和兩個(gè)高級(jí)定時(shí)器TIM1,TIM8。
    的頭像 發(fā)表于 10-24 09:41 ?4179次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>速成</b><b class='flag-5'>筆記</b>(6)—定時(shí)器