stm32 编程用到的文档

高手入门STM32总结+学习步骤 一、入门总结 1.1为什么要把时间花在“犹豫”上? 每当我们在入门之前(ARM是这样,DSP也一样),总会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。 大家可能是从51单片机过来的,回想一... 阅读详情

来自:http://www.cnblogs.com/TrueElement/archive/2012/09/12/2682371.html


要使用STM32,需要各种文档,其中有(以STM32F103RBT6为例):

st官方资源地址:http://www.st.com/internet/mcu/product/164487.jsp

1、datasheet:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf

2、REFERENCE MANUALS:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf

3、ERRATA SHEETS:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00190234.pdf

4、STM32F10x standard peripheral library:http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip

ARM官方:

5、Cortex-M3 Technical Reference Manual Revision r1p1:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1p1_trm.pdf

6、ARMv7M Architecture Reference Manual:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html

非官方的:

The Definitive Guide to the ARM Cortex-M3(中文名:Cortex-M3 权威指南),虽然非官方,但很权威

 下面,我们看看关于NVIC寄存器的描述,都在哪些手册里面有提到

在使用STM32F10x standard peripheral library写有关于stm32中断的程序的时候,需要开启某个特定中断的控制位,除了对应外设的寄存器之外,还需要设置NVIC的相关寄存器的对应位。例如:

复制代码
/******  STM32 specific Interrupt Numbers *********************************************************/
  WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                            */
  PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt            */
  TAMPER_IRQn                 = 2,      /*!< Tamper Interrupt                                     */
  RTC_IRQn                    = 3,      /*!< RTC global Interrupt                                 */
  FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                               */
  RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                 */
  EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                 */
  EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                 */
  EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                 */
  EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                 */
  EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                 */
  DMA1_Channel1_IRQn          = 11,     /*!< DMA1 Channel 1 global Interrupt                      */
  DMA1_Channel2_IRQn          = 12,     /*!< DMA1 Channel 2 global Interrupt                      */
  DMA1_Channel3_IRQn          = 13,     /*!< DMA1 Channel 3 global Interrupt                      */
  DMA1_Channel4_IRQn          = 14,     /*!< DMA1 Channel 4 global Interrupt                      */
  DMA1_Channel5_IRQn          = 15,     /*!< DMA1 Channel 5 global Interrupt                      */
  DMA1_Channel6_IRQn          = 16,     /*!< DMA1 Channel 6 global Interrupt                      */
  DMA1_Channel7_IRQn          = 17,     /*!< DMA1 Channel 7 global Interrupt                      */

    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
复制代码

而NVIC_Init()这个函数:

