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

STM32C011开发----2.nBOOT_SEL设置

  • 概述
  • 硬件准备
  • 视频教学
  • 样品申请
  • 源码下载
  • 参考程序
  • 自举模式
  • BOOT0设置
  • 配置 nBOOT_SEL
  • 生成STM32CUBEMX
  • 串口配置
  • LED配置
  • 堆栈设置
  • 串口重定向
  • 主循环
  • 演示

概述

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

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

在这里插入图片描述

硬件准备

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

在这里插入图片描述

视频教学

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

STM32C011开发(2)----nBOOT

样品申请

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_SELif (((OBInit.USERConfig & OB_USER_NBOOT_SEL) == OB_BOOT0_FROM_OB) != enable){// 解锁 Flashif (HAL_FLASH_Unlock() == HAL_OK){// 解锁 Option Bytesif (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 和 FlashHAL_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

在这里插入图片描述

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

演示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译以前项目更改在x64下面时报错:函数“PVOID GetCurrentFiber(void)”已有主体

win32下面编译成功,但是x64报错 1>GetWord.c 1>md5.c 这两个文件无法编译 1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(24125,1): error C2084: 函数“PVOID GetCurrentFiber(void)”已有主体 1>C:\Program Files (x…

onvif协议相关:3.1.5 Digest方式获取预置位

背景 关于onvif的其实很早之前我已经在专栏中写了不少了, 使用onvif协议操作设备 但最近有陆陆续续的粉丝问我, 希望我在写一些关于 onvif的设备自动发现、预置位跳转、云台操作的博客。 满足粉丝的需求,安排。 今天我们来实现 获取预置位 准备工作 我们这里的话选择Diges…

5.Feign与ReflectiveFeign

前言 Feign对象作为feign框架的启动门户, 提供构建和运行框架的统一入口, 也是feign框架的核心组件之一 核心逻辑 Feign类结构 public abstract class Feign {public static Builder builder() {return new Builder();}// 获取方法唯一标识public static String configKey(…

docker 通过Dockerfile自定义的镜像部署Springboot项目

一、镜像结构介绍: 镜像:层(Layer)添加安装包、依赖、配置等,每一次操作都形成新的一层;基础镜像(BaseImage)应用依赖的系统函数库、环境、配置、文件等;入口&#xff0…

【Canvas与图标】GUI图标

【成图】 120*120的png图标 各种大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>GUI图标 Draft1</titl…

Spring Boot 整合 ELK 全面指南:实现日志采集、分析与可视化

一、ELK简介 1.1 什么是ELK&#xff1f; ELK 是三个开源工具的组合&#xff1a; Elasticsearch&#xff1a;一个分布式全文搜索和分析引擎&#xff0c;用于存储和查询日志数据。Logstash&#xff1a;一个数据处理管道工具&#xff0c;用于收集、解析和处理日志数据。Kibana&…

数据库编程(sqlite3)

一&#xff1a;数据库分类 常用的数据库 大型数据库 &#xff1a;Oracle商业、多平台、关系型数据库功能最强大、最复杂、市场占比最高的商业数据库 中型数据库 &#xff1a;Server是微软开发的数据库产品&#xff0c;主要支持windows平台 小型数据库 : mySQL是一个小型关系型…

CCF GESP C++ 一级上机题(十六道题及其思路详解合集)

#include <iostream> using namespace std;int main() {// 定义起始年份、结束年份、循环变量以及用于累加的变量&#xff0c;并初始化累加变量为0int start, end, i, sum 0;// 从标准输入读取起始年份和结束年份cin >> start >> end;// 循环遍历从起始年份…

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…

【linux】shell脚本

文章目录 1. jar包启动脚本1.1 方式一1.2 方式二 2. 进程关闭脚本3. 操作mysql4. impala建表语句提取5. 监控磁盘存量6. 清日志脚本7. 替换tomcat的启动端口8. 将一行数据按照空格依次读取 1. jar包启动脚本 1.1 方式一 #!/bin/sh RESOURCE_NAME/usr/local/applications/scre…

Flume和kafka的整合:使用Flume将日志数据抽取到Kafka中

文章目录 1、Kafka作为Source【数据进入到kafka中&#xff0c;抽取出来】2、kafka作为Sink 【数据从别的地方抽取到kafka里面】 1、Kafka作为Source【数据进入到kafka中&#xff0c;抽取出来】 kafka源 --> memory --> 控制台&#xff1a; a1.sources r1 a1.sinks k1…

vue3 reactive响应式实现源码

Vue 3 的 reactive 是基于 JavaScript 的 Proxy 实现的&#xff0c;因此它通过代理机制来拦截对象的操作&#xff0c;从而实现响应式数据的追踪。下面是 Vue 3 的 reactive 源码简化版。 Vue 3 reactive 源码简化版 首先&#xff0c;我们需要了解 reactive 是如何工作的&…

scala模式匹配

object test47 {def main(args: Array[String]): Unit {val id"445646546548858548648"//取出id前两位val provinceid.substring(0,2) // println(province) // if (province"42"){ // println("湖北") // }else if(province&quo…

旋转磁体产生的场 - 实验视频资源下载

先发几个视频&#xff0c;是2019年所作的实验内容 更多视频&#xff0c;到某宝找我吧。注意&#xff1a;是收费的。 20190312-180244-旋转磁体产生的场造成激光功率减小 https://download.csdn.net/download/u014161757/90038058 20190313-090956-旋转磁体产生的场对真空介电…

AI加持,华为全屋智能品牌升级为“鸿蒙智家”

1.传统智能家居的困境&#xff1a;从便利到繁琐 近年来&#xff0c;智能家居因其便捷性和科技感受到消费者的青睐。然而&#xff0c;随着用户需求的多样化&#xff0c;传统智能家居的弊端逐渐显现&#xff1a; 设备连接复杂&#xff0c;品牌间兼容性不足&#xff0c;用户不得不…

【后端面试总结】MySQL索引

数据库索引不只一种实现方法&#xff0c;但是其中最具代表性&#xff0c;也是我们面试中遇到最多的无疑是B树。 索引为什么选择B树 数据量很大的查找&#xff0c;是不能直接放入内存的&#xff0c;而是需要什么数据就通过磁盘IO去获得。 红黑树&#xff0c;AVL树等二叉查找树…

ASP.net WebAPI 上传图片实例(保存显示随机文件名)

[HttpPost]public Task<Hashtable> ImgUpload(){// 检查是否是 multipart/form-dataif (!Request.Content.IsMimeMultipartContent("form-data"))throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);//文件保存目录路径string SaveTempPat…

string类部分(C++)

目录 1. string类 1.1 auto和范围for auto关键词&#xff1a; 范围for&#xff1a; 1.2 string类的常用接口说明 a&#xff09;string类对象的常见构造 b&#xff09; string类对象的容量操作 size与length&#xff1a; capacity: empty: clear: reserve: 1.reserve&am…

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述 在 Oracle RAC 环境中&#xff0c;有时会误将数据文件创建在本地目录&#xff0c;导致其他节点无法访问该数据文件&#xff0c;从而报出 ORA-01157 和 ORA-01110 错误。 问题分析 错误日志 Mon Nov 16 19:02:38 2021 Errors in file /u01/app/oracle/diag/rdbms/orc…

大厂也在用的分布式链路追踪:TraceIdFilter + MDC + Skywalking

痛点 查线上日志时&#xff0c;同一个 Pod 内多线程日志交错&#xff0c;很难追踪每个请求对应的日志信息。 日志收集工具将多个 Pod 的日志收集到同一个数据库中后&#xff0c;情况就更加混乱不堪了。 解决 TraceId MDC 前端每次请求时&#xff0c;添加 X-App-Trace-Id 请…