国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

STM32CubeMX學(xué)習(xí)筆記(51)——讀寫(xiě)內(nèi)部Flash

發(fā)布者:VelvetWhisper最新更新時(shí)間:2025-02-11 來(lái)源: jianshu關(guān)鍵字:STM32CubeMX  讀寫(xiě)  內(nèi)部Flash 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一、簡(jiǎn)介

在STM32芯片內(nèi)部有一個(gè) FLASH 存儲(chǔ)器,它主要用于存儲(chǔ)代碼,我們?cè)陔娔X上編寫(xiě)好應(yīng)用程序后,使用下載器把編譯后的代碼文件燒錄到該內(nèi)部 FLASH 中,由于 FLASH 存儲(chǔ)器的內(nèi)容在掉電后不會(huì)丟失,芯片重新上電復(fù)位后,內(nèi)核可從內(nèi)部 FLASH 中加載代碼并運(yùn)行。


STM32 的內(nèi)部 FLASH 包含主存儲(chǔ)器、系統(tǒng)存儲(chǔ)器以及選項(xiàng)字節(jié)區(qū)域,它們的地址分布及大小見(jiàn)下表


  • 主存儲(chǔ)器

一般我們說(shuō) STM32 內(nèi)部 FLASH 的時(shí)候,都是指這個(gè)主存儲(chǔ)器區(qū)域,它是存儲(chǔ)用戶(hù)應(yīng)用程序的空間,芯片型號(hào)說(shuō)明中的 256K FLASH、512K FLASH 都是指這個(gè)區(qū)域的大小。

主存儲(chǔ)器分為 256 頁(yè),每頁(yè)大小為 2KB,共 512KB。這個(gè)分頁(yè)的概念,實(shí)質(zhì)就是 FLASH 存儲(chǔ)器的扇區(qū),與其它 FLASH 一樣,在寫(xiě)入數(shù)據(jù)前,要先按頁(yè)(扇區(qū))擦除。

注意上表中的主存儲(chǔ)器是本實(shí)驗(yàn)板使用的 STM32VET6 型號(hào)芯片的參數(shù),即 STM32F1 大容量產(chǎn)品。若使用超大容量、中容量或小容量產(chǎn)品,它們主存儲(chǔ)器的頁(yè)數(shù)量、頁(yè)大小均有不同,使用的時(shí)候要注意區(qū)分。
主存儲(chǔ)器是以頁(yè)為單位劃分的。stm32根據(jù)FLASH主存儲(chǔ)塊容量、頁(yè)面的不同,系統(tǒng)存儲(chǔ)器的不同,分為小容量、中容量、大容量、互聯(lián)型,共四類(lèi)產(chǎn)品。

  • 小容量產(chǎn)品:主存儲(chǔ)塊1-32KB,     每頁(yè)1KB。系統(tǒng)存儲(chǔ)器2KB

  • 中容量產(chǎn)品:主存儲(chǔ)塊64-128KB,   每頁(yè)1KB。系統(tǒng)存儲(chǔ)器2KB

  • 大容量產(chǎn)品:主存儲(chǔ)塊256KB以上,  每頁(yè)2KB。系統(tǒng)存儲(chǔ)器2KB

  • 互聯(lián)型產(chǎn)品:主存儲(chǔ)塊256KB以上,  每頁(yè)2KB。系統(tǒng)存儲(chǔ)器18KB

  • 系統(tǒng)存儲(chǔ)區(qū)

系統(tǒng)存儲(chǔ)區(qū)是用戶(hù)不能訪問(wèn)的區(qū)域,它在芯片出廠時(shí)已經(jīng)固化了啟動(dòng)代碼,它負(fù)責(zé)實(shí)現(xiàn)串口、USB 以及 CAN 等 ISP 燒錄功能。

  • 選項(xiàng)字節(jié)

選項(xiàng)字節(jié)用于配置 FLASH 的讀寫(xiě)保護(hù)、待機(jī)/停機(jī)復(fù)位、軟件/硬件看門(mén)狗等功能,這部分共 16 字節(jié)。可以通過(guò)修改 FLASH 的選項(xiàng)控制寄存器修改。

