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

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

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

STM32C011開發(fā)(2)----nBOOT_SEL設(shè)置

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2024-12-16 17:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

STM32CubeProgrammer (STM32CubeProg) 是一款用于編程STM32產(chǎn)品的全功能多操作系統(tǒng)軟件工具。
它提供了一個易用高效的環(huán)境,通過調(diào)試接口(JTAG和SWD)和自舉程序接口(UARTUSB DFU、I2C、SPI和CAN)讀取、寫入及驗證器件內(nèi)存。
STM32CubeProgrammer的功能廣泛,可以對STM32內(nèi)部存儲器(如Flash、RAM和OTP)以及外部存儲器進(jìn)行編程。

最近在弄ST的教程,需要樣片的可以加群申請:615061293/925643491 。

硬件準(zhǔn)備

首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是自己繪制的開發(fā)板,需要的可以進(jìn)行申請。

主控為STM32C011F4P6

視頻教學(xué)

[https://www.bilibili.com/video/BV1gnBbYiERj/]

樣品申請

[https://www.wjx.top/vm/OhcKxJk.aspx#]

源碼下載

參考程序

[https://github.com/CoreMaker-lab/STM32C011_TSSOP20]

[https://gitee.com/CoreMaker/STM32C011_TSSOP20]

自舉模式

AN2606在自舉模式部分,該文檔介紹了 STM32C011 的自舉功能和選項:

USART1 自舉程序:
● 啟用狀態(tài):USART1 被啟用,用于通信。
● USART1_RX 引腳:PA10 被配置為接收引腳(輸入),并啟用了上拉電阻
● USART1_TX 引腳:PA9 被配置為發(fā)送引腳(輸出),設(shè)置為推挽模式,同時啟用了上拉電阻。
● 配置參數(shù):初始化為 8 位數(shù)據(jù),無校驗位,1 個停止位。

在 WLCSP12、SO8N、TSSOP20 和 UFQFN20 封裝中,USART1 的 PA9/PA10 引腳可能與 PA11/PA12 引腳重疊。

復(fù)用管腳如下所示。

BOOT0設(shè)置

BOOT0可以通過CN9跳線帽進(jìn)行設(shè)置。

PA14 與 BOOT0 功能共用:需謹(jǐn)慎使用,因為調(diào)試器可能會修改 BOOT0 引腳值。

進(jìn)入系統(tǒng)存儲器模式(Bootloader):
● 設(shè)置 nBOOT_SEL = 0, nBOOT1 = 1, BOOT0 = 1。
● 啟用 Bootloader 模式,可通過 USART、I2C 等方式進(jìn)行固件更新。

配置 nBOOT_SEL

選項字節(jié)寄存器 (FLASH_OPTR) 用于存儲芯片的啟動配置、安全性和一些功能性參數(shù),包括:
● 啟動模式選擇 (nBOOT_SEL, nBOOT0, nBOOT1)。
看門狗模式選擇(獨(dú)立看門狗 IWDG_SW 和窗口看門狗 WWDG_SW)。
● 低功耗模式的復(fù)位控制 (nRST_STOP, nRST_STDBY, nRST_SHDW)。
● 讀保護(hù)等級 (RDP)。
● SRAM 奇偶校驗功能 (RAM_PARITY_CHECK)。
● 高速外部時鐘映射功能 (HSE_NOT_REMAPPED)。

在stm32c0xx_hal_flash_ex.c中,F(xiàn)LASH_OB_OptrConfig 函數(shù)的主要作用是配置 STM32 微控制器的 選項字節(jié)(Option Bytes) 中的 OPTR 寄存器(Option Byte Register)。該寄存器包含了用戶配置的一些關(guān)鍵功能位,例如:
● 啟動模式相關(guān)配置(如 nBOOT_SEL、nBOOT0、nBOOT1)

建議配合更高層的 HAL_FLASHEx_OBProgram 函數(shù)使用,因為后者封裝了 FLASH_OB_OptrConfig,提供了更強(qiáng)的可讀性和靈活性。

以下代碼展示了如何使用 HAL_FLASHEx_OBProgram 函數(shù)來啟用或禁用 nBOOT_SEL。

static void Configure_nBOOT_SEL(uint8_t enable)
{
   FLASH_OBProgramInitTypeDef OBInit;

    // 讀取當(dāng)前 Option Bytes 配置
    HAL_FLASHEx_OBGetConfig(&OBInit);

    // 檢查是否需要修改 nBOOT_SEL
    if (((OBInit.USERConfig & OB_USER_NBOOT_SEL) == OB_BOOT0_FROM_OB) != enable)
    {
        // 解鎖 Flash
        if (HAL_FLASH_Unlock() == HAL_OK)
        {
            // 解鎖 Option Bytes
            if (HAL_FLASH_OB_Unlock() == HAL_OK)
            {
                // 配置選項字節(jié)
                OBInit.OptionType = OPTIONBYTE_USER;
                OBInit.USERType = OB_USER_NBOOT_SEL;
                OBInit.USERConfig = enable ? OB_USER_NBOOT_SEL : 0;

                // 寫入新的配置
                if (HAL_FLASHEx_OBProgram(&OBInit) != HAL_OK)
                {
                    printf("Error: Option Bytes Programming failed!n");
                }

                // 啟動 Option Bytes 配置
                if (HAL_FLASH_OB_Launch() != HAL_OK)
                {
                    printf("Error: Option Bytes Launch failed!n");
                }

                // 鎖定 Option Bytes 和 Flash
                HAL_FLASH_OB_Lock();
                HAL_FLASH_Lock();
            }
            else
            {
                printf("Error: Failed to unlock Option Bytes!n");
            }
        }
        else
        {
            printf("Error: Failed to unlock Flash!n");
        }
    }



    else
    {
        printf("nBOOT_SEL is already set to the desired value.n");
    }    


}

添加到主程序中。

/* USER CODE BEGIN SysInit */
    HAL_Delay(100);
    Configure_nBOOT_SEL(0);    
  /* USER CODE END SysInit */

在STM32CubeProgrammer中可以查看nBOOT_SEL的狀態(tài)。

生成STM32CUBEMX

用STM32CUBEMX生成例程,這里使用MCU為STM32C011F4P6。

配置時鐘樹,配置時鐘為48M。

串口配置

查看原理圖,PA0和PA1設(shè)置為開發(fā)板的串口。

配置串口,速率為115200。

LED配置

查看原理圖,對應(yīng)LED分別為PA4,PA5,PA6。

配置如下所示。

堆棧設(shè)置

若無法正常運(yùn)行需要修改優(yōu)化等級。

串口重定向

打開魔術(shù)棒,勾選MicroLIB
image.png

在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函數(shù)聲明和串口重定向:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

主循環(huán)

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        HAL_GPIO_WritePin(LED1_GPIO_Port, LED5_Pin, GPIO_PIN_SET);        
        HAL_GPIO_WritePin(LED2_GPIO_Port, LED6_Pin, GPIO_PIN_SET);            
        HAL_GPIO_WritePin(LED3_GPIO_Port, LED7_Pin, GPIO_PIN_SET);        
        printf("LED ON!n");
        HAL_Delay(1000);
        HAL_GPIO_WritePin(LED1_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);        
        HAL_GPIO_WritePin(LED2_GPIO_Port, LED6_Pin, GPIO_PIN_RESET);            
        HAL_GPIO_WritePin(LED3_GPIO_Port, LED7_Pin, GPIO_PIN_RESET);        
        printf("LED OFF!n");        
        HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示

審核編輯 黃宇

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

    關(guān)注

    37

    文章

    7140

    瀏覽量

    125497
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11031

    瀏覽量

    364378
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    stm32c011f6執(zhí)行進(jìn)入低功耗的API以后待機(jī)電流還有79uA是怎么回事?

    (PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI); } stm32c011f6執(zhí)行 HAL_PWR_EnterSTOPMode以后待機(jī)電流79uA,嘗試執(zhí)行
    發(fā)表于 03-11 06:03

    采用cubemx將stm32c011的NRST引腳配置成ADC口,輸入一拉低就復(fù)位怎么解決?

    采用cubemx將stm32c011的NRST引腳配置成ADC口,生成程序,輸入為高時候可以正常采樣,但是輸入一拉低就復(fù)位,配置有什么需要注意的嗎?
    發(fā)表于 03-07 08:06

    DLPC3478 LED_SEL_0和LED_SEL_0無輸出是什么原因?qū)е碌模?/a>

    DLPC3478+3005+3010方案,初始化完成后LED_SEL_0和LED_SEL_0無輸出 HOST_IRQ已拉低,軟件也顯示連接成功。單擊投圖時光機(jī)不亮(DMD的VRST、VBIAS
    發(fā)表于 02-20 08:28

    I2C總線設(shè)備地址設(shè)置方法

    通常是一個7位或10位的數(shù)字,用于標(biāo)識總線上的每個設(shè)備。在7位尋址模式下,地址范圍是0x00到0x7F,而在10位尋址模式下,地址范圍是0x000到0x3FF。I2C地址的最低位(LSB)通常用于指示讀/寫操作。 硬件地址設(shè)置 1. 地址引腳配置 許多I
    的頭像 發(fā)表于 01-17 15:17 ?4067次閱讀

    MHMF092L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF092L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF092L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 01-07 19:11
    MHMF092L1<b class='flag-5'>C2</b>-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    MHMF092A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF092A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF092A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 12-24 19:00
    MHMF092A1<b class='flag-5'>C2</b>-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    STM32C011開發(fā)(1)----開發(fā)板測試

    STM32C011F4P6-TSSOP20 評估套件可以使用戶能夠無縫評估 STM32C0 系列TSSOP20 封裝的微控制器功能,基于 ARM Cortex-M0 內(nèi)核,具有高效能和低功耗的特點(diǎn)
    的頭像 發(fā)表于 12-16 17:14 ?1608次閱讀
    <b class='flag-5'>STM32C011</b><b class='flag-5'>開發(fā)</b>(1)----<b class='flag-5'>開發(fā)</b>板測試

    STM32WB55RG開發(fā)(2)----STM32CubeProgrammer燒錄

    程序接口(UART、USB DFU、I2C、SPI和CAN)讀取、寫入及驗證器件內(nèi)存。 STM32CubeProgrammer的功能廣泛,可以對STM32內(nèi)部存儲器(如Flash、RAM和OTP)以及外部存儲器進(jìn)行編程。
    的頭像 發(fā)表于 12-16 15:52 ?1891次閱讀
    <b class='flag-5'>STM32</b>WB55RG<b class='flag-5'>開發(fā)</b>(<b class='flag-5'>2</b>)----<b class='flag-5'>STM32</b>CubeProgrammer燒錄

    STM32H503開發(fā)(2)----STM32CubeProgrammer燒錄

    STM32CubeProgrammer (STM32CubeProg) 是一款用于編程STM32產(chǎn)品的全功能多操作系統(tǒng)軟件工具。 它提供了一個易用高效的環(huán)境,通過調(diào)試接口(JTAG和SWD)和自舉程序接口(UART、USB D
    的頭像 發(fā)表于 11-28 09:25 ?2486次閱讀
    <b class='flag-5'>STM32</b>H503<b class='flag-5'>開發(fā)</b>(<b class='flag-5'>2</b>)----<b class='flag-5'>STM32</b>CubeProgrammer燒錄

    請問LMX2594 PFD_DLY_SEL寄存器的作用是什么?

    PFD_DLY_SEL寄存器的作用是什么?手冊只寫如何設(shè)置并沒有解釋功能。 假設(shè)我們設(shè)置MASH_ORDER=3,PFD_DLY_SEL為3。 當(dāng)
    發(fā)表于 11-12 08:27

    MHMF082L1C2M-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF082L1C2M-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF082L1C2M-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 11-04 19:02
    MHMF082L1<b class='flag-5'>C2</b>M-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    MHMF082A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF082A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF082A1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 10-28 18:37
    MHMF082A1<b class='flag-5'>C2</b>-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    MHMF042L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF042L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF042L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 10-09 19:27
    MHMF042L1<b class='flag-5'>C2</b>-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    stm32用串口燒錄怎么設(shè)置

    準(zhǔn)備工作 確保您擁有STM32開發(fā)板和相應(yīng)的硬件設(shè)備,如USB轉(zhuǎn)串口模塊。 安裝STM32CubeMX和STM32CubeProgrammer軟件,這些是ST官方提供的工具,用于配置和
    的頭像 發(fā)表于 08-22 09:33 ?3411次閱讀

    MHMF022L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF022L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置例相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF022L1C2-網(wǎng)絡(luò)式伺服A6N 設(shè)置
    發(fā)表于 08-07 19:03
    MHMF022L1<b class='flag-5'>C2</b>-網(wǎng)絡(luò)式伺服A6N <b class='flag-5'>設(shè)置</b>例 松下

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品