STM32::关于项目启动的一些问题

一、概述:

启动文件就做了如下的几个主要功能

This module performs:
- Set the initial SP                    //设置初始化堆栈空间
- Set the initial PC == Reset_Handler   //设置PC指针
- Set the vector table entries with the exceptions ISR address              //设置中断向量表- Configure the clock system                                            //设置系统时钟- Branches to __main in the C library (which eventually calls main()).  //进入C语言 main()

详见:
 单片机 STM32启动文件详解(汇编语言解析)_单片机启动文件_KaminLuo的博客-CSDN博客

STM32F4启动代码分析_mcd application team_JXDZ的博客-CSDN博客 

二、几个重点与问题 

重点一: 设置向量表

        当内核响应了一个发生的异常后,对应的异常服务程序就会被执行。为了决定异常服务程序的入口地址,内核就会使用向量表的方式查询,就像一个指针数组,每个下标表示一个异常,里面的值就是程序地址。因为复位后,寄存器的值为0,所以在0x0000 0000需要一张向量表,决定程序下一步的跳转,所以该表映射在0x0000 0000地址上

疑问一:异常事件是如何对应到相应的中断处理函数的,即:找中断函数地址的下标是如何产生的?

中断事件与中断函数的对应关系是由硬件和软件共同决定的。

        在硬件层面,微控制器的外设(如定时器、串口等)会生成特定的中断信号,这些中断信号将触发相应的中断事件。例如,当定时器溢出时,会触发定时器中断事件;当串口接收到数据时,会触发串口接收中断事件。(硬中断)

        在软件层面,开发者需要配置中断控制器(例如 NVIC,Nested Vectored Interrupt Controller)来使得特定中断能够被正确触发,并指定相应的中断处理函数。(软中断)

一般来说,中断事件与中断函数对应的设置分为以下几个步骤

  1. 配置外设模块:设置外设模块的工作模式、中断使能等参数,以使其产生中断事件。
  2. 配置中断控制器:使用中断控制器相关的寄存器或者软件接口,设置中断优先级、使能特定的中断源等。
  3. 编写中断处理函数:在代码中编写中断处理函数,根据中断事件的类型执行相应的操作。将中断处理函数的地址与中断号绑定,通常通过向存储器向量表中写入中断处理函数的地址来实现。
  4. 启用全局中断使能:在合适的地方,打开全局中断使能的开关,使得中断能够正常响应。

需要注意的是,具体的设置方法和操作方式可能会因不同的硬件平台、编程语言或开发工具而有所差异。根据所用的硬件平台和开发工具的文档和示例程序,可以了解到具体的配置和设置方法。

 

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

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

相关文章

【Django】Task4 序列化及其高级使用、ModelViewSet

【Django】Task4 序列化及其高级使用、ModelViewSet Task4主要了解序列化及掌握其高级使用,了解ModelViewSet的作用,ModelViewSet 是 Django REST framework(DRF)中的一个视图集类,用于快速创建处理模型数据的 API 视…

你更喜欢哪一个:VueJS 还是 ReactJS?

观点列表: 1、如果你想在 HTML 中使用 JS,请使用 Vue; 如果你想在 JS 中使用 HTML,请使用 React。 当然,如果您希望在 JS 中使用 HTML,请将 Vue 与 JSX 结合使用。 2、Svelte:我喜欢它&#…

设计模式——合成复用原则

文章目录 合成复用原则设计原则核心思想合成案例聚合案例继承案例优缺点 合成复用原则 原则是尽量使用合成/聚合的方式,而不是使用继承 设计原则核心思想 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。…

数据仓库一分钟

数据分层 一、数据运营层:ODS(Operational Data Store) “面向主题的”数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL…

华为OD-移掉K位数字

题目描述 给定一个以字符串表示的数字 num 和一个数字 k ,从 num 中移除 k 位数字,使得剩下的数字最小。如果可以删除全部数字,则结果为 0。 1.num仅有数字组成 2.num是合法的数字,不含前导0 3.删除之后的num,请去…

数据库实体ER图

Entity Relationship Diagram Symbols | ERD Symbols and Meanings | Data structure diagram with ConceptDraw DIAGRAM | Erd Database Arrow Types