二、新建工程

1. 打開(kāi) STM32CubeMX 軟件,點(diǎn)擊“新建工程”


2. 選擇 MCU 和封裝


3. 配置時(shí)鐘
RCC 設(shè)置,選擇 HSE(外部高速時(shí)鐘) 為 Crystal/Ceramic Resonator(晶振/陶瓷諧振器)


選擇 Clock Configuration,配置系統(tǒng)時(shí)鐘 SYSCLK 為 72MHz
修改 HCLK 的值為 72 后,輸入回車(chē),軟件會(huì)自動(dòng)修改所有配置


4. 配置調(diào)試模式
非常重要的一步,否則會(huì)造成第一次燒錄程序后續(xù)無(wú)法識(shí)別調(diào)試器
SYS 設(shè)置,選擇 Debug 為 Serial Wire


三、添加串口打印

串口打印功能查看 STM32CubeMX學(xué)習(xí)筆記(6)——USART串口使用

四、生成代碼

輸入項(xiàng)目名和項(xiàng)目路徑


選擇應(yīng)用的 IDE 開(kāi)發(fā)環(huán)境 MDK-ARM V5


每個(gè)外設(shè)生成獨(dú)立的 ’.c/.h’ 文件
不勾:所有初始化代碼都生成在 main.c
勾選:初始化代碼生成在對(duì)應(yīng)的外設(shè)文件。 如 GPIO 初始化代碼生成在 gpio.c 中。


點(diǎn)擊 GENERATE CODE 生成代碼


五、查看工程的空間分布

由于內(nèi)部 FLASH 本身存儲(chǔ)有程序數(shù)據(jù),若不是有意刪除某段程序代碼,一般不應(yīng)修改程序空間的內(nèi)容,所以在使用內(nèi)部 FLASH 存儲(chǔ)其它數(shù)據(jù)前需要了解哪一些空間已經(jīng)寫(xiě)入了程序代碼,存儲(chǔ)了程序代碼的扇區(qū)都不應(yīng)作任何修改。通過(guò)查詢(xún)應(yīng)用程序編譯時(shí)產(chǎn)生
的“*.map”后綴文件,可以了解程序存儲(chǔ)到了哪些區(qū)域。


打開(kāi) map 文件后,查看文件最后部分的區(qū)域,可以看到一段以 “Memory Map of the image” 開(kāi)頭的記錄(若找不到可用查找功能定位)


觀察表中的最后一項(xiàng),它的基地址是 0x0800175c,大小為 0x00000020,可知它占用的
最高的地址空間為 0x0800177c,跟執(zhí)行區(qū)域的最高地址 0x0000177c 一樣,但它們比加載
區(qū)域說(shuō)明中的最高地址 0x80017a8 要小,所以我們以加載區(qū)域的大小為準(zhǔn)。對(duì)比表 45-1 的
內(nèi)部 FLASH 頁(yè)地址分布表,可知僅使用頁(yè) 0 至頁(yè) 2 就可以完全存儲(chǔ)本應(yīng)用程序,所以從頁(yè)
3(地址 0x08001800)后的存儲(chǔ)空間都可以作其它用途,使用這些存儲(chǔ)空間時(shí)不會(huì)篡改應(yīng)用程
序空間的數(shù)據(jù)。


六、官方HAL庫(kù)Flash操作常見(jiàn)函數(shù)

//源文件: stm32f1xx_hal_flash.c和stm32f1xx_hal_flash_ex.c

HAL_FLASH_Unlock(void); //解鎖函數(shù)

HAL_FLASH_Lock(void);   //鎖定函數(shù)

HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);   //寫(xiě)操作函數(shù)

HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);   //擦除函數(shù)

HAL_FLASH_WaitForLastOperation(uint32_t Timeout);   //等待操作完成函數(shù)


HAL庫(kù)中定義了一個(gè)Flash初始化結(jié)構(gòu)體,如下:

/**

  * @brief  FLASH Erase structure definition

  */

typedef struct

{

  uint32_t TypeErase;   /*!< Mass erase or page erase.

                             This parameter can be a value of @ref FLASH_Type_Erase */

  uint32_t Banks;       /*!< Select bank to erase.

                             This parameter must be a value of @ref FLASH_Banks

                             (FLASH_BANK_BOTH should be used only for mass erase) */

  uint32_t Page;        /*!< Initial Flash page to erase when page erase is disabled

                             This parameter must be a value between 0 and (max number of pages in the bank - 1)

                             (eg : 255 for 1MB dual bank) */

  uint32_t NbPages;     /*!< Number of pages to be erased.

                             This parameter must be a value between 1 and (max number of pages in the bank - value of initial page)*/

} FLASH_EraseInitTypeDef;


七、讀取Flash

7.1 讀取函數(shù)

/* FLASH大?。?a href="http://m.womende.cn/zhuanti/ez9aD4" style="color:#4595e6;" target="_blank">STM32F103VET6:256K */

#define STM32FLASH_SIZE         0x00040000UL

/* FLASH起始地址 */

#define STM32FLASH_BASE         FLASH_BASE

/* FLASH結(jié)束地址 */

#define STM32FLASH_END          (STM32FLASH_BASE | STM32FLASH_SIZE)

/* FLASH頁(yè)大?。?K */

#define STM32FLASH_PAGE_SIZE    FLASH_PAGE_SIZE

/* FLASH總頁(yè)數(shù) */

#define STM32FLASH_PAGE_NUM     (STM32FLASH_SIZE / STM32FLASH_PAGE_SIZE)


#define WRITE_START_ADDR        ((uint32_t)0x08008000)

#define WRITE_END_ADDR          ((uint32_t)0x0800C000)


/**

 @brief 內(nèi)部Flash讀取

 @param address -[in] 讀取的地址

 @param pData -[out] 指向需要操作的數(shù)據(jù)

 @param dataLen -[in] 數(shù)據(jù)長(zhǎng)度

 @return 讀出成功的字節(jié)數(shù)

*/

uint32_t Internal_ReadFlash(uint32_t addrStart, void *pData, uint32_t dataLen)

{

    uint32_t nread = dataLen;

    uint8_t *pBuffer = (uint8_t *)pData;

    const uint8_t *pAddr = (const uint8_t *)addrStart;


    if(!pData || addrStart < STM32FLASH_BASE || addrStart > STM32FLASH_END)

    {

        return 0;

    }


    while(nread >= sizeof(uint32_t) && (((uint32_t)pAddr) <= (STM32FLASH_END - 4)))

    {

        *(uint32_t *)pBuffer = *(uint32_t *)pAddr;

        pBuffer += sizeof(uint32_t);

        pAddr += sizeof(uint32_t);

        nread -= sizeof(uint32_t);

    }


    while(nread && (((uint32_t)pAddr) < STM32FLASH_END))

    {

        *pBuffer++ = *pAddr++;

        nread--;

    }


    return dataLen - nread;

}


8、寫(xiě)入Flash

8.1 寫(xiě)入過(guò)程

8.1.1 解鎖

由于內(nèi)部 FLASH 空間主要存儲(chǔ)的是應(yīng)用程序,是非常關(guān)鍵的數(shù)據(jù),為了防止誤操作修改了這些內(nèi)容,芯片復(fù)位后默認(rèn)會(huì)給控制寄存器 FLASH_CR 上鎖,這個(gè)時(shí)候不允許設(shè)置 FLASH 的控制寄存器,從而不能修改 FLASH 中的內(nèi)容。

所以對(duì) FLASH 寫(xiě)入數(shù)據(jù)前,需要先給它解鎖。解鎖的操作步驟如下:

  1. 往 FPEC 鍵寄存器 FLASH_KEYR 中寫(xiě)入 KEY1 = 0x45670123

  2. 再往 FPEC 鍵寄存器 FLASH_KEYR 中寫(xiě)入 KEY2 = 0xCDEF89AB

