问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

stm32 学习困惑

发布网友 发布时间:2022-05-05 02:36

我来回答

2个回答

热心网友 时间:2022-06-28 16:35

因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只能在从这里开始存储。详见STM32 referenc manual手册第54页。

那既然从这里才能存储代码,就必须在MDK里设置Flash地址为0x0800 0000,下面是MDK设置页面,这个应该都看到过:

这样就还有一个问题,理论上,CM3中规定上电后CPU是从0地址开始执行,但是这里中断向量表却被烧写在0x0800 0000地址里,这是因为STM32的Flash是从0x0800 0000开始才有。但SMT32也不能破坏ARM定下的“规矩”,所以它做了一个启动映射的过程,就是和芯片上总能见到的BOOT0和BOOT1有关了,当选择从主Flash启动模式后,芯片一上电,Flash的0x0800 0000地址被映射到0地址处,不影响CM3内核的读取,所以这时的CM3既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码还是在0x0800 0000地址处存储的。这就是最难理解的地方,其实,这是基本上所有ARM芯片采用的启动映射方法。ARM7,ARM9没有内部Flash的通常都是这样做的。这个过程出自STM32 referenc manual手册,里面是有说明的:

还要注意,这个中断向量表是可以在程序中再次被映射的。控制它的就是CM3已经规定的NVIC寄存器SCB->VTOR。在STM32库中给出的启动代码里,startup_stm32f10x_hd.s文件里,第146行,是上电后读取中断向量表中的复位中断位置,并执行复位中断处理代码,代码如下:

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0              
                LDR     R0, =__main
                BX      R0
                ENDP

 注意复位后第一个被执行的是SystemInit代码,这个代码在库目录下的system_stm32f10x.c文件里,它初始化了时钟,NVIC等一系列操作,这里摘要与中断向量有关的代码:

void SystemInit (void)