复制代码
/**
  * @brief  Initializes the NVIC peripheral according to the specified
  *         parameters in the NVIC_InitStruct.
  * @param  NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
  *         the configuration information for the specified NVIC peripheral.
  * @retval None
  */
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
  uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
  
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));  
  assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
    
  if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  {
    /* Compute the Corresponding IRQ Priority --------------------------------*/    
    tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
    tmppre = (0x4 - tmppriority);
    tmpsub = tmpsub >> tmppriority;

    tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
    tmppriority = tmppriority << 0x04;
        
    NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
    
    /* Enable the Selected IRQ Channels --------------------------------------*/
    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
  else
  {
    /* Disable the Selected IRQ Channels -------------------------------------*/
    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
}
复制代码

可以看到,它会去设置几个寄存器:NVIC的IP,ISER,ICER等等,NVIC是基址,为:

#define SCS_BASE            (0xE000E000)                              /*!< System Control Space Base Address */
#define NVIC_BASE           (SCS_BASE +  0x0100)                      /*!< NVIC Base Address                 */
#define SCB_BASE            (SCS_BASE +  0x0D00)                      /*!< System Control Block Base Address */


#define NVIC                ((NVIC_Type *)          NVIC_BASE)        /*!< NVIC configuration struct         */

NVIC_Type为:

复制代码
/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC
  memory mapped structure for Nested Vectored Interrupt Controller (NVIC)
  @{
 */
typedef struct
{
  __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */
       uint32_t RESERVED0[24];                                   
  __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */
       uint32_t RSERVED1[24];                                    
  __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */
       uint32_t RESERVED2[24];                                   
  __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */
       uint32_t RESERVED3[24];                                   
  __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */
       uint32_t RESERVED4[56];                                   
  __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */
       uint32_t RESERVED5[644];                                  
  __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */
}  NVIC_Type;                                               
/*@}*/ /* end of group CMSIS_CM3_NVIC */
复制代码

从上面可以了解到的是,NVIC的寄存器的基址是没有错的,《The Definitive Guide to the ARM Cortex-M3》 85页有个比较详细的内存图;或者查看《Cortex-M3 Technical Reference Manual Revision r1p1》3.4 System address map,6.3 NVIC programmers model:

以及:

以及ARMv7-M Architecture Reference Manual中,B3.4 Nested Vectored Interrupt Controller (NVIC)的相关说明,例如:

当然,你看权威指南也可以的,在其APPENDIX D:NVIC Registers Quick Reference里面也有所描述。

但还有一个问题,我怎么知道这个Interrupt Set-Enable Registers寄存器的哪个位对应哪个中断呢?例如NVIC_ISER0的第0位对应哪个呢,其实,上面的表B3-31的说明已经说了,每一位对应一个中断号,所以我们还得看看stm32F103对应的中断号,可以查阅《RM0008:Reference manual》的第10章,Interrupts and events中的中断向量表,找到对应MD容量的那个表Table 63. Vector table for other STM32F10xxx devices,前面16个M3内核的中断,不可以从这个寄存器里控制,所以不管,我们从WWDG开始,可以看到这个表中的第一列即对应于寄存器中的某位(超过31的自己换算一下即可):

可以看到,STM32F10x standard peripheral library文件stm32f10x.h中的中断号的定义是能够与这里对应上的。

另外,stm32F103RB的Datasheet(CD00161566)里面的2.3.5 Nested vectored interrupt controller (NVIC)提到F103仅有43个可屏蔽中断,所以只需用到NVIC_ISER0和NVIC_ISER1来设置启用外设中断。

【The STM32F103xx performance line embeds a nested vectored interrupt controller able to handle up to 43 maskable interrupt channels (not including the 16 interrupt lines of Cortex™-M3) and 16 priority levels.】

得查阅这么多文档,才能知道这个Interrupt Set-Enable Registers寄存器在哪里有描述,怎么设置,文档很分散。这些文档估计是程序员组织的,呵呵。因为像这些M3内核的相关模块,与外设无关的,只要是M3内核的器件都是通用的,所以不用每个器件的手册都带,这样比较节省空间,⊙﹏⊙b汗

所以,以后要是涉及到M3内核相关的,都得去查阅《M3权威指南》或者官方的《Cortex-M3 Technical Reference Manual》以及《ARMv7M Architecture Reference Manual》。

2012年9月13日17:43:13 更新:

根据xieyudi的回复,查看了PM0056: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual

里面对于M3内核的部分介绍的比较详细,关于NVIC,SCB寄存器的说明都有了,基本可以不用看ARM的官方文档即可编程。感谢xieyudi网友

顺带,Flash相关的说明在:PM0075: STM32F10xxx Flash memory microcontrollers


STM32 USB OTG主机模式的实现方法 这里的USBH_MSC_Read10和USBH_MSC_Write10是USB主机传输数据的HAL库函数,其中0x50代表USB设备地址,ReadBuffer和WriteBuffer代表读写数据的缓冲区,512代表每次读写的数据大小。STM32微控制器通过其内置的USB OTG模块可以实现USB主机模式,从而实现与其他USB设备的通信。同时,需要注意给USB设备供电以及电源接地的连接。通过合理的硬件连接和软件编程,我们可以实现与各种USB设备的通信,为嵌入式系统的应用提供了更多的扩展性和灵活性。 阅读详情

相关推荐

STM32官方手册(中英文版)

1-STM32F10x-英文参考手册 1-STM32F10x-中文参考手册 2-STM32F103xCDE_数据手册-英文 2-STM32F103xCDE_数据手册-中文 STM8和STM32产品选型手册 STM32F10xxx Cortex-M3编程手册-英文版 STM32F10xxx闪存编程参考手册 STM32F103函数库手册 STM32系统存储器启动模式

STM32文档中关于NVIC寄存器说明的位置

要使用STM32,需要各种文档,其中有(以STM32F103RBT6为例): st官方资源地址:http://www.st.com/internet/mcu/product/164487.jsp 1、datasheet:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD0016...

weixin_33989780的博客 877

帝国CMS v7.5存储型XSS漏洞挖掘与修复实战

存储型XSS(跨站脚本攻击)是一种常见的Web安全漏洞,其核心原理是攻击者将恶意脚本代码提交并永久存储在服务器端(如数据库),当其他用户访问包含该数据的页面时,脚本会在其浏览器中执行。这种漏洞的危害在于其持久性和广泛的影响范围,可能导致用户Cookie被窃取、会话被劫持,甚至引发蠕虫式传播。从技术价值看,理解存储型XSS有助于掌握Web应用安全的核心逻辑,即数据在输入、处理和输出全链路中的安全风险。在内容管理系统(CMS)等Web应用场景中,用户可控的输入点(如个人资料、评论、公告)若未经妥善过滤和输出编码

weixin_29327525的博客 299

stm32学习-nvic的理解与使用

1、nvic的资料 Nested Vectored Interrupt Controller,全称嵌套向量中断控制器,见名知意,这是arm公司提供的中断控制的部件。 在线pdf文档 从pdf中可以看到nvic被归类为cortex-m4内核的外设,这个外设并非st公司参与设计,是arm公司设计的,所以在stm32参考手册里面nvic的资料写的非常少。 既然是外设就应该关注的是它的寄...

z7的博客 5059

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

基于Python的MGWR多尺度地理加权回归模型

多尺度地理加权回归(MGWR)变量之间的关系在地理空间上不是均一的,所有特征变量的影响都在不同的空间范围(带宽)内变化,某些变量可能表现出局部性影响(小带宽),某些变量可能表现出全局性影响(大带宽),通过优化每个特征变量的带宽,捕捉到空间关系的多尺度特性,得到更细致的模型解释。

weixin_61965078的博客 3853

STM32中的NVIC

NVIC

W546556的博客 3068

热力学仿真软件:Fluent_(13).燃烧与化学反应仿真

燃烧模型在热力学仿真软件中扮演着至关重要的角色。Fluent 提供了多种燃烧模型,包括层流预混燃烧模型、湍流预混燃烧模型、非预混燃烧模型、部分预混燃烧模型等。这些模型可以帮助用户模拟不同的燃烧过程,从而更好地理解燃烧现象和优化燃烧系统设计。

kkchenjj的博客 1252

STM32F10xNVIC探究与学习_2021-04-24

NVIC探究与学习 嵌套向量中断控制器(NVIC) NVIC 驱动有多种用途:例如使能或者失能 IRQ 中断,使能或者失能单独的 IRQ 通道,改变 IRQ 通道的优 先级等等 //NVIC寄存器结构 //NVIC 寄存器结构,NVIC_TypeDeff,在文件“stm32f10x_map.h”中定义如下: typedef struct { vu32 Enable//[2]; u32 RESERVED0//[30]; vu32 Disable//[2]; u32 RSERVED1//

m0_55780793的博客 730

YOLO11改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

yolo11,yolo11改进,yolo11创新,yolo11添加注意力机制

kay_545 1229

SAP 系统间 SSO 的真正价值,从 SM59 到可信 RFC 的安全设计

SAP S/4HANA系统间Single Sign-On(SSO)的核心价值在于集中管理通信身份与信任关系,而非仅减少密码输入。传统固定账号密码方式在系统规模扩大后会面临密码管理、审计追踪等挑战。通过SM59配置可信RFC目标系统,结合SSL证书或SAP Trusted System等强认证机制,能有效降低安全凭据暴露风险。SSO配置需配合授权对象、角色管理等建立清晰的信任边界,实现系统间安全通信的同时保持可审计性。这种方案特别适用于Fiori前端与S/4HANA后端等场景,通过可信RFC传递用户身份,避免

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1062

STM32CubeProg 下载及安装教程

STM32Cube 系列之 STM32CubeProgrammer 下载及安装教程,内附详细安装步骤。

Brendon_Tan的博客 7万+

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

输入电压采集上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, 由于二极 管的正向导通特性, 用户反接电源时亦不会烧坏后级电路。图中 R8、R9 组成分压电路, 由单片机 AD 采集 IO 口 P14 采集 AD 值, 并由计算公式电压 =133300(AD/4096)mV;

Naiva的博客 1994

STM32开发利器:STM32CubeMX

这篇博客篇幅不长,主要是为大家介绍ST公司推出的STM32CubeMX开发工具,当成下周更新STM32 10个项目工程的预备篇,同时FPGA FPGA 20个例程篇:8.SD卡任意地址的读写,代码部分已经编写完毕,对应博客正在整理中,如图1所示即为STM32CubeMX的图标。图1 STM32CubeMX图标 在介绍STM32CubeMX之前,我们需要知道HAL库这个概念,实际在早些年大概2018年以前吧,大家做STM32工程开发,用的最多的是标准库,标准库自出道超过 10 年以来受广大使用者推

wandou0511的博客 3万+

Skills入门学习路线

简单来说,Skills就像是给Claude准备的”插件包"或”工具箱”。它是一个集合,里面装了特定的操作指令(Instructions)、可执行脚本(Scripts)和相关素材(Resources)。2025 年 10 月中旬,Anthropic 正式发布 Claude Skills。两个月后,Agent Skills 作为开放标准被进一步发布,意在引导一个新的 AI Agent 开发生态。OpenAI、Github、VS Code、Cursor 均已跟进。为了更好的理解,你可以把。

十二测试录 1098

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

学习STM32单片机,从菜鸟到牛人就是这样简单

我想说,为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习stm32? 本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。 你要考虑的是, 我可以用STM32实现什么? 为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能...

xiaoxia的博客 5万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32Cube 生态系统之网站、视频、文档及教程汇总

STM32Cube 系列软件之网站、视频、文档及教程汇总,收录了ST官方软件网址、MOOC 网址、文档网址、视频网址以及个人手把手教程网址。

Brendon_Tan的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【STM32】HAL库 STM32CubeMX系列学习教程

STM32CubeMX 简介 1、STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具...

Z小旋 52万+

STM32CubeProgrammer STM32CubeIDE下载算法 外部存储QSPI Flash

随言: STM32CubeIDE QSPI间接模式和内存映射模式 读写W25Q64:https://blog.youkuaiyun.com/sudaroot/article/details/109097135 MDK KEIL 下载算法外部存储QSPI FLASH:https://blog.youkuaiyun.com/sudaroot/article/details/109517371 理论来说,STM32CubeProgrammer和 STM32 ST-LINK Utility下载算法程序是一样的,都能相互使用。 .

sudaroot的博客 1万+

STM32CubeIDE 下载及安装教程

STM32Cube系列之STM32CubeIDE 下载及安装教程,内附详细安装步骤。

Brendon_Tan的博客 8万+

让菜鸟秒变stm32高手的STM32CubeMX

菜鸟到高手,显得有些霸气哈,不过的确如此,官方带给我们一个比较实用的stm32的工具。这个工具就是STM32CubeMX,昨天玩freeRTOS的时候就提到过。说到freeRTOS,这里就多说两句。全局变量,在任务间相互访问的时候也是需要临界保护的,不然可能会出现奇怪的问题。不过我们可以关掉时间片调度,任务间可以访问全局变量而不用加保护(不等于菜鸟可以随意代码)。关闭了时间片调度,只有发生vTas

zhangyongdzgcs的博客 5万+

安装STM32开发工具:STM32CubeMX、STM32CubeIDE、STM32CubeCLT

安装STM32开发工具:STM32CubeMX、STM32CubeIDE、STM32CubeCLT,使用STMCU中国官网解决ST官网下载过慢的问题

m0_73500130的博客 7593

STM32CubeIDE使用示例(STM32CubeMX+STM32CubeIDE+Gcc+JLINK+STM32G030C8T6)

STM32CubeIDE是STMicroelectronics开发的一款集成开发环境(IDE),用于编程和调试STM32微控制器。以下是对STM32CubeIDE的介绍:集成了STM32Cube软件平台,提供了丰富的软件组件和例程。支持多种编程语言,包括C、C++以及汇编语言。提供了直观易用的图形化界面,方便配置和管理工程。内置了调试器,支持在线调试和仿真功能。具备代码生成和自动完成功能,提高开发效率。STM32CubeMX是一个图形化配置工具,在STM32CubeIDE中进行集成。

AnChenliang_1002的博客 8409

STM32固件库编程入门

STM32固件库编程入门

阿柴的博客 3889
上一篇: davinci 达芬奇 时钟驱动分析 dm365/dm368 struct clk
下一篇: STM32 启动解析,启动代码,__main main
#Page#
博客等级 码龄23年 1691粉丝 360原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值