8.1.2 頁(yè)擦除

在寫(xiě)入新的數(shù)據(jù)前,需要先擦除存儲(chǔ)區(qū)域,STM32 提供了頁(yè)(扇區(qū))擦除指令和整個(gè) FLASH 擦除(批量擦除)的指令,批量擦除指令僅針對(duì)主存儲(chǔ)區(qū)。
頁(yè)擦除的過(guò)程如下:

  1. 檢查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以確認(rèn)當(dāng)前未執(zhí)行任何 Flash 操作;

  2. 在 FLASH_CR 寄存器中,將“激活頁(yè)擦除寄存器位 PER ”置 1;

  3. 用 FLASH_AR 寄存器選擇要擦除的頁(yè);

  4. 將 FLASH_CR 寄存器中的“開(kāi)始擦除寄存器位 STRT ”置 1,開(kāi)始擦除;

  5. 等待 BSY 位被清零時(shí),表示擦除完成。

/**

 @brief 內(nèi)部Flash頁(yè)擦除

 @param pageAddress -[in] 擦除的起始地址

 @param nbPages -[in] 擦除頁(yè)數(shù)

 @return 0 - 成功;-1 - 失敗

*/

int Internal_ErasePage(uint32_t pageAddress, uint32_t nbPages)

{

    uint32_t pageError = 0;

    FLASH_EraseInitTypeDef eraseInit;

    eraseInit.TypeErase = FLASH_TYPEERASE_PAGES;

    eraseInit.PageAddress = pageAddress;

    eraseInit.Banks = FLASH_BANK_1;

    eraseInit.NbPages = 1;

    if(HAL_FLASHEx_Erase(&eraseInit, &pageError) != HAL_OK)

    {

        return -1;

    }

    return 0;

}


8.1.3 寫(xiě)入數(shù)據(jù)

擦除完畢后即可寫(xiě)入數(shù)據(jù),寫(xiě)入數(shù)據(jù)的過(guò)程并不是僅僅使用指針向地址賦值,賦值前還需要配置一系列的寄存器,步驟如下:

  1. 檢查 FLASH_SR 中的 BSY 位,以確認(rèn)當(dāng)前未執(zhí)行任何其它的內(nèi)部 Flash 操作;

  2. 將 FLASH_CR 寄存器中的 “激活編程寄存器位 PG” 置 1;

  3. 向指定的 FLASH 存儲(chǔ)器地址執(zhí)行數(shù)據(jù)寫(xiě)入操作,每次只能以 16 位的方式寫(xiě)入;

  4. 等待 BSY 位被清零時(shí),表示寫(xiě)入完成。


8.2 寫(xiě)入函數(shù)

/**

 @brief 內(nèi)部Flash寫(xiě)入

 @param address -[in] 寫(xiě)入的地址

 @param pData -[in] 指向需要操作的數(shù)據(jù)

 @param dataLen -[in] 數(shù)據(jù)長(zhǎng)度

 @return 實(shí)際寫(xiě)入的數(shù)據(jù)量,單位:字節(jié)

*/

uint32_t Internal_WriteFlash(uint32_t addrStart, const uint16_t *pData, uint32_t dataLen)