{

......

#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}

可以看出中断向量重映射是一个选择性编译,通常宏定义VECT_TAB_SRAM都没有被定义,所以这里执行结束后,SCB->VTOR就是FLASH_BASE了,值为0x0800 0000。以后CM3再取中断向量里,就会根据SCB->VTOR的设置,从这里取向量执行了。中断向量自此终于转正。

注意这时连__main函数都还没进,看起来中断向量的重映射位置还是够早的。

热心网友 时间:2022-06-28 16:36

正点原子的IAP例程,应该能帮到你一点。

STM32的内部闪存(FLASH)地址起始于0x08000000,一般情况下,程序文件就从此地

址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张“中断向量表”

来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成

启动,而这张“中断向量表”的起始地址是0x08000004,当中断来临,STM32的内部硬件机

制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断

服务程序。 

  在图53.1.1中,STM32在复位后,先从0X08000004地址取出复位中断向量的地址,并跳

转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的

main函数,如图标号②所示;而我们的main函数一般都是一个死循环,在main函数执行过程

中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处,如图

标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服

务程序以后,程序再次返回main函数执行,如图标号⑤所示。

stm32 学习困惑

这个过程出自STM32 referenc manual手册,里面是有说明的:还要注意,这个中断向量表是可以在程序中再次被映射的。控制它的就是CM3已经规定的NVIC寄存器SCB->VTOR。在STM32库中给出的启动代码里,startup_stm32f10x_hd.s文件里,第146行,是上电后读取中断向量表中的复位中断位置,并执行复位中断处理代...

STM32F103,了解一下?

STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了ARM Cortex-M3内核,主频高达72MHz。2. 内置IO口和存储器接口,便于与外部器件进行通信和控制。3. 支持外部时钟和复位功能,可通过端口配置实现其他功能。4. 具有容忍5V电压的能力,适用于较宽的工作电压范围。5. 内置看门狗定时器和电源管理单元,可提高系统的稳定性和功耗效率。6. 支持多种外设接口,如ADC、DAC、UART、SPI等。7. 集成了…STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过1000个型号。STM32产品广泛应用于工业控制、消费电子、物联网、通讯设备、医疗服...

关于程序是怎样在STM32里运行的,有点困惑

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行...

一个计算机专业,嵌入式方向学生的疑惑。

关于选择方向,仁者见仁,智者见智,我还是比较偏向ARM方面(STM32使用的是ARM内核),应用范围广。DSP主要在数字处理方面应用多。有什么问题。可以追问我。

STM32的SysTick内设以及中断查询响应的深层次原理的困惑

“单片机每次扫描是否响应中断也会浪费时间”这是由独立的NVIC单元实现的,不影响内核中其它单元的工作。NVIC单元与处理器内核是紧密耦合的,其触发信号直接相连,是个位数纳秒级的延迟,所以不存在你所说的这种情况。

普通大学大三学生困惑,具体如题。科研 竞赛 发文章

所以在这方面,我的理解是,你可以不发文章,但在内涵上要有足够的水平和独到见解。2、你如果有时间,我觉得你可以做一些控制类的课题,哪怕是一些小课题,比如玩单片机如STM8,STM32等,这对你的经验和能力的提升很有好处,而且这东西很实用,以后对工作也有帮助。如果水平高,也可以参加一些比如电子...

8位和32位单片机变量占多少字节?

在Keil MDK配合STM32的测试中,我们同样针对数据占用大小进行了验证:char类型的变量仍旧占用1字节,这个结果可能让一些人感到困惑,因为它与32位系统下字节对齐规则有所不同。实际上,对于char而言,仅占用第一个字节,这是因为32位处理器以4字节为单位进行存储和对齐。短类型(short)数据同样占用2字节。

STM32f103C8T6的优势和作用是什么?

在使用STM32F103C8T6的过程中,用户会发现其拥有丰富且详细的资料教程。无论是对固件库的概念感到困惑,还是遇到特定问题,都能在网上找到详尽的答案。这种资源的丰富性降低了学习门槛,极大地提升了产品开发效率。这款单片机的稳定性与高性价比在市场中赢得了广泛认可。尽管早期价格较低,但近年来价格逐渐...

stm32这两种初始化有什么不同 GPIO_Init,GPIO_StructInit,各位路过的看...

param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains the configuration information for the specified GPIO peripheral.retval None / void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct){ uint32_t currentmode = 0x00, currentpin = 0x00, pinpos...

...If you're trying to connect to an STM32W1xx device,please解决办...

首先,若问题依旧存在,检查目标设置中"Hard"是否已更改为"Soft",但此方法并未解决我的问题。接着,确保正确连接单片机与ST-LINK工具,蓝色线缆应连接至单片机的GND端。随后,使用STM32 ST-LINK Utility工具进行连接。若对工具使用感到困惑,可以参考之前提供的链接以获取具体操作指南。遵循上述步骤后,...

嵌入式杂谈之中断向量表

理解了中断向量表,我们能看到汇编在嵌入式开发中的重要性,尤其是对于bootloader和某些定制函数。例如,STM32的启动文件也包含中断向量表设置,尽管细节可能有所不同。通过研究这些细节,我们不仅能掌握基本操作,还能应对更复杂的应用场景。总的来说,中断向量表是嵌入式开发中不可或缺的一部分,它揭示了...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
金鱼是如何培育的 绝版七匹狼长什么样 苹果4s恢复之后开机整体都是灰色了怎么办 苹果4s看小说时屏幕呈灰色是无意中按了什么键 新化到遵义的经过列车什么时候到 为什么iPhone4s向下滑搜索iPhone屏幕会变成灰色 是正常的吗 你好 苹果4swifi打不开显示灰色怎么修啊?? 快干胶水配方及特点介绍杂用品 苹果4Sv if i 变成灰色不能用了怎么办? iphone4s屏幕为什么变成灰色? STM32的中断处理流程是怎样的?与ARM7 ARM9相同吗? STM32F0 中断向量地址怎么设置? STM32的 中断源 和 中断服务程序 是如何关联的呢? STM32 RW问题请教 stm32中断向量表中外部中断的个数为什么是5个 stm32调试不应进入.s启动文件 请问STM32程序中的这几个头文件,各有什么作用? STM32中,中断向量表,中断向量,中断服务函数3者关系。stm32中是处理中断事件的具体过程是怎么样的? stm32 如何将中断处理程序地址置入中断向量表 - 信息提示 stm32中断向量表是怎么放在指定的地址的 中断向量表STM32怎样配置 游舒舒舒舒名字含义是什么 姓舒的取什么名字好 姓张中间字想用舒字,起什么名字好听? 张舒濛名字有什么含义 舒蓉这个名字的含义是什么? 舒秋甜名字的意思 舒 在起名中的意义!想起个舒字的名字,三个字的名字,舒在中间! 杨旺舒名字的含义? stm32中断向量表怎么重映射 stm32f407入口中断向量表是哪个文件 stm32f1一共有多少中断向量 STM32的中断怎么写,用原子提供的方法,有点迷惑.求答案 酒后吃香蕉能不能达到解酒目的? 听朋友说喝酒之后,多吃香蕉对胃好,也能解酒是真的吗? 喝多了吃香蕉能解酒吗 喝白酒怎么吃香蕉解酒,吃香蕉解酒方法 买了些燕窝给家里老人,该跟什么材料炖比较好呢? 咸阳失业保险1月领多少钱 眼眶肿瘤会引起血红蛋白白血病偏低吗 请问谁知道在北京同仁医院,眼眶肿瘤需要住院,一般需要等多久可以住进去??求解!! 为什么我下载 的高德地图为什么安装不上那? 手机地图,为什么我的手机安装不了高德地图了? 高德地图装不上,显示软件未安装 手机下载了高德地图安装不上,以前能 匡威帆布鞋上面的环是铝的吗 下载的高德地图安装不了怎么办 求解 匡威帆布鞋材质是不是用的上等帆布和牛皮?求实话实说 一定采纳 谢谢! 求一篇入党积极分子,第一次和第二次写的思想汇报