STM32开发过程中碰到的问题总结 - 2

news2025/6/26 20:36:56

文章目录

  • 前言
  • 1、Hex文件和Bin文件的区别
  • 2. STM32的boot0 在0和1有什么区别
  • 3. keil下的translate和builder有什么区别
  • 4. 为什么RTOS中区分中断内调用和中断外调用
  • 5. STM32中中断内运行的代码应该注意哪些事项
  • 6. STM32的定时器中断中 使用printf没有任何输出
  • 7. 将makefile编译的工程移植到Keil5上后,提示编译不过
  • 8.warning #188-D enumerated type mixed with another type
  • 9. keil中的CMSIS目录下放置的都是什么?
  • 10. keil5怎么加快编译速度


前言

记录下在使用STM32L4系列芯片进行开发时,碰到的各种问题,第二期。

比较杂。

1、Hex文件和Bin文件的区别

简单来说:Hex是由Intel制定的一种十六进制标准文件格式,是由编译器转换而成的一种用于下载带处理器里面的文件。

Hex文件格式是由一行一行的十六进制数据组成,每行包含:开始、长度、数据、类型、校验和等重要信息。

Hex文件是有一定格式的,==而Bin文件就是一种没有格式的程序文件,只是包含了程序数据。==所以,我们下载bin文件时需要指定起始地址,如果起始地址不对,你的程序就不能正常运行。

2. STM32的boot0 在0和1有什么区别

在STM32微控制器中,BOOT0引脚是用于启动模式选择的引脚之一。它与BOOT1引脚一起,用于选择芯片启动时的启动模式。在BOOT0引脚处于不同逻辑电平时,会选择不同的启动模式。

具体来说,在STM32微控制器中,BOOT0引脚在逻辑电平为0和1时的区别如下:

BOOT0引脚逻辑电平为0:

当BOOT0引脚被拉低时,微控制器将进入用户应用程序的执行模式。即微控制器将会从Flash存储器的用户代码区域启动执行用户编写的应用程序。

BOOT0引脚逻辑电平为1:
当BOOT0引脚被拉高时,微控制器将进入系统引导模式(System Boot Mode)。
在系统引导模式下,可以通过串行接口(如串行下载模式或串行编程模式)来进行固件更新、调试和启动加载等操作。

因此,BOOT0引脚的不同逻辑电平可以实现不同的启动模式选择,根据具体的需求和应用场景进行设置

3. keil下的translate和builder有什么区别

在这里插入图片描述

Translate是编译当前改动的源文件,在这个过程中检查语法错误。但并不生成可执行文件

Build是只编译工程中上次修改的文件及其它依赖于这些修改过的文件的模块,同时重新链接生成可执行文件。如果工程之前没编译链接过,它会直接调用Rebuild All。另外在技术文档中,Build实际上是指increase build,即增量编译。

Rebuild是不管工程的文件有没有编译过,会对工程中所有文件重新进行编译生成可执行文件,因此时间较长。

参考链接:https://blog.csdn.net/jays_/article/details/83022610

4. 为什么RTOS中区分中断内调用和中断外调用

实际上就这样想,本来RTOS有一个自己的调度流程,按照这个调度流程,基本上不会出现优先级反转,死锁等问题。但是当中断来了之后去调用RTOS的接口时,相当于脱离了RTOS自己的调度流程去执行RTOS的函数,这相当于脱离了RTOS的控制

禁止任务切换:
中断服务程序 (ISR) 执行时,系统处于中断被屏蔽状态,这意味着中断服务程序不能被更高优先级的中断打断。因此,在中断服务程序中,不允许使用会导致任务切换的函数,因为任务切换需要在系统可抢占状态下执行。

时间敏感性:
中断服务程序需要尽快完成其工作,因为它们可能会打断更低优先级的任务。因此,中断服务程序中使用的函数通常是非阻塞的,并且会尽可能快地完成其操作,以确保系统的响应性。

资源管理:
在中断上下文中,对资源的访问需要特别小心,以避免竞争条件和死锁。因此,FreeRTOS 提供了专门用于中断上下文中的函数,这些函数经过特殊设计,以确保在中断上下文中正确地与 FreeRTOS 内核进行交互,而不会引入潜在的问题。

5. STM32中中断内运行的代码应该注意哪些事项

在中断服务程序 (ISR) 中运行的代码需要特别注意以下几个方面:

执行时间:
中断服务程序需要尽可能快地执行完毕,以减少对系统响应时间的影响。长时间运行的中断服务程序会延迟系统对其他事件的响应,可能导致系统性能下降甚至丢失关键事件。

禁止阻塞:
中断服务程序中禁止使用会引起任务阻塞的函数。这是因为中断服务程序处于特殊的上下文中,无法像任务上下文那样进行任务切换和调度。因此,任何会导致阻塞的操作都应该避免,包括等待信号量、消息队列等。

