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库文件结构及CMSIS介绍
推荐阅读
史海拾趣
HI Microwave深知质量是企业生存和发展的根本。因此,公司从原材料采购到成品出厂的每一个环节都严格把关,确保产品质量符合国际标准和客户要求。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这种以客户为中心的服务理念赢得了客户的信任和忠诚,也为公司的持续发展奠定了坚实的基础。
在电子行业竞争日益激烈的背景下,安普康深知创新是企业发展的核心动力。因此,公司始终将研发投入作为重要战略之一。通过引进先进的生产设备和技术,安普康不断提升产品的品质和性能。同时,公司还积极与国内外知名企业和研究机构合作,共同开展技术研发和创新。这些努力使得安普康在光纤产品、布线产品等领域取得了多项专利,并成功推出了一系列具有市场竞争力的新产品。
背景:随着电子技术的快速发展,客户对频率控制产品的要求越来越高。
发展:Fortiming不断投入研发资源,进行技术创新和产品升级。公司成功开发出了一系列高精度、高稳定性的晶振产品,满足了市场对高品质频率控制产品的需求。同时,Fortiming还积极探索新的应用领域,如通信、汽车电子、物联网等,不断拓展市场边界。
2013年,三位在半导体行业积累了近十年经验的成电校友,怀揣着对电子技术的热爱和对国产芯片事业的执着,在成都创办了成都芯进电子有限公司(CrossChip)。公司初期专注于模拟和混合信号芯片设计,并以磁传感器芯片作为切入点。一年后,他们的首款产品——开关型霍尔传感器成功实现量产销售,为公司的发展奠定了坚实的基础。
Fairchild Imaging一直致力于成像技术的创新。在XXXX年,公司成功研发出一款具有划时代意义的图像传感器,该传感器以其高清晰度、低噪声和宽动态范围等特性,赢得了市场的广泛认可。这一技术的突破不仅为Fairchild Imaging赢得了众多客户的青睐,还为公司后续的发展奠定了坚实的基础。
在XXXX年12月,EMBEST成为了Microsoft银牌合作伙伴。这一荣誉的获得标志着EMBEST在软件开发和服务方面得到了业界的广泛认可。作为Microsoft银牌合作伙伴,EMBEST将能够更好地利用Microsoft的技术和资源,为客户提供更优质的服务和解决方案。
最近在做毕业设计,感觉思路出了点问题,不懂如何去进行无线接收的编程大家给我点意见和相关资料哈谢谢各位神仙[:D]逼人邮箱:flying-heron@163.com… 查看全部问答∨ |
|
为什么现在这个论坛总限制我发帖的分数?????????? 为什么现在这个论坛总限制我发帖的分数?????????? 为什么现在这个论坛总限制我发帖的分数??????????… 查看全部问答∨ |
|
P80《自己动手写操作系统》里面有这句话“两次从高特权级到低特权级,一次从低特权级到高特权级” 只有P78有个由ring0到ring3 ,是从高特权级到低特权级。 另外一次从高特权级到低特权级,一次从低特权级到高特权级,怎么没有看到啊?… 查看全部问答∨ |
在单PowerPC(CK5)上 做了PCI采集系统 DMA传输成功 但在4 powerpc(DY4)主板上 DMA传输不成功 是什么原因 ???DMA 的主从设置问题吗????… 查看全部问答∨ |
我见天看了AD转换,但是不会写程序。不知道怎么做,希望大家给个简单的程序,只要叫AD的变化,在数码管上显示就可以了。谢谢啊。p1^1控制io。 p3^2控制out。p1^0 .控制/cs(低电平有效)。… 查看全部问答∨ |
最近对DSP很感兴趣,所以发些资料,希望大家有好的资料也都共享出来,这样才能有技术的提升!~ 资料为开发板原理图,程序,说明文档!~有兴趣的话我们也可以组织DIY一下!~ [ 本帖最后由 wanghongyang 于 2011-2-13 10:36 编辑 ]… 查看全部问答∨ |
本帖最后由 paulhyde 于 2014-9-15 08:59 编辑 对于竞赛用的模块,是要自己买芯片回来自己做板子,还是直接在淘宝上买商品化的模块,回来只管算法就好了... 请教参加过国赛和有经验的大牛们....或者哪能查到相关规定.... … 查看全部问答∨ |
MSP430C语言编程指南(精华).pdf 需要的留邮箱我发给你们~~完整版的 这个发帖有点麻烦啊……内容如题,这个MSP430C语言编程指南还是比较入门级的,大神们就不用看了 哈哈~… 查看全部问答∨ |