stm32 各头文件或C文件功能

本文详细介绍了STM32嵌入式开发的基础知识,包括配置文件使用、外设地址映射、中断管理、时钟配置及启动文件解析等关键步骤。适合初学者快速上手STM32开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     stm32f10x_con.h

         配置文件:加载哪个外设、使能assert 对参数进行检查,如果使能了assert 需要在main文件中添加 _assert_faild 函数。 使能assert会增大编译出执行文件的大小,调试完后可以将assert 屏蔽。

stm32f10x.h头文件中包含了stm32f10x_conf.h 。

 


   stm32f10x.h

          1、对所有的外设的地址进行映射,映射到存储区,即定义某外设结构体变量,因为结构体是连续存储的只要将外设的基地址强制转换为结构体类型的指针,那么该外设的寄存器就可以通过指针进行访问,以GPIO为例:

定义外设的结构体,结构体变量都是volatile类型,告诉编译器不要进行优化,读取值从内存读取不要读缓存。

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
   __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

     GPIO外设的地址

            #define PERIPH_BASE           ((uint32_t)0x40000000)                     //外设别名区的基地址

            #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)        // APB2外设总线上寄存器的基地址,GPIO挂在APB2总线上

           // GPIO外设的地址

   #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
   #define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
   #define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
   #define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
   #define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
   #define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
   #define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)

  // 将外设地址强制转化为结构体的指针,然后就可以通过指针GPIOx区访问某个端口中的寄存器

  #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
  #define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
  #define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
  #define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
  #define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
  #define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
  #define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)


       2、外设寄存器位的定义


    core_cm3.c文件

 内核相关的变量和函数的定义:NVIC、systick、MPU(有的MCU没有)、调试组件

 1、NVIC相关的变量和函数。

    中断向量的使能_(我理解相当于全局中断的使能)

    中断向量的禁止

    中断向量的挂起

    清除挂起的中断

    设置中断的优先级

            读取中断的优先级

  2、systick定时器的配置,static __INLINE uint32_t SysTick_Config(uint32_t ticks);用来使能中断、开启systick定时器。

系统滴答定时器的配置,具体的systick 的介绍在cortex-m3 技术手册中有介绍。     

  system_stm32f10x.c   

        1、 时钟的频率,系统时钟的初始化,在最后设置了中断向量表的基地址和偏移地址:

SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;       

当在MDK中改变烧写程序IROM的地址时FLASH_BASE 的地址要改为IROM的地址,如果改为函数void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);修改NVIC_VectTab_FLASH 的地址,实际上这两种设置向量表的方法是一样的,都要修改向量表的基地址。        

       偏移量默认偏移量是0,从代码区启动则向量表的地址0x0800 0000,0x0800 0000保存的是堆栈栈顶的地址,代码区的烧写地址在MDK软件中设置。 

           IAP远程升级能用到这部分的内容,可以参考正点原子的教程。

               

   misc.c      

    1、void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);函数用来设置中断向量表的位置:SRAM or Flash 默认是在Flash中,偏移量必须是0x200的整数倍。

  2、NVIC中断管理的函数,使能、分组等。

   3、SCB  system control block 系统控制块

       系统控制块结构体包含了:


  startup_stm32f10x_md.s

   启动文件,启动文件中定义了该类型MCU堆的大小和栈的大小,还有中断向量表。中断向量表通过伪指令分配了各个中断入口函数,在程序进行链接时就会把中断向量表中伪指令中断函数分配实际的flash地址。

   

     



              

### STM32 C头文件的内容及其功能 `stm32f10x.h` 是针对 STM32F10x 系列微控制器设计的标准外设库的一部分。它主要提供了对硬件寄存器的访问接口以及一些宏定义,使得开发者能够更方便地操作 MCU 的各个模块。 #### 1. **头文件的主要内容** 头文件 `stm32f10x.h` 中包含了以下几类重要信息: - 宏定义:用于配置芯片的工作模式和其他参数。 - 数据结构:描述了外设寄存器的具体布局和字段含义。 - 函数声明:提供了一些基础的功能函数原型,供用户调用以实现特定的操作。 具体来说,这个头文件允许开发人员轻松访问各种片上资源而不必担心底层细节[^1]。 ```c // 示例代码展示如何利用 stm32f10x.h 来初始化 GPIO 引脚 #include "stm32f10x.h" void GPIO_Configuration(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStructure; /* 配置PA8作为推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } ``` 上述代码片段展示了当包含 `stm32f10x.h` 后,可以通过简单的 API 调用来完成复杂设置的过程[^2]。 #### 2. **实际应用场景中的优势** 在真实的嵌入式项目里,借助此类标准化头文件能极大简化编程流程并增强程序稳定性。例如,在处理定时器中断者 UART 通信等功能时,只需按照官方文档指引编写少量逻辑即可达成目标,同时保持良好的兼容性和移植性。 另外值得注意的是,除了官方提供的版本之外,社区也存在许多优化过的替代方案可供选择,比如链接所指位置可能含有经过改进后的压缩包形式分发版本[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值