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

    文章

    7437

    浏览量

    129613
  • STM32
    +关注

    关注

    2313

    文章

    11194

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32H573 使能 HSLV 引起 I2C4 失效的案例分析

    某客户使用 STM32H573II 开发一款 PLC 产品时反馈 I2C4 无法通信,在上一款产品中也是使用的 I2C4 接口,通信却是正常的,客户对此感到非常困惑,百思不得其解。进一
    发表于 04-15 15:57 0次下载

    onsemi NTMYS011N04C:高性能N沟道MOSFET的卓越之选

    onsemi NTMYS011N04C:高性能N沟道MOSFET的卓越之选 在电子设计领域,MOSFET作为一种关键的功率器件,其性能直接影响着整个电路的效率和稳定性。今天,我们就来深入探讨一下
    的头像 发表于 04-10 09:30 117次阅读

    探索 onsemi NVMYS011N04C:高性能 N 沟道 MOSFET 的卓越之选

    探索 onsemi NVMYS011N04C:高性能 N 沟道 MOSFET 的卓越之选 在电子设计领域,MOSFET 作为关键的功率器件,其性能直接影响着整个系统的效率和稳定性。今天,我们将
    的头像 发表于 04-02 17:20 415次阅读

    LAT1618_STM32H573 使能 HSLV 引起 I2C4 失效的案例分析

    某客户使用 STM32H573II 开发一款 PLC 产品时反馈 I2C4 无法通信,在上一款产品中也是使用的 I2C4 接口,通信却是正常的,客户对此感到非常困惑,百思不得其解。进一
    发表于 03-11 10:41 0次下载

    AT32F011 系列快速使用指南

    工程。如下是 Keil_v5 工程示例: 图 2. Keil_v5 templates 工程示例 工程内添加的内容描述如下: ① at32F011_clock.c 时钟配置文件,设置了默认的时钟
    发表于 03-02 11:27

    【ESP32-C2/C3系列】WT9901C2/C3-SN2 开发板上手指南

    指南本小节将简要介绍WT9901C2/C3-SN2开发板。1WT9901C2/C3-SN2实物图2
    的头像 发表于 02-12 18:16 296次阅读
    【ESP32-<b class='flag-5'>C2</b>/<b class='flag-5'>C</b>3系列】WT9901<b class='flag-5'>C2</b>/<b class='flag-5'>C3-SN2</b> <b class='flag-5'>开发</b>板上手指南

    CW32L011开发支持

    1.开发工具 集成开发环境(IDE) Keil MDK:这是一款广泛使用的嵌入式开发 IDE,它提供了强大的代码编辑、编译、调试功能。对于 CW32L011
    发表于 11-17 06:30

    STM32C0116-DK探索套件开发指南与技术解析

    基于STM32C011F6微控制器的UFQFPN20至DIL20模块,使用户能够开发和共享应用。该器件还包含一个板载ST-LINK/V2-1,以调试和编程设定嵌入式STM32微控制器。
    的头像 发表于 10-27 14:57 812次阅读
    <b class='flag-5'>STM32C</b>0116-DK探索套件<b class='flag-5'>开发</b>指南与技术解析

    STMicroelectronics NUCLEO-C071RB STM32 Nucleo-64开发板数据手册

    STMicroelectronics NUCLEO-C071RB STM32 Nucleo-64开发板带有板载STM32C071RB MCU,支持Arduino和ST morpho连
    的头像 发表于 10-17 16:47 1033次阅读
    STMicroelectronics NUCLEO-<b class='flag-5'>C</b>071RB <b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>开发</b>板数据手册

    STM32 Nucleo-64开发板技术解析与应用指南

    STMicroelectronics -C051C8 STM32 Nucleo-64开发板通过由STM32微控制器为概念测试和原型创建提供了一种经济实惠且灵活的途径。该
    的头像 发表于 10-16 10:50 977次阅读
    ‌<b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>开发</b>板技术解析与应用指南

    STM32 Nucleo-64开发板技术解析:以NUCLEO-C092RC为例

    用于STM32C092RC的STMicroelectronics NUCLEO-C092RC Nucleo-64开发板通过STM32微控制器提供性能,提供了一个经济划算、灵活的概念尝试
    的头像 发表于 10-16 10:26 830次阅读
    <b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>开发</b>板技术解析:以NUCLEO-<b class='flag-5'>C</b>092RC为例

    STM32C011开发(3)----Flash操作

    STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入、读写保护等功能。本文将简要介绍 STM32C011 的 Flash 结构与特性,并通过实际代码示例,讲解 Flash 的擦除、写入与读取等基本操作。
    的头像 发表于 09-18 16:48 5272次阅读
    <b class='flag-5'>STM32C011</b><b class='flag-5'>开发</b>(3)----Flash操作

    CW32L011电机驱动开发板——驱动无刷电机

    CW32L011电机驱动开发
    的头像 发表于 08-22 10:02 1219次阅读
    CW32L<b class='flag-5'>011</b>电机驱动<b class='flag-5'>开发</b>板——驱动无刷电机

    CW32L011电机驱动控制开发板-软件

    CW32L011电机驱动控制开发板-软件分析 衔接上一个硬件
    的头像 发表于 08-13 10:44 1193次阅读
    CW32L<b class='flag-5'>011</b>电机驱动控制<b class='flag-5'>开发</b>板-软件

    CW32L011电机驱动电机控制开发板-硬件1

    CW32L011电机驱动电机控制开发板-硬件介绍 后面有软件分析
    的头像 发表于 08-12 14:20 4486次阅读
    CW32L<b class='flag-5'>011</b>电机驱动电机控制<b class='flag-5'>开发</b>板-硬件1