如何快速上手使用STM32库函数

一、背景
    如前文所述,利用标准库函数的好处在于,可以快速开发,不用去对着数据手册,小心翼翼的一位一位的配置那
些繁复的寄存器,因为这些工作意法半导体已经找了一些顶级的工程师帮你做了,杰作既是其库函数。当然,有些代码
考虑到低功耗,或者需要极小的ROM,就不能使用库函数,而这即是通常说的,"高度定制化",牺牲开发时间来获取更
高代码效率,这个需要自己权衡。
    本文以STM32之DMA库函数为例,即如何快速使用STM32库函数做个简述及记录。

二、正文
    首先去官网或者论坛下载STM32的官方库,解压出来,会发现里面是各种".c"".h",文件,不需要所有文件
   一股脑的照单全收,只需要复制一些自己需要的即可,并且一定要在编译器的环境变量内添加一个环境变量
  “USE_STDPERIPH_DRIVER”,这样才能正常编译库函数。
    1、 新建一个可用的工程(废话:-D),然后将库函数的".c"".h"文件加入到自己的工程内,并使其编译通过;
        最基本的工程所需要的库函数文件有:
        "startup_stm32f10x_hd.s" --> 启动文件;
        "system_stm32f10x.c" --> 常用来设置初始化时钟,里面的“SystemInit()”函数在启动文件内调用;
        "misc.c" --> Cotex-M3内核常用的配置文件,譬如其内包含NVIC配置库函数等等;
        "stm32f10x_rcc.c" --> 时钟配置相关文件,里面包含了时钟配置库函数;

        以DMA函数为例,将"stm32f10x_dma.c","stm32f10x_dma.h"文件放入指定文件夹内,然后加入已有
     工程,在主函数内尝试调用最简单的一个库函数,并编译通过,然后主函数删除测试调用的库函数。

    2、 先别急着去看库函数有哪些具体的库函数,更别急着去跟库函数的代码,首先去看STM32的技术手册关于DMA
     的内容,弄清楚DMA是一个什么结构,寄存器大概需要配置哪些,了解寄存器的时候不需要深究每一位,只需要
     明白每个寄存器控制哪些功能即可。

    3、 看完了STM32手册内关于DMA的介绍,就可以去解析库函数代码了。
        一般库函数代码的参数都是一个地址,一个包含配置信息的结构体参数,如DMA初始化库函数:
        /**
          * @brief  Initializes the DMAy Channelx according to the specified
          *         parameters in the DMA_InitStruct.
          * @param  DMAy_Channelx: where y can be 1 or 2 to select the DMA and
          *   x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel.
          * @param  DMA_InitStruct: pointer to a DMA_InitTypeDef structure that
          *         contains the configuration information for the specified DMA Channel.
          * @retval None
          */
        void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
        每个库函数之前都会有说明该库函数的功能是什么,传入的参数值得作用是什么,传入什么参数会被认定为有效
     参数以及返回值等等信息。
        对于传入的参数,有些会比较复杂,往往不是开头的只言片语就能介绍完整,此时你需要深入跟进库函数代码,
     看它拿这个参数具体做了什么。还是以此函数为例,第一个参数结构体如下:
        typedef struct
        {
          __IO uint32_t CCR;
          __IO uint32_t CNDTR;
          __IO uint32_t CPAR;
          __IO uint32_t CMAR;
        } DMA_Channel_TypeDef;
        此时就很明了了,每个DMA通道都会有单独独立的寄存器,第一个参数即包含了这些独立寄存器的地址。
        而那些所有DMA通道共用的寄存器则不在该参数内,也不需要在该参数内。所以其在参数说明中做了如下
        说明:
        /*
         * @param  DMAy_Channelx: where y can be 1 or 2 to select the DMA and
         *   x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel.
         */

        接着分析第二个参数结构体,一般该结构体包含了配置DMA的所有参数信息,具体如下:
        typedef struct
        {
            uint32_t DMA_PeripheralBaseAddr;
            uint32_t DMA_MemoryBaseAddr;    
            uint32_t DMA_DIR;               
            uint32_t DMA_BufferSize;        
            uint32_t DMA_PeripheralInc;     
            uint32_t DMA_MemoryInc;         
            uint32_t DMA_PeripheralDataSize;
            uint32_t DMA_MemoryDataSize;    
            uint32_t DMA_Mode;              
            uint32_t DMA_Priority;          
            uint32_t DMA_M2M;               
        }DMA_InitTypeDef;
        这个一眼望去,真的是俩眼懵逼,还是按着套路来(23333),进入库函数看每个参数做了什么。
        tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
                  DMA_InitStruct->DMA_PeripheralInc |
           DMA_InitStruct->DMA_MemoryInc |
                  DMA_InitStruct->DMA_PeripheralDataSize |
           DMA_InitStruct->DMA_MemoryDataSize |
                  DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M;
        /* Write to DMAy Channelx CCR */
        DMAy_Channelx->CCR = tmpreg;
        看到这里,这里这么多参数,全部设置给了一个叫CCR的寄存器,接着我们查查这个CCR寄存器都设置了什么:
        DMA通道x配置寄存器(DMA_CCRx),定位到这个寄存器,再加上每个参数32位所处的位数则可以确定该结构体
     每个成员代表了什么,其他参数亦如此。
     确定了所有的参数所控制的功能后,这时就可以按照自己的需求去传入正确的参数做相应的配置。
        这里我想插一句,既有些新学STM32的朋友,我也曾算是一个,就觉着使用库函数而不去配置每个寄存器,会觉
     着心里不踏实,不能学到真正的STM32技术,而就刚刚所做的一系列动作来看,其实是误解了,利用库函数,同
     样的你也得去深入的了解STM32的技术手册,所以并不存在不能学到实际技术之说。
     技术一直在更新,老的技术也一直在沉淀稳定,我们只需站在巨人的肩膀上,就可以看的更高更远,何苦还需要
     浪费时间和精力自己去做别人已经做好的事情呢。:-D

    4、 解析完所有的函数后,此时即可以利用库函数去实现自己的功能逻辑啦。

三、参考文献:
  STM32F10x Standard Perpheral Libary (V3.5.0)
    http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32054.html

  STM32F10x Description of STM32F1XX Standard Perpheral Libary Documentation
    http://stm32.kosyak.info/doc/

    至此,记录完毕。

记录时间:2016年11月11日
记录地点:深圳WZ

转载于:https://www.cnblogs.com/BMYC/p/10750906.html

  • 14
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32是一款非常流行的微控制器,广泛应用于各种嵌入式系统和物联网设备中。STM32库函数STM32开发的核心组成部分之一,为开发人员提供了方便、简单的方式来访问芯片的各种功能和特性。由于庞大的STM32库函数,熟练掌握它们的使用非常重要。不过对于初学者而言,需要花费大量时间和精力来学习和理解这些函数的使用方法。 为了帮助STM32开发人员更快、更容易地掌握STM32库函数,一些开发者制作了STM32库函数使用手册分享网盘。这个网盘汇集了STM32最常用的库函数,被整理成一份非常易于理解和学习的文档。它的主要目的是为了方便STM32用户,提供一个参考资料和学习工具。 在这个网盘中,STM32库函数被分门别类,用户可以根据需要选择合适的函数进行学习。每个库函数都有详细的说明和示例代码,帮助用户更好地理解函数的用法和实现方式。此外,这个网盘还包括一些实用的、经典的STM32应用案例,可以帮助开发者快速上手开发,并提高开发效率。 总之,STM32库函数使用手册分享网盘是STM32开发人员必备的参考工具之一。它提供了丰富的资料和示例,帮助初学者理解STM32库函数使用方法,同时也为熟练开发者提供了一个高效、快捷的参考手册。 ### 回答2: STM32是一款非常流行的嵌入式微控制器,STM32芯片集成了众多电子模块,可广泛应用于电子、航空、自动化等领域。但是,学习STM32的过程中可能会遇到很多问题,比如如何使用STL库、如何驱动DHT11等,这时候我们就需要一个好的STM32库函数使用手册。 为了方便大家,有很多工程师和开发者在网上分享了STM32库函数使用手册,其中不乏一些优质资源。我们可以通过搜索引擎或者各种技术社区和论坛来寻找这些手册的下载链接。 一些技术社区和论坛,比如CSDN、51CTO、电子工程师社区等,经常会有STM32库函数使用手册的分享,其中一些手册还配有实例代码,非常贴合实际开发需求。 除了通过搜索引擎和技术社区来寻找STM32库函数使用手册,我们还可以通过网盘资源分享来获取。有些工程师和开发者会将自己整理好的STM32库函数使用手册分享到网盘中,大家可以通过网盘链接进行下载。 总的来说,STM32库函数使用手册是学习和开发STM32的必备资料之一,我们可以通过各种渠道获取这些手册,不断学习,提高自己的技术水平。 ### 回答3: STM32是一款非常重要的芯片,它广泛应用于嵌入式系统开发中。为了更好地使用STM32,很多开发者会选择使用STM32库函数。但是,STM32库函数使用手册非常庞大,对于初学者而言可能比较难以理解和操作。因此,有些网盘会分享STM32库函数使用手册,帮助初学者更好地理解并使用STM32库函数。 在STM32库函数使用手册分享网盘中,我们可以找到各种版本的手册,包括中文和英文版本。这些手册有助于我们快速入门STM32库函数使用。通过这些手册,我们可以更加清晰地了解如何使用STM32库函数的各个功能,并且可以快速找到我们所需要的信息。这对于工程师来说非常重要,因为他们需要根据实际情况定制嵌入式系统,而能够熟练地使用STM32库函数将会使他们的工作更加高效。 值得注意的是,一些STM32库函数使用手册分享网盘并不一定是可靠和安全的。因此,在选择这些网盘之前,我们需要注意一些安全问题,确保下载下来的手册不会带来安全隐患。另外,我们也可以通过官方发布的手册进行学习和操作,以确保使用的是最新和最完整的版本。 总之,STM32库函数使用手册分享网盘可以帮助我们更好地理解和使用STM32,并且提高工作效率。在选择库函数使用手册分享网盘的时候,我们需要注意安全问题,并且可以选择官方发布的手册进行学习和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值