历史上的今天
返回首页

历史上的今天

今天是:2025年07月29日(星期二)

正在发生

2019年07月29日 | stm32 各头文件或C文件功能

2019-07-29 来源:eefocus

     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地址。


推荐阅读

史海拾趣

台湾第一电阻(Firstohm)公司的发展小趣事
电冰箱节能省电的方法主要包括以下几点:一是合理设置温度,避免过低或过高的温度设置导致能耗增加;二是减少开门次数和时间,避免冷气流失;三是定期除霜,避免霜层过厚影响制冷效果;四是选择能效等级高的电冰箱产品,以降低能耗。
BETA Transformer Technology Corp公司的发展小趣事

随着全球环保意识的不断提高,BETA Transformer Technology Corp公司积极响应国家绿色发展的号召,将环保理念贯穿于产品研发、生产和销售的全过程。公司推出了一系列节能环保的变压器产品,深受客户好评。同时,BETA公司还加强了对生产废弃物的处理和回收利用,实现了资源的循环利用和减少环境污染。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

Daewoo公司的发展小趣事

Daewoo公司最初由金宇中于1967年创建,起始于一个规模不大的纺织厂。然而,金宇中并不满足于纺织业的局限,他敏锐地察觉到了韩国经济快速发展的机遇。于是,Daewoo公司逐渐扩展业务领域,70年代侧重发展化学工业,80年代后更是进军汽车、电子和重工业领域,并积极参与国外资源的开发。这种前瞻性的战略布局,为Daewoo公司的快速发展奠定了基础。

GradConn Ltd公司的发展小趣事

GradConn深知不同客户对连接解决方案的需求各不相同,因此公司特别注重提供定制化服务。通过与客户紧密合作,GradConn能够深入了解其特定需求,并据此设计出符合客户要求的定制化产品。这种服务不仅提升了客户的满意度,还增强了GradConn在市场上的竞争力。许多知名企业都选择GradConn作为其连接器和电缆组件的供应商,正是看中了其强大的定制化能力。

Crane Co.公司的发展小趣事

到了1860年代,Crane Co.作为西北制造公司,开始为铁路部门供应蒸汽机的关键部件,并涉足蒸汽加热业务领域。这一时期,公司不仅展现了其在机械制造方面的实力,还通过不断创新和拓展业务范围,为公司的长远发展奠定了坚实基础。

Amplitronix LLC公司的发展小趣事

随着公司的规模不断扩大,Amplitronix LLC开始重视内部管理和企业文化的塑造。他们引进了一系列先进的管理理念和方法,优化了公司的组织结构和管理流程。同时,公司也注重员工的培训和发展,为员工提供了广阔的职业发展空间和良好的福利待遇。这些措施不仅提升了员工的工作积极性和满意度,也为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

串行E2ROM与看门狗

串行E2ROM与看门狗…

查看全部问答>

太阳能闪光钥匙扣,很有意思的小东西

【说明】:太阳能闪光钥匙扣,是最新的太阳能应用产品,利用弱光型非晶硅太阳能电池的供电原理,使高品质LCD闪烁发光,是一款品牌宣传的工艺精品,也是新颖的送礼佳品。由太阳能供电,无须更换电池;液晶屏幕亮暗交替变化,室内或室外光线下都可闪 ...…

查看全部问答>

用电子管收音机元件 制作怀旧胆机

全部采用旧电子管收音机的6P1牛和电子管,底盘是铝的。电阻和电容是新的。耦合是WIMA,曾经用千层糕电容,不过那种电容实在太脆弱了,电烙铁在其表面一烫就短路报废了。 另外曾采用所谓西电麻线做连线,发觉这种线的外布皮很容易烂,安全性不好,已较 ...…

查看全部问答>

TCPMP Wince6.0 VS2005 编过了, interface.plg死活加载不上

相关的只做过一个改动 player下main.c下只改了一个宏定义 // don\'t want to use common.dll, but don\'t want to collide with DLL import function either #define tcscpy_s _tcscpy_s 改成了 #define tcscpy_s _mtcscpy_s 原因是_tcscpy_s ...…

查看全部问答>

Wince5.0 DMA中断

各位英雄:     小弟最近研究摄像头驱动(WINCE5.0+PXA270+OV9650),涉及到DMA中断。     BSP中至少有两个驱动使用DMA中断:     其一就是音频,在\\Src\\Kernel\\Oal\\intr.c文件中使用OALIntrStaticTranslate( ...…

查看全部问答>

请问在ppc2003中显示的bitmap能添加点击事件吗?

如题,在ppc2003模拟器的屏幕上画了一幅bitmap,能不能对该bitmap写一个鼠标点击事件?如何实现?请赐教!在线等…

查看全部问答>

有段ARM汇编代码不理解,请高手指点.

             IMPORT      |Image$$RO$$Limit|              IMPORT      |Image$$RW$$Base|      & ...…

查看全部问答>

WL板子EK-STM32F103调试读SD卡经验总结

  一开始碰到的问题:发送CMD0能执行返回01,CMD1超时没响应。查到原因:模板程序控制SD供电逻辑反了。#if 0 #define MSD_POWER_ON()   GPIO_ResetBits(GPIOD, GPIO_Pin_10) #define MSD_POWER_OF ...…

查看全部问答>

LED点距阵的变形问题

谁能告诉我LED点距阵的变形问题是怎么回事?还有LED透明单管的气泡问题(碗内气泡)是怎么回事?非常感谢!…

查看全部问答>

蓄电池充电问题?

电池充电时 均充0.1c时,电压自动为2.40v每节? 还是我电压为2.4v时 电流自动为0.1c?…

查看全部问答>