0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32C011开发(2)----nBOOT_SEL设置

嵌入式单片机MCU开发 ? 来源:嵌入式单片机MCU开发 ? 作者:嵌入式单片机MCU开 ? 2024-12-16 17:27 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。
它提供了一个易用高效的环境,通过调试接口(JTAG和SWD)和自举程序接口(UARTUSB DFU、I2C、SPI和CAN)读取、写入及验证器件内存。
STM32CubeProgrammer的功能广泛,可以对STM32内部存储器(如Flash、RAM和OTP)以及外部存储器进行编程。

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

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。

主控为STM32C011F4P6

视频教学

[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 自举程序:
● 启用状态:USART1 被启用,用于通信
● USART1_RX 引脚:PA10 被配置为接收引脚(输入),并启用了上拉电阻
● USART1_TX 引脚:PA9 被配置为发送引脚(输出),设置为推挽模式,同时启用了上拉电阻。
● 配置参数:初始化为 8 位数据,无校验位,1 个停止位。

在 WLCSP12、SO8N、TSSOP20 和 UFQFN20 封装中,USART1 的 PA9/PA10 引脚可能与 PA11/PA12 引脚重叠。

复用管脚如下所示。

BOOT0设置

BOOT0可以通过CN9跳线帽进行设置。

PA14 与 BOOT0 功能共用:需谨慎使用,因为调试器可能会修改 BOOT0 引脚值。

进入系统存储器模式(Bootloader):
● 设置 nBOOT_SEL = 0, nBOOT1 = 1, BOOT0 = 1。
● 启用 Bootloader 模式,可通过 USART、I2C 等方式进行固件更新。

配置 nBOOT_SEL

选项字节寄存器 (FLASH_OPTR) 用于存储芯片的启动配置、安全性和一些功能性参数,包括:
● 启动模式选择 (nBOOT_SEL, nBOOT0, nBOOT1)。
看门狗模式选择(独立看门狗 IWDG_SW 和窗口看门狗 WWDG_SW)。
● 低功耗模式的复位控制 (nRST_STOP, nRST_STDBY, nRST_SHDW)。
● 读保护等级 (RDP)。
● SRAM 奇偶校验功能 (RAM_PARITY_CHECK)。
● 高速外部时钟映射功能 (HSE_NOT_REMAPPED)。

在stm32c0xx_hal_flash_ex.c中,FLASH_OB_OptrConfig 函数的主要作用是配置 STM32 微控制器的 选项字节(Option Bytes) 中的 OPTR 寄存器(Option Byte Register)。该寄存器包含了用户配置的一些关键功能位,例如:
● 启动模式相关配置(如 nBOOT_SEL、nBOOT0、nBOOT1)

建议配合更高层的 HAL_FLASHEx_OBProgram 函数使用,因为后者封装了 FLASH_OB_OptrConfig,提供了更强的可读性和灵活性。

以下代码展示了如何使用 HAL_FLASHEx_OBProgram 函数来启用或禁用 nBOOT_SEL。

static void Configure_nBOOT_SEL(uint8_t enable)
{
   FLASH_OBProgramInitTypeDef OBInit;

    // 读取当前 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)
            {
                // 配置选项字节
                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的状态。

生成STM32CUBEMX

用STM32CUBEMX生成例程,这里使用MCU为STM32C011F4P6。

配置时钟树,配置时钟为48M。

串口配置

查看原理图,PA0和PA1设置为开发板的串口。

配置串口,速率为115200。

LED配置

查看原理图,对应LED分别为PA4,PA5,PA6。

配置如下所示。

堆栈设置

若无法正常运行需要修改优化等级。

串口重定向

打开魔术棒,勾选MicroLIB
image.png

在main.c中,添加头文件,若不添加会出现 identifier "FILE" is undefined报错。

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

函数声明和串口重定向:

/* 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 */

主循环

/* 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 */

演示

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    7163

    浏览量

    125733
  • STM32
    +关注

    关注

    2295

    文章

    11033

    浏览量

    365501
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    stm32c011f6执行进入低功耗的API以后待机电流还有79uA是怎么回事?

    (PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI); } stm32c011f6执行 HAL_PWR_EnterSTOPMode以后待机电流79uA,尝试执行
    发表于 03-11 06:03

    采用cubemx将stm32c011的NRST引脚配置成ADC口,输入一拉低就复位怎么解决?

    采用cubemx将stm32c011的NRST引脚配置成ADC口,生成程序,输入为高时候可以正常采样,但是输入一拉低就复位,配置有什么需要注意的吗?
    发表于 03-07 08:06

    DLPC3478 LED_SEL_0和LED_SEL_0无输出是什么原因导致的?

    DLPC3478+3005+3010方案,初始化完成后LED_SEL_0和LED_SEL_0无输出 HOST_IRQ已拉低,软件也显示连接成功。单击投图时光机不亮(DMD的VRST、VBIAS
    发表于 02-20 08:28

    I2C总线设备地址设置方法

    通常是一个7位或10位的数字,用于标识总线上的每个设备。在7位寻址模式下,地址范围是0x00到0x7F,而在10位寻址模式下,地址范围是0x000到0x3FF。I2C地址的最低位(LSB)通常用于指示读/写操作。 硬件地址设置 1. 地址引脚配置 许多I
    的头像 发表于 01-17 15:17 ?4366次阅读

    MHMF092L1C2-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092L1C2-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF092L1C2-网络式伺服A6N 设置
    发表于 01-07 19:11
    MHMF092L1<b class='flag-5'>C2</b>-网络式伺服A6N <b class='flag-5'>设置</b>例 松下

    MHMF092A1C2-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C2-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF092A1C2-网络式伺服A6N 设置
    发表于 12-24 19:00
    MHMF092A1<b class='flag-5'>C2</b>-网络式伺服A6N <b class='flag-5'>设置</b>例 松下

    STM32C011开发(1)----开发板测试

    STM32C011F4P6-TSSOP20 评估套件可以使用户能够无缝评估 STM32C0 系列TSSOP20 封装的微控制器功能,基于 ARM Cortex-M0 内核,具有高效能和低功耗的特点
    的头像 发表于 12-16 17:14 ?1758次阅读
    <b class='flag-5'>STM32C011</b><b class='flag-5'>开发</b>(1)----<b class='flag-5'>开发</b>板测试

    STM32WB55RG开发(2)----STM32CubeProgrammer烧录

    程序接口(UART、USB DFU、I2C、SPI和CAN)读取、写入及验证器件内存。 STM32CubeProgrammer的功能广泛,可以对STM32内部存储器(如Flash、RAM和OTP)以及外部存储器进行编程。
    的头像 发表于 12-16 15:52 ?2036次阅读
    <b class='flag-5'>STM32</b>WB55RG<b class='flag-5'>开发</b>(<b class='flag-5'>2</b>)----<b class='flag-5'>STM32</b>CubeProgrammer烧录

    STM32H503开发(2)----STM32CubeProgrammer烧录

    STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境,通过调试接口(JTAG和SWD)和自举程序接口(UART、USB D
    的头像 发表于 11-28 09:25 ?2670次阅读
    <b class='flag-5'>STM32</b>H503<b class='flag-5'>开发</b>(<b class='flag-5'>2</b>)----<b class='flag-5'>STM32</b>CubeProgrammer烧录

    请问LMX2594 PFD_DLY_SEL寄存器的作用是什么?

    PFD_DLY_SEL寄存器的作用是什么?手册只写如何设置并没有解释功能。 假设我们设置MASH_ORDER=3,PFD_DLY_SEL为3。 当
    发表于 11-12 08:27

    MHMF082L1C2M-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF082L1C2M-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF082L1C2M-网络式伺服A6N 设置
    发表于 11-04 19:02
    MHMF082L1<b class='flag-5'>C2</b>M-网络式伺服A6N <b class='flag-5'>设置</b>例 松下

    MHMF082A1C2-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF082A1C2-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF082A1C2-网络式伺服A6N 设置
    发表于 10-28 18:37
    MHMF082A1<b class='flag-5'>C2</b>-网络式伺服A6N <b class='flag-5'>设置</b>例 松下

    MHMF042L1C2M-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF042L1C2M-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF042L1C2M-网络式伺服A6N 设置
    发表于 10-10 18:44
    MHMF042L1<b class='flag-5'>C2</b>M-网络式伺服A6N <b class='flag-5'>设置</b>例 松下

    stm32用串口烧录怎么设置

    准备工作 确保您拥有STM32开发板和相应的硬件设备,如USB转串口模块。 安装STM32CubeMX和STM32CubeProgrammer软件,这些是ST官方提供的工具,用于配置和
    的头像 发表于 08-22 09:33 ?3568次阅读

    MHMF022L1C2-网络式伺服A6N 设置例 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF022L1C2-网络式伺服A6N 设置例相关产品参数、数据手册,更有MHMF022L1C2-网络式伺服A6N 设置
    发表于 08-07 19:03
    MHMF022L1<b class='flag-5'>C2</b>-网络式伺服A6N <b class='flag-5'>设置</b>例 松下