保护临界区:
如果中断服务程序和任务共享某些共享资源,必须在访问这些资源时进行适当的保护,以避免竞态条件和数据损坏。通常会使用临界区保护机制,如禁用中断或使用信号量等。

避免递归和动态内存分配:
中断服务程序应该尽量简单和可预测。因此,应避免使用递归函数和动态内存分配,因为它们可能导致不确定的执行时间和系统行为。

合理选择中断优先级:
中断服务程序的优先级应该根据其紧迫性和重要性来选择。高优先级的中断服务程序可以打断低优先级的中断服务程序,因此必须谨慎选择中断优先级,以确保系统的响应性和稳定性。

注意嵌套中断:
如果系统支持嵌套中断,则必须谨慎处理嵌套中断的情况。在处理嵌套中断时,必须遵循适当的中断优先级和嵌套中断的规则,以避免优先级反转和其他问题。

6. STM32的定时器中断中 使用printf没有任何输出

STM32CubeMX生成的中断不能直接使用,
需要自己做两个东西

1、 使能HAL定时器

HAL_TIM_Base_Start_IT(&htim2)

2、实现回调函数
理论上来说这个里面应该要再加个htim是否为定时器2的判断

/**
  * @brief This function handles TIM2 global interrupt.
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  printf("HAL_TIM_PeriodElapsedCallback.\n");
  isr_handle();
}

7. 将makefile编译的工程移植到Keil5上后,提示编译不过

在这里插入图片描述
该文件已经加进来过了
在这里插入图片描述
提示 internal fault

在这里插入图片描述
最终修改编译优化等级解决了

参考链接:https://www.emdoor.cn/res/view/id/1166.html

8.warning #188-D enumerated type mixed with another type

在这里插入图片描述
Keil中编译的时候 枚举类型的初始化需要是真正的值,这里将ret = 0 去掉即可。

9. keil中的CMSIS目录下放置的都是什么?

在这里插入图片描述
当我加入了一个M33 内核的工程师,提示CMSIS出了问题,需要安装对应的pack包。

其实我一直疑惑这个pack包里面到底有什么?这个cmsis又是什么?

CMSIS(Cortex Microcontroller Software Interface Standard)
CMSIS 是一组软件接口,旨在提供一致的编程接口,以便在各种 ARM Cortex-M 处理器和开发工具之间进行移植和重用。
CMSIS 定义了 Cortex-M 处理器的通用寄存器访问方法、中断控制和系统控制寄存器的定义等,以及一系列标准化的API,如调试、系统时钟、时钟配置等。
CMSIS 的目标是简化嵌入式软件开发,使软件更具可移植性和可重用性。

说白了实际上CMSIS就是对arm底层接口的一个封装,以达到用户只需关注CMSIS的接口,而不需要关注底层的芯片是M0 、M4 、M33

pack

Pack 是 Keil µVision 中用于管理和提供嵌入式软件的一种机制。它是一种打包格式,包含了特定嵌入式设备的软件组件,如设备描述文件(Device Description Files)、驱动程序、库函数等。

10. keil5怎么加快编译速度

在这里插入图片描述
去掉2处,但是会影响调试在这里插入图片描述
最重要的是要用V6编译工具链

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

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

相关文章

浅谈C++基本框架内涵及其学习路线

目录 一.C的内涵本质 1. 面向对象编程(OOP) 2. 低级控制 3. 模板编程 4. 标准库(STL) 5. 多范式支持 二.学习路线 1. 基础阶段 C基础语法 函数 数组和指针 2. 面向对象编程 类和对象 继承和多态 运算符重载 3. 高级…

【elementui源码解析】如何实现自动渲染md文档-第二篇

目录 1.概要 2.引用文件 1)components.json 2)json-template/string 3)os.EOL 3.变量定义 4.模版填充 5.MAIN_TEMPLATE填充 6.src下的index.js文件 1)install 2)export 7.总结 1.概要 今天看第二个命令no…

Blender骨骼创建

骨骼系统 建立 使用Shift A添加骨骼或在添加|骨架中添加一段骨骼 骨骼的三种模式 -物体模式:做动画,摆人物pose时在该模式 -编辑模式:进行骨骼搭建(选择一段骨骼,然后按E挤出一段骨骼并进行调整) -姿…

解析ISP许可证:构建安全可靠的网络空间

在当今数字化时代,互联网已成为人们生活和工作中不可或缺的一部分。作为连接世界的纽带,互联网服务提供商(ISP)承担着重要的责任,为用户提供稳定、高效的网络接入和服务。而ISP许可证,则是保障这些服务合法…

Python学习打卡:day05

day5 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day538、函数的初体验39、函数的基础定义语法函数的定义注意事项 40、函数的基础定义案例练习41、函数的传入参数42、函数的传入参数案例练习——升…

【智能家居控制系统项目】一、项目系统镜像烧录与系统登录

前言 完成本章节将可以获得本项目的系统UI界面功能。本章节主要介绍如何烧录项目系统镜像以及进入系统。配套的视频介绍可以点击跳转到智能家居项目复刻配套视频 1.系统功能页面介绍 完成本章全部步骤,我们将可使用以下项目系统功能界面。 1.1 家居总览界面 主界面…

2分钟用手机开发一个ChatBot

前言: 在上一期,我们测评了CodeFlying,用它开发出了一个复杂推文管理系统,然后体验了一下它的热门应用:AI智能机器人。今天咱就继续用CodeFlying来开发一个属于我们自己的聊天机器人。 老规矩,我们先在手机…

【elementui源码解析】如何实现自动渲染md文档-第一篇

文章目录 目录 背景 获取源码 代码分析 背景 之前基于vant3的源码开发过二次开发过组件,其中vant实现了将md文档渲染到界面上,有天突发奇想想知道这是如何实现的将md文档渲染到界面上的,因为平时开发中使用elementui占多数,所…

并发、多线程、HTTP连接数有何关系?

在计算机领域,"并发"、"多线程"和"HTTP连接数"是三个重要的概念,它们之间存在着密切的关系。本文将探讨这三者之间的联系以及它们在现代计算机系统中的作用。 一、并发的概念 并发是指系统能够同时处理多个任务或事件的能…

thinkphp6 入门(23)--如何给上传图片的服务器目录授权

开发网站,上传图像时提示”上传图片失败,Impossible to create the root directory /var/www/html/xxxxx/public/uploads/avatar/20240608.“ 在Ubuntu上,你可以通过调整文件夹权限来解决这个问题。首先,确保Web服务器&#xff08…

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛,往往被认为是“万金油”,他们仿佛什么都能做,但是和专业技能类知识不同,缺乏技术支持,从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗,对于众多文科生而…

带头+双向+循环链表的实现

目录 1. 链表1.1 带头双向循环链表 2. 链表的实现2.1 结构体2.2 初始化2.3 打印2.4 判断空不能删2.5 尾插2.6 头插2.7 尾删2.8 头删2.9 查找2.10 在pos之前插入2.11 删除pos位置的值2. 12 销毁2.13 创建节点 3. test主函数4. List.c文件5. List.h文件 1. 链表 1.1 带头双向循环…

基于机器学习的CFD模型降阶

降阶模型 ROM 降阶模型ROM(Reduced Order Models)是一种对高保真度静态或动态模型的简化方法。模型降阶在保留了模型的基本特性与主导效应的同时,大大减少复杂模型的CPU计算时间及存储空间。 ROM的用途: 加速大规模系统的仿真速度…

每日一练:攻防世界:2-1

攻防世界:2-1 拿到一个打不开的图片,放到winhex里面,很直观的看到文件头损坏 修改以后还是打不开,继续往下分析 0000 000d说明IHDR头块长为13 4948 4452IHDR标识(ascii码为IHDR) 下面是IHDR数据块的实际…

【MySQL】事务的特性和隔离级别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

报名进行中 | ISCSLP2024 对话语音克隆挑战赛(CoVoC)

晴数智慧(Magic Data)联合西北工业大学音频语音与语言处理研究组(ASLPNPU)、新加坡资讯通讯研究院(I2R)、深圳大数据研究院(SRIBD)、香港中文大学(深圳)等多家单位在2024年中文口语语言处理国际会议(ISCSLP2024)上推出对话语音克隆挑战赛(Conversational Voice Clone Challenge…

FRP 内网穿透 | 实现远程访问与安全管理

唠唠闲话 内网穿透简介 在互联网上&#xff0c;两个不同主机进行通信需要知道对方的 IP 地址。由于世界人口和设备众多&#xff0c;IPv4 资源相对紧缺&#xff0c;因此绝大部分情况下是通过路由器或交换机转换公网 IP 后才上网。 位于路由器或交换机后的设备通常是内网设备&…

Kettle根据分类实现Excel文件拆分——kettle开发31

将整理好的一份供应商付款明细Excel文件&#xff0c;按供应商拆分成多个Excel文件。 实现思路 本文我们首先将供应商付款明细表&#xff0c;按照“名称”拆分成多份Excel文件。拆分Excel文件打算用两个转换实现&#xff0c;一个用来将Excel数据读取到参数中&#xff0c;另外一…

2.4G低功耗无线收发SOC芯片-SI24R03

随着物联网产业对集成度的需求越来越高&#xff0c; 也在不断地完善公司产品生态。 “射频MCU”产品组合--无线SOC芯片&#xff08;MCU&#xff09;&#xff0c;简化了系统设计。只需要少量的外围器件&#xff0c;用户即可实现产品的开发&#xff0c;有效减少了PCB板的占用…

热门开源项目推荐: diffusionbee

随着AI技术的快速发展&#xff0c;深度学习和机器学习已经成为各领域的热门话题。Stable Diffusion是一种强大的深度学习模型&#xff0c;它能够在图像生成和处理方面展现出惊人的效果。为了让更多用户能够轻松地使用Stable Diffusion&#xff0c;Diffusion Bee应运而生&#x…