{   

    uint32_t i = 0;

    uint32_t pagepos = 0;         // 頁(yè)位置

    uint32_t pageoff = 0;         // 頁(yè)內(nèi)偏移地址

    uint32_t pagefre = 0;         // 頁(yè)內(nèi)空余空間

    uint32_t offset = 0;          // Address在FLASH中的偏移

    uint32_t nwrite = dataLen;    // 記錄剩余要寫(xiě)入的數(shù)據(jù)量

    const uint16_t *pBuffer = (const uint16_t *)pData;

    

    /* 非法地址 */

    if(addrStart < STM32FLASH_BASE || addrStart > (STM32FLASH_END - 2) || dataLen == 0 || pData == NULL)

    {

        return 0;

    }

    

    /* 解鎖FLASH */

    HAL_FLASH_Unlock();


    /* 計(jì)算偏移地址 */

    offset = addrStart - STM32FLASH_BASE;

    /* 計(jì)算當(dāng)前頁(yè)位置 */

    pagepos = offset / STM32FLASH_PAGE_SIZE;

    /* 計(jì)算要寫(xiě)數(shù)據(jù)的起始地址在當(dāng)前頁(yè)內(nèi)的偏移地址 */

    pageoff = ((offset % STM32FLASH_PAGE_SIZE) >> 1);

    /* 計(jì)算當(dāng)前頁(yè)內(nèi)空余空間 */

    pagefre = ((STM32FLASH_PAGE_SIZE >> 1) - pageoff);

    /* 要寫(xiě)入的數(shù)據(jù)量低于當(dāng)前頁(yè)空余量 */

    if(nwrite <= pagefre)

    {

        pagefre = nwrite;

    }

    

    while(nwrite != 0)

    {

        /* 檢查是否超頁(yè) */

        if(pagepos >= STM32FLASH_PAGE_NUM)

        {

            break;

        }


        /* 讀取一頁(yè) */

        Internal_ReadFlash(STM32FLASH_BASE + pagepos * STM32FLASH_PAGE_SIZE, FlashBuffer, STM32FLASH_PAGE_SIZE);


        /* 檢查是否需要擦除 */

        for(i = 0; i < pagefre; i++)

        {

            if(*(FlashBuffer + pageoff + i) != 0xFFFF) /* FLASH擦出后默認(rèn)內(nèi)容全為0xFF */

            {

                break;

            }

        }


        if(i < pagefre)

        {

            uint32_t count = 0;

            uint32_t index = 0;

            uint32_t PageError = 0;

            FLASH_EraseInitTypeDef pEraseInit;


            /* 擦除一頁(yè) */

            pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;

            pEraseInit.PageAddress = STM32FLASH_BASE + pagepos * STM32FLASH_PAGE_SIZE;

            pEraseInit.Banks = FLASH_BANK_1;

            pEraseInit.NbPages = 1;

            if(HAL_FLASHEx_Erase(&pEraseInit, &PageError) != HAL_OK)

[1] [2]
關(guān)鍵字:STM32CubeMX  讀寫(xiě)  內(nèi)部Flash 引用地址:STM32CubeMX學(xué)習(xí)筆記(51)——讀寫(xiě)內(nèi)部Flash

上一篇:STM32CubeMX學(xué)習(xí)筆記(29)——FreeRTOS實(shí)時(shí)操作系統(tǒng)使用(消息隊(duì)列)
下一篇:STM32F103學(xué)習(xí)筆記(11)——壓力傳感器GZP6859D使用

推薦閱讀最新更新時(shí)間:2025-06-25 20:37

STM32CubeMX GPIO模擬I2C讀寫(xiě)M24C64
一、先了解一下硬件的連接,I2C_SDA和I2C_SCL分別接STM32的PB9、PB6 二、粗閱一下M24C64的數(shù)據(jù)手冊(cè),得知器件地址和存儲(chǔ)器地址,器件地址是8bit,而存儲(chǔ)器地址是16bit 三、下面是M24C64的寫(xiě)時(shí)序 四、下面是M24C64的讀時(shí)序 五、下面是程序編寫(xiě)流程 六、看看時(shí)序參數(shù) 七、好啦!需要的知識(shí)點(diǎn)差不多都提到了開(kāi)始搬磚 1、用STM32CubeMX配置生成工程,并打開(kāi)工程。(具體怎么用這個(gè)軟件這里不講) 2、在我的工程里是這樣配置的 《1》配置USART3,用打印讀出來(lái)的數(shù)據(jù)與寫(xiě)入的是否一致 《2》配置PB6、PB9為開(kāi)漏輸出模式,配置如下: void MX_GPIO_Init(void)
[單片機(jī)]
<font color='red'>STM32CubeMX</font> GPIO模擬I2C<font color='red'>讀寫(xiě)</font>M24C64
STM32對(duì)內(nèi)部Flash的保護(hù)措施
1、STM32對(duì)內(nèi)部Flash的保護(hù)措施 所有STM32的芯片都提供對(duì)Flash的保護(hù),防止對(duì)Flash的非法訪問(wèn) - 寫(xiě)保護(hù)和讀保護(hù)。 1)、讀保護(hù)即大家通常說(shuō)的 加密 ,是作用于整個(gè)Flash存儲(chǔ)區(qū)域。一旦設(shè)置了Flash的讀保護(hù),內(nèi)置的Flash存儲(chǔ)區(qū)只能通過(guò)程序的正常執(zhí)行才能讀出,而不能通過(guò)下述任何一種方式讀出: 通過(guò)調(diào)試器(JTAG或SWD); 從RAM中啟動(dòng)并執(zhí)行的程序; 2)、寫(xiě)保護(hù)是以四頁(yè)(1KB/頁(yè)) Flash存儲(chǔ)區(qū)為單位提供寫(xiě)保護(hù),對(duì)被保護(hù)的頁(yè)實(shí)施編程或擦除操作將不被執(zhí)行,同時(shí)產(chǎn)生操作錯(cuò)誤標(biāo)志。 讀與寫(xiě)設(shè)置的效果見(jiàn)下表: 讀保護(hù) 寫(xiě)保護(hù) 對(duì)Flash的操作功能
[單片機(jī)]
如何使STM32CubeMX新建工程
運(yùn)行STM32CubeMX工具。 單擊新建項(xiàng)目或菜單-》文件-》新建項(xiàng)目。 從Board Selector部分,過(guò)濾以選擇和使用 NUCLEO-L476RG 板: 檢查Nucleo64類(lèi)型。 檢查MCU 系列上的STM32L4。 使用板選擇器選擇NUCLEO-L476RG板: 單擊啟動(dòng)項(xiàng)目繼續(xù)。 AnswerYes使用默認(rèn)模式初始化所有外圍設(shè)備?彈出窗口。 2引出線配置↑ 在SYS peripheral下的Pinout選項(xiàng)卡中驗(yàn)證SerialWire是否被選為 Debug 接口: 相應(yīng)的引腳 PA13 和 PA14 已自動(dòng)分配和配置。 選擇板后,STM32CubeMX 允許自動(dòng)為板設(shè)置引腳分配,包括通信接口、LED 和其他功能
[單片機(jī)]
如何使<font color='red'>STM32CubeMX</font>新建工程
STM32CUBEMX(9)--ADC通過(guò)輪詢(xún)方式讀取,USART打印
概述 本章通過(guò)使用模數(shù)轉(zhuǎn)換器(ADC),通過(guò)輪詢(xún)方式采集多個(gè)ADC通道電壓。 之前已經(jīng)做過(guò)DMA方式采樣,詳情請(qǐng)查看: https://blog.csdn.net/qq_24312945/article/details/106557538 硬件準(zhǔn)備 首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開(kāi)發(fā)板: 選擇芯片型號(hào) 使用STM32CUBEMX選擇芯片stm32f030r8,如下所示: 配置時(shí)鐘源 HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示: 配置時(shí)鐘樹(shù) STM32F0的最高主頻到48M,所以配置48即可: 串口配置 本次實(shí)驗(yàn)使
[單片機(jī)]
<font color='red'>STM32CUBEMX</font>(9)--ADC通過(guò)輪詢(xún)方式讀取,USART打印
STM32CUBEMX創(chuàng)建X-CUBE-BLE1例程
概述 X-CUBE-BLE1 是 STM32Cube 的擴(kuò)展軟件包。它在 STM32 微控制器上運(yùn)行,包括 BlueNRG-MS 藍(lán)牙低功耗設(shè)備的驅(qū)動(dòng)程序。它基于 STM32Cube 軟件技術(shù)構(gòu)建,可簡(jiǎn)化跨不同 STM32 微控制器的可移植性。該視頻展示了如何在 STM32CubeMX 工具中使用 X-CUBE-BLE1 包。 在這以X-NUCLEO-IDB05A2擴(kuò)展版進(jìn)行演示,主控板選擇NUCLEO-L476RG。 硬件準(zhǔn)備 安裝軟件包 可以選擇下圖的install進(jìn)行安裝。 選擇需要安裝的組件。 選擇芯片型號(hào) 選擇NUCLEO-L476RG開(kāi)發(fā)板。 選擇軟件包 在Software Packs- Select Comp
[單片機(jī)]
<font color='red'>STM32CUBEMX</font>創(chuàng)建X-CUBE-BLE1例程
【STM32】HAL庫(kù) STM32CubeMX教程三----外部中斷(HAL庫(kù)GPIO講解)
前言 上一節(jié)我們講解了STM32CubeMX的基本使用和工程的配置,那么這一節(jié)我們正式來(lái)學(xué)習(xí)CubeMX配置STM32的各個(gè)外設(shè)功能了 今天我們會(huì)詳細(xì)的帶你學(xué)習(xí)STM32CubeMX配置外部中斷,并且講解HAL庫(kù)的GPIO的各種函數(shù),帶你學(xué)習(xí)不一樣的STM32 那么話不多說(shuō),我們開(kāi)始正式的講解吧! 準(zhǔn)備工作: 1、STM32開(kāi)發(fā)板(我的是STM32F407ZE和STM32F103RC) 2、STM32CubeMx軟件、 IDE: Keil軟件 3、STM32F1xx/STM32F4xxHAL庫(kù) 4、按鍵管腳 PA11 PB4 5 LED管腳 PC4 PC5 PB0 PB1 1新建工程 1.1New Pr
[單片機(jī)]
【STM32】HAL庫(kù) <font color='red'>STM32CubeMX</font>教程三----外部中斷(HAL庫(kù)GPIO講解)
STM32CubeMX學(xué)習(xí)筆記3:PWM呼吸燈
MCU:STM32F103ZET6 IDE: MDK-ARM V5 +STM32CubeMX5.0.0 功能描述:將定時(shí)器TIM3全映射到外部端口PC6和PC7,設(shè)置輸出模式為PWM輸出,通過(guò)改變占空比的值實(shí)現(xiàn)LED7/LED8的呼吸燈效果。 需要配置的有:PC6設(shè)置為T(mén)IM3_CH1,PC7設(shè)置為T(mén)IM3_CH2,設(shè)置預(yù)分頻系數(shù)與自動(dòng)重載值,設(shè)置PWM的輸出極性。 一. 在 Pinout&Configuration---System Core中: 1. 首先設(shè)置時(shí)鐘RCC的HSE(外部高速時(shí)鐘)為晶振模式:Crystal/ceramic Resonator 2. 設(shè)置系統(tǒng)SYS的Debug為Serial W
[單片機(jī)]
<font color='red'>STM32CubeMX</font>學(xué)習(xí)筆記3:PWM呼吸燈
STM32CubeMX(Keil5)開(kāi)發(fā)之路——9設(shè)置微秒級(jí)別的延時(shí)
運(yùn)行環(huán)境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 簡(jiǎn)介 本例程主要講解如何對(duì)芯片內(nèi)的Flash進(jìn)行讀寫(xiě),用芯片內(nèi)部Flash可以對(duì)一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無(wú)需加外部得存儲(chǔ)芯片,本例程采用的是STM32F103ZET6,512K大小的Flash。 STM32CubeMx基本配置 基礎(chǔ)配置過(guò)程請(qǐng)參考 STM32CubeMx(Keil5)開(kāi)發(fā)之路—配置第一個(gè)項(xiàng)目 printf重定向例程請(qǐng)參考 STM32CubeMx(Keil5)開(kāi)發(fā)之路——3發(fā)送USART數(shù)據(jù)和printf重定向 STM32CubeMx PWM配置 1——點(diǎn)擊TIM
[單片機(jī)]
<font color='red'>STM32CubeMX</font>(Keil5)開(kāi)發(fā)之路——9設(shè)置微秒級(jí)別的延時(shí)
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved