历史上的今天

今天是:2024年09月13日(星期五)

正在发生

2018年09月13日 | STM32固件库文件编程结构思想的理解

发布者:巳午未 来源: eefocus关键字:STM32  固件库文件  编程结构 手机看文章 扫描二维码
随时随地手机看文章

STM32的固件库文件功能相当完善,提供的API完全能满足一般的项目需要。刚从51单片机转到STM32的人,肯定会被这么庞大的东东吓到,51单片机上对IO口操作,简简单单几行代码就搞定了,一个C源文件就搞定。假如用STM32,对IO口进行简单操作,远不是几行代码能搞定的。(其实直接操作寄存器也能搞定)。


   废话不多说,这就带你解剖固件库文件,包你看完之后豁然开朗。


   首先,请看一段简单的C语言代码



#include


#define base  0x0012ff60

#define flash ((TestType *)base)



typedef struct

{

      int i;

      int j;

      int k;

}TestType;


void main()

{

       flash->i = 0;

       flash->j = 1;

       flash->k = 2;


       printf( "%x \n", flash->i);

       printf( "%x", &(flash->i));

}


有人会问了这段代码有什么用?我告诉你ST的固件库都是按照这种方式编写的


上面程序打印出来结果为   0


                                  0x0012ff60


把上面的程序分析几分钟后,我再给你揭晓。就拿GPIOA口来说吧,你看stm32f10x.h中能看到


#define PERIPH_BASE            ((uint32_t)0x40000000)

#define  APB1PERIPH_BASE                 PERIPH_BASE

#define APB2PERIPH_BASE     (PERIPH_BASE + 0x10000)

#define AHBPERIPH_BASE       (PERIPH_BASE + 0x20000)

#define GPIOA_BASE             (APB2PERIPH_BASE + 0x0800)

 


小学学的加减法就能把GPIOA_BASE 算出来,为什么是这么多呢?看ST的手册,人家就是要规定这样,没办法。


有了地址之后,GPIOA的各个寄存器怎么办涅,它们是控制IO的关键所在。GPIO的各个寄存器都是连续排列的,为什么要连续排呢,方便找啊,用结构体就能很好搞定了


在stm32f10x.h中



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;


 


 每个寄存器都是32位的,所以很方便用结构体寻找每个寄存器,准备工作都做好了,接下来就要开始针对GPIOA设置了


在core_cm3.c中


#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

把地址强制转换成结构体指针,这样就能很方便对寄存器操作。


寄存器搞定了,接下来就真对用户操作了,要很好的让用户使用,就得人性话点,所以用enum枚举变量就能实现,你就再也不用为想输入的值去烦恼了,直接输入名称就行了,拿IO口的输出速度来说


typedef enum

  GPIO_Speed_10MHz = 1,

  GPIO_Speed_2MHz, 

  GPIO_Speed_50MHz

}GPIOSpeed_TypeDef;

 


要说人性化,ST还有一点不得不提,那就是位带操作,改变了 写地址-取地址数据-位操作-数据写入地址的操作,直接改为写地址-数据写入


,直接位操作。


ST的编程结构是很值得借鉴的,使得编程序时结构很清晰,脉络很清楚。至于如何去发挥,得看个人水平了


关键字:STM32  固件库文件  编程结构 引用地址:STM32固件库文件编程结构思想的理解

上一篇:菜鸟初识STM32固件库文件夹
下一篇:STM32库文件结构及CMSIS介绍

推荐阅读

2019年9月11日,“物联世界 传感先行”第七届国际物联网传感技术峰会如约举行。三年之后,大会二临温州乐清,展望全球传感器、中国物联网应用领域未来发展趋势,探讨物联网、传感、智慧城市、大数据、AI等产业现状,共谋我国规划传感器、物联网应用未来的发展路线图,加速产业成熟。本届峰会由国家工业信息安全发展研究中心、德国传感与测量技术专业协会...
在今年疫情影响下,多家机构预测全球MCU芯片销售萎缩,然而,在国际贸易形势发生重大变化以及国内新基建如火如荼建设的背景下,国内MCU市场表现出了足够的韧性,在市场需求仍很强劲的背景下,国内MCU厂商迎来发展良机。对于数百家国产MCU厂商而言,如何在机遇面前完善产业布局,缩小与国外龙头企业差距?9月9日,中科芯集成电路有限公司携多款MCU新品亮相2...
大家好,对于波形的频率测量,您知道有哪种方法可以不受采样率控制,测量精度高到在停止状态下,测量结果依然能随信号频率的微小波动而改变吗?当屏幕上出现的波形不足一个周期时,在不放大水平时基的情况下,您知道如何自动测量其波形的频率吗?ZDS2022示波器测量功能中的全硬件频率计全都可以帮您轻松实现!按下【Measure】键,在测量项选择菜单中旋转旋...

史海拾趣

问答坊 | AI 解惑

能不能给些关于无线遥控密码锁的资料哈?谢谢大家

最近在做毕业设计,感觉思路出了点问题,不懂如何去进行无线接收的编程大家给我点意见和相关资料哈谢谢各位神仙[:D]逼人邮箱:flying-heron@163.com…

查看全部问答∨

做个单片机业务

本人需要做一个 利用单片机做一个控制电流强度和时间长短 带软件的系统   具体酬劳QQ商量  331379492…

查看全部问答∨

RFID成为中国CIO最关注五大技术领域之一

RFID成为中国CIO最关注五大技术领域之一…

查看全部问答∨

为什么现在这个论坛总限制我发帖的分数??????????

为什么现在这个论坛总限制我发帖的分数?????????? 为什么现在这个论坛总限制我发帖的分数?????????? 为什么现在这个论坛总限制我发帖的分数??????????…

查看全部问答∨

“两次从高特权级到低特权级,一次从低特权级到高特权级” ?

P80《自己动手写操作系统》里面有这句话“两次从高特权级到低特权级,一次从低特权级到高特权级” 只有P78有个由ring0到ring3 ,是从高特权级到低特权级。 另外一次从高特权级到低特权级,一次从低特权级到高特权级,怎么没有看到啊?…

查看全部问答∨

4 PowerPC DMA 问题???

  在单PowerPC(CK5)上 做了PCI采集系统 DMA传输成功 但在4 powerpc(DY4)主板上 DMA传输不成功 是什么原因 ???DMA 的主从设置问题吗????…

查看全部问答∨

求tlc549的简单程序。

我见天看了AD转换,但是不会写程序。不知道怎么做,希望大家给个简单的程序,只要叫AD的变化,在数码管上显示就可以了。谢谢啊。p1^1控制io。 p3^2控制out。p1^0 .控制/cs(低电平有效)。…

查看全部问答∨

dsp交流电机控制开发板全套资料

最近对DSP很感兴趣,所以发些资料,希望大家有好的资料也都共享出来,这样才能有技术的提升!~   资料为开发板原理图,程序,说明文档!~有兴趣的话我们也可以组织DIY一下!~ [ 本帖最后由 wanghongyang 于 2011-2-13 10:36 编辑 ]…

查看全部问答∨

能直接购买集成模块吗?

本帖最后由 paulhyde 于 2014-9-15 08:59 编辑 对于竞赛用的模块,是要自己买芯片回来自己做板子,还是直接在淘宝上买商品化的模块,回来只管算法就好了... 请教参加过国赛和有经验的大牛们....或者哪能查到相关规定....  …

查看全部问答∨

MSP430C语言编程指南(精华).pdf 需要的留邮箱我发给你们~~完整版的

这个发帖有点麻烦啊……内容如题,这个MSP430C语言编程指南还是比较入门级的,大神们就不用看了 哈哈~…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved