查看: 2925|回复: 9

经得起时间考验的资料---解析STM32的库函数

[复制链接]
  • TA的每日心情
    开心
    2013-12-17 13:39
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-8-2 13:37:42 | 显示全部楼层 |阅读模式
    分享到:
    意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。

    但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32的库函数做一个简单的剖析。
    以最常用的GPIO设备的初始化函数为例,如下程序段一:
    GPIO_InitTypeDef GPIO_InitStructure;                                                                                                         1

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                                                                              2

    GPIO_InitStructure.GPIO_Speed =
    GPIO_Speed_50MHz;                                                                        3

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                                        4

    GPIO_Init(GPIOA , &GPIO_InitStructure);
                                                                                                      5

    这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解:

    首先是1,该语句显然定义了一个GPIO_InitTypeDef类型的变量,名为GPIO_InitStructure,则找出GPIO_InitTypeDef的原型位于“stm32f10x_gpio.h”文件,原型如下:
    typedef struct

    {
    u16 GPIO_Pin;
    GPIOSpeed_TypeDef GPIO_Speed;
    GPIOMode_TypeDef GPIO_Mode;
    }

    GPIO_InitTypeDef;

    由此可知GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是u16类型的GPIO_Pin、GPIOSpeed_TypeDef 类型的GPIO_Speed和GPIOMode_TypeDef 类型的GPIO_Mode。继续探查GPIOSpeed_TypeDef和GPIOMode_TypeDef类型,在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义:
            typedef enum
    {
                      GPIO_Speed_10MHz = 1,
                      GPIO_Speed_2MHz,
                      GPIO_Speed_50MHz
    }GPIOSpeed_TypeDef;
    则可知GPIOSpeed_TypeDef枚举类型同一只,其功能是定义一个枚举类型变量,该变量可表示GPIO_Speed_10MHz、GPIO_Speed_2MHz和GPIO_Speed_50MHz三个含义(其中GPIO_Speed_10MHz已经定义为1,读者必须知道GPIO_Speed_2MHz则依次被编译器赋予2,而GPIO_Speed_50MHz为3)。

    更多内容详细可见附件:

    解析STM32的库函数.pdf (310.69 KB, 下载次数: 138)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2013-8-16 12:29
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-8-2 14:11:59 | 显示全部楼层
    {:soso_e100:}比较适合初学者的资料。想直接从51装32的可以好好看看!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-1-12 22:37
  • 签到天数: 259 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-2 20:09:21 | 显示全部楼层
    但是这个库也得花好一阵子时间去学啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-4 20:22
  • 签到天数: 168 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-8-6 16:00:16 | 显示全部楼层
    初学者来谢过!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-9-1 22:24
  • 签到天数: 497 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-7 21:24:18 | 显示全部楼层
    haohao看看..............
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-1-30 02:33:04 | 显示全部楼层
    多谢参考资料,正需要
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-12-10 13:46
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2015-3-25 00:28:22 | 显示全部楼层
    very good, nice job !!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-19 14:34
  • 签到天数: 140 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-4-8 07:07:48 | 显示全部楼层
    可以看看的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-10-14 22:55
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-7-21 10:38:15 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-10-17 20:11:15 | 显示全部楼层
    多谢分享               
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-26 09:59 , Processed in 0.231487 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.