历史上的今天
返回首页

历史上的今天

今天是:2024年09月12日(星期四)

正在发生

2019年09月12日 | stm32 各头文件或C文件功能

2019-09-12 来源: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地址。

推荐阅读

史海拾趣

屹晶微(EG)公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,屹晶微逐渐意识到与合作伙伴建立长期战略合作关系的重要性。于是,在2023年,他们与电子产业一站式服务平台华秋电子达成了授权代理合作。这一合作不仅为屹晶微提供了更广阔的市场渠道和客户资源,也为其未来的发展奠定了坚实的基础。

在合作过程中,华秋电子为屹晶微提供了全方位的支持和服务。他们共同推广屹晶微的芯片产品,为客户提供更优质的解决方案和服务。同时,华秋电子还利用自身的技术优势和渠道优势,帮助屹晶微拓展海外市场,提升品牌知名度和影响力。

以上两个故事只是屹晶微在电子行业中发展起来的一部分。他们的发展历程充满了挑战和机遇,但黄米龙和他的团队始终保持着坚定的信念和不懈的努力,为中国的芯片产业做出了积极的贡献。

HEC Inc公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,屹晶微逐渐意识到与合作伙伴建立长期战略合作关系的重要性。于是,在2023年,他们与电子产业一站式服务平台华秋电子达成了授权代理合作。这一合作不仅为屹晶微提供了更广阔的市场渠道和客户资源,也为其未来的发展奠定了坚实的基础。

在合作过程中,华秋电子为屹晶微提供了全方位的支持和服务。他们共同推广屹晶微的芯片产品,为客户提供更优质的解决方案和服务。同时,华秋电子还利用自身的技术优势和渠道优势,帮助屹晶微拓展海外市场,提升品牌知名度和影响力。

以上两个故事只是屹晶微在电子行业中发展起来的一部分。他们的发展历程充满了挑战和机遇,但黄米龙和他的团队始终保持着坚定的信念和不懈的努力,为中国的芯片产业做出了积极的贡献。

BOPLA公司的发展小趣事

在国内市场取得一定成绩后,BOPLA开始将目光投向海外市场。通过参加国际电子展会、与海外客户建立合作关系等方式,公司成功将产品打入国际市场。同时,BOPLA还积极调整产品策略,根据不同国家和地区的市场需求,推出定制化的电子元件产品,进一步扩大了市场份额。

深圳杜因特(DOINGTER)公司的发展小趣事

作为一家快速发展的电子企业,杜因特深知人才是公司最宝贵的财富。因此,公司始终将团队建设和人才培养放在重要位置。通过引进优秀人才、加强内部培训等方式,杜因特打造了一支高效协作、专业精湛的团队。同时,公司还为员工提供了良好的工作环境和福利待遇,让员工能够在一个如家般的团队中做具有革新性的工作。

以上五个故事仅是基于已知信息对深圳杜因特公司发展起来的相关事实的概括性描述,具体细节可能因实际情况而有所不同。

Davies Molding公司的发展小趣事

随着电子行业的快速发展,Davies Molding公司意识到,只有不断创新,才能在市场上保持领先地位。因此,公司积极引进先进的生产技术和设备,不断提升自身的研发能力。通过不断的技术创新,Davies Molding公司成功推出了一系列具有竞争力的新产品,满足了市场对高品质塑料注塑成型产品的需求。

Anvo-Systems公司的发展小趣事

随着公司业务的不断扩展,Anvo-Systems开始实施国际化战略。公司先后在亚洲、欧洲和北美等地设立了研发中心和生产基地,以更好地满足不同地区的市场需求。同时,Anvo-Systems积极参与国际电子展会和技术交流活动,与全球同行建立了广泛的合作关系。这一全球化布局不仅提升了公司的竞争力,也为公司的长期发展打开了新的空间。

问答坊 | AI 解惑

TI28335的参考资料集锦

28335片内FLASH插件安装方法 http://www.hellodsp.com/bbs/viewthread.php?tid=7487 28335的ADC_DMA例程 http://www.hellodsp.com/bbs/viewthread.php?tid=7488 SEED_DEC28335用户指南 http://www.hellodsp.com/bbs/viewthread.php?tid=7489 ...…

查看全部问答>

去耦电容和旁路电容的区别

旁路电容不是理论概念,而是一个经常使用的实用方法,在50 -- 60年代,这个词也就有它特有的含义,现在已不多用。电子管或者晶体管是需要偏置的,就是决定工作点的直流供电条件。例如电子管的栅极相对于阴极往往要求加有负压,为了在一个直流电源下 ...…

查看全部问答>

]经典LED知识介绍!

replyreload += \',\' + 378446;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

大家用ARM在开发什么产品?

能大概介绍下吗,本人想做ARM的产品,但不知道做什么好。 …

查看全部问答>

驻极体话筒+运算放大器+AD转换

我想把外界的音乐,声音等信号采集进单片机(AT89S51),采样频率在44.1KHz,问请用什么运算放大器和AD转换器…

查看全部问答>

WINCE 分区如何隐藏

eboot 分了 4个分区, 1个binfs 3个fatfs 3个fatfs在pc上都是别出来了, 现在遇到以下问题: 1). 我想隐藏其中2个fatfs分区, 因为 我要放 应用程序 用 所以需要隐藏起来 2). 现在分区的路径名是按默认的名字, 比如默认是 disk, 那么 后面几 ...…

查看全部问答>

哪位大侠开发过Symbol MC1000?

RT,系统是wince4.2,哪位开发过?麻烦发个类似记事本写字板一样的能有输入和存档。以前从未在wince上开发过,新手初来,请各位帮忙!!感谢!! 邮箱:jackbinhao@163.com…

查看全部问答>

关于ui和菜单,急!

大家好:   谁对UI比较熟,还有就是做菜单的技术,菜单就像是彩屏手机里的菜单或是数字电视里的菜单等,这项技术如何实现,我开发过程中要用到,挺急的,请大家帮忙给我点建议或资料吧。先谢谢了。…

查看全部问答>

mobile开发模式与.net类似吗?

如题, 小弟正在学习mobile开发, 因为以前做asp.net, 所以想请教mobile开发模式与.net开发有什么区别, 比如.net主要是事件,用户触发事件后, 需要编写事件的处理函数,而windowsce是消息机制, 请问这个消息和事件的区别, 总是在源码里 ...…

查看全部问答>

#include路径怎么写啊,请高手指点

看了Ti的文档还是不太清楚,最后只能写绝对路径,就是包含盘符的那种,不过还是不太好 现在情况是这样的:在include文件夹下面我定义了A、B、C三个文件夹,用来放置三种.h文件 其中A文件夹中又有A1、A2、A3三个文件夹,如何包含这几个文件夹的头 ...…

查看全部问答>