43.227.198.x怎么检查服务器里是否中毒情况?

要检查43.227.198.1服务器是否中毒,可以执行以下步骤: 运行杀毒软件:运行已安装的杀毒软件进行全盘扫描,查看是否有病毒或恶意软件。如果发现病毒或恶意软件,立即将其删除或隔离。 检查系统文件:检查服务器…

电信不提供公网IP怎么解决?快解析内网穿透解决方案

由于现在电信运营商的政策调整,加上受到网络服务架构的影响,一些用户在使用宽带连接时,往往会遇到电信不提供公网IP的情况。这种情况下,我们可能会受到一些限制,特别是对于需要对外提供服务或进行远程访问的场景而言&a…

使用ChatGPT-4优化编程效率:高效查询代码示例和解决方案

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Linux下的thundersvm的安装经验

之前写过一篇文章是关于windows下安装thundersvm的。当初在linux下安装thundersvm很容易,因为我的CUDA正好是9.0版本。所以一句命令 pip install thundersvm 即可安装。 但如果CUDA版本不是9.0,安装就比较麻烦。本文记录的是一种可行的方法,但…

封装axios及简单应用举例

第一步:具体封装工具: 在项目根目录下创建utils目录,然后在其中创建文件http.js: // 二次封装axios import axios from axios// 全局配置 // 根据环境变量区分接口默认地址(前缀) switch (process.env.NO…

LVS+Keepalived 实验

Keepalived 是什么 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题的一款检查工具 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器…

【Rust日报】2023-08-19 探索 Rust 编译器基准测试套件

Pipelight v0.6.14 - 一个更简单的自动化pipeline工具 Pipelight 的使用方式有很多种,因此我必须保持本自述文件的简洁,以便您快速掌握其概念。 您应该查看文档以获得更友好的方法和更深入的理解。 Pipelight 是一个 6Mb 的二进制文件,在终端…

Git标签

Git 中的标签,指的是某个分支某个特定时间点的状态(静态)。通过标签,可以很方便的切换到标记时的状态。 比较有代表性的是人们会使用这个功能来标记发布结点 (v1.0、v1.2等)。 下面是myatis-plus的标签: 1 标签相关命令 命令作用git tag查看标签&…

python中(限小白,大佬勿入)python开发中的trick:常量

开场白 我是小白,今天被前端骂了一顿:我们交接不是说好了就给你四个变量:A,B。C。D。你这命名的这么具体,我这边给你传值不是很方便啊(因为不同模块有复用的图片路径),我说“那我改&…

自动化测试工具Selenium的语法续.

OK,那么上篇博客我们介绍了如何搭建基于Javaselenium的环境,并且使用selenium的一些语法给大家演示了如何进行自动化测试的案例,那么本篇博客我们来继续学习selenium的一些其他的比较重要的语法,感谢关注,期待三连~ 目…

陕西广电 HG6341C FiberHome烽火 光猫获取超级密码 改桥接模式 提升网速

光猫默认的路由模式实测在100M宽带下只能跑到60M左右,只有改成桥接模式才能跑满,不损失性能。但是改桥接需要给运营商打电话,有的时候不想麻烦他们,这时获取超级密码进行更改就是一个不错的选择了 分析 之前写了一篇HGU B2 光猫的…

4 Python的函数

概述 在上一节,我们介绍了Python的数据类型,包括:数字、字符串、列表、元组、集合、字典等内容。在本节中,我们将介绍Python的函数。在Python中,函数是一段可以重复使用的代码块,它可以提高代码的可重用性和…

大屏模板,增加自适应(包含websocket)

1、简单的Node服务端 const WebSocket require(ws);// 创建 WebSocket 服务器 const wss new WebSocket.Server({ port: 8888 });const getHeader (protocol) > {const protocolArr protocol.split(,)const headers {};for (let i 0; i < protocolArr.length; i …

“深入解析JVM内部机制:探索Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM内部机制&#xff1a;探索Java虚拟机的工作原理 摘要&#xff1a;本文将深入解析Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;探索其工作原理。我们将从JVM的架构、内存管理、垃圾回收、即时编译器等方面进行讨论&#xff0c;并通…