大奖娱乐官方网站_大奖娱乐老虎机_在线【大奖娱乐平台】

STM32固件库文件编程结构思想的理解

2018-09-13来源: 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  固件库文件  编程结构

编辑:什么鱼 引用地址:/mcu/2018/ic-news091341311.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:菜鸟初识STM32固件库文件夹
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32外设函数分类

发表于 2018-09-13

利用STM32定时器的PWM输出功能,直接获取PWM波形

本实验向大家展示如何输出占空比固定的PWM波形。1.工程的建立:2.主函数代码:3.pwm_output.c代码:4.output.h代码:5.结果:6.结果显示不出来的请看上几节的文章,已解决。
发表于 2018-09-13

STM32的调试方式、更新程序、仿真以及补救措施

1. STM32的调试方式选择STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是开启的。由此我们可以知道:如果要使用JTAG调试功能,那么PB3,PB4,PA13,PA14,PA15都不能使用;而如果我们关闭JTAG功能,但是开启SWD调试功能,那么PB3,PB4,PA15都可以当作普通IO来使用了;ST官方3.5的库有提供关闭调试功能的两个接口:1.1 关闭所有的JTAG和SWD调试功能慎用,一旦执行该命令,程序运行后将不能通过JTAG或SWD方法进行烧写和下载,补救措施见文末。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB
发表于 2018-09-13
热门资源推荐

小广播

最新视频课程

何立民专栏

单片机及嵌入式宝典

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

相关热搜器件

大奖娱乐官方网站世界版权所有 京ICP证060456号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright ? 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
2018白菜网址大全 开户送体验金68 最新送彩金网站大全 注册送68体验金 注册送白菜网