欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    STM32 固件库的使用(13页).doc

    • 资源ID:35425118       资源大小:721KB        全文页数:13页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32 固件库的使用(13页).doc

    -STM32 固件库的使用-第 13 页2012-03-14 10:40 iar for stm32 固件库的学习笔记系统、源程序文件和头文件命名都以“stm32f10x-”作为开头寄存器作为常量处理外设函数的命名以外设的缩写加下划线开头 每个单词的开头字母大写每个函数名只有一个下划线分隔外设缩写和函数名的其他部分ppp_Init :根据PPP_InitTypeDef中指定的参数,初始化外设PPP。PPP_DeInit:复位外设PPP的所有寄存器至缺省值PPP_StructInit :其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能PPP_Cmd:使能或失能外设PPPPPP_ITConfig:为使能或者失能来自外设PPP某中断源PPP_DMAConfig: 失能或者使能外设PPP的DMA接口用以配置外设功能的函数总是以字符串“Config”结尾PPP_GetFlagStatus:检查外设PPP某标志位被设置与否PPP_ClearFlag:清楚外设PPP标志位PPP_GetITStatus:判断来自外设PPP的中断发生与否PPP_ClearITPendingBit:清除外设PPP中断待处理标志位typedef signed long s32; typedef signed short s16; typedef signed char s8; typedef signed long const sc32; /* Read Only */ typedef signed short const sc16; /* Read Only */ typedef signed char const sc8; /* Read Only */ typedef volatile signed long vs32; typedef volatile signed short vs16; typedef volatile signed char vs8; typedef volatile signed long const vsc32; /* Read Only */ typedef volatile signed short const vsc16; /* Read Only */ typedef volatile signed char const vsc8; /* Read Only */ typedef unsigned long u32; typedef unsigned short u16; typedef unsigned char u8; typedef unsigned long const uc32; /* Read Only */ typedef unsigned short const uc16; /* Read Only */ typedef unsigned char const uc8; /* Read Only */ typedef volatile unsigned long vu32; typedef volatile unsigned short vu16; typedef volatile unsigned char vu8; typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile unsigned short const vuc16; /* Read Only */ typedef volatile unsigned char const vuc8; /* Read Only */布尔型变量typedef enum FALSE = 0, TRUE = !FALSE bool; 标志位状态类型 SET & RESETtypedef enum RESET = 0, SET = !RESET FlagStatus; 功能状态类型 ENABLE&DISABLEtypedef enum DISABLE = 0, ENABLE = !DISABLE FunctionalState; 错误状态类型 SUCCESS or ERRORtypedef enum ERROR = 0, SUCCESS = !ERROR ErrorStatus; stm32f10x_map.h文件包含了所有外设控制寄存器的结构,下例为SPI寄存器结构的声明:/*- Serial Peripheral Interface -*/ typedef struct vu16 CR1; u16 RESERVED0; vu16 CR2; u16 RESERVED1; vu16 SR; u16 RESERVED2; vu16 DR; u16 RESERVED3; vu16 CRCPR; u16 RESERVED4; vu16 RXCRCR; u16 RESERVED5; vu16 TXCRCR; u16 RESERVED6; SPI_TypeDef; RESERVEDi(i为一个整数索引值)表示被保留区域stm32f10x_map.h函数包含了所有的外设声明,下例为spi外设的声明:#ifndef EXT #Define EXT extern #endif . #define PERIPH_BASE (u32)0x40000000) #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) . /* SPI2 Base Address definition*/ #define SPI2_BASE (APB1PERIPH_BASE + 0x3800) . /* SPI2 peripheral declaration*/ #ifndef DEBUG . #ifdef _SPI2 #define SPI2 (SPI_TypeDef *) SPI2_BASE) #endif /*_SPI2 */ . #else /* DEBUG */ . #ifdef _SPI2 EXT SPI_TypeDef *SPI2; #endif /*_SPI2 */ . #endif /* DEBUG */ 例如:#define _SPI #define _SPI1 #define _SPI2 每个外设都有若干寄存器专门分配给标志位。我们按照相应的结构定义这些寄存器。标志位的命名,同样遵循上节的外设缩写规范。以PPP_FLAG_开始。对于不同的外设,标志位都被定义在相应的文件stm32f10x_PPP.h中。如果想要进入DEBUG模式的话,必须在文件stm32f10x_conf.h中定义标签DEBUG。这样会在sram的外设结构部分创建一个指针。因此我们可以简化DEBUG过程,并通过转储外设获得所有寄存器的状态。在所有情况下,SPI2都是指向外设SPI2首地址的指针。变量DEBUG可以仿照下例定义:#define DEBUG 1 可以初始化DEBUG模式与文件stm32f10x_lib.c中如下:#ifdef DEBUG void debug(void) . #ifdef _SPI2 SPI2 = (SPI_TypeDef *) SPI2_BASE; #endif /*_SPI2 */ . #endif /* DEBUG*/ 注意:DEBUG模式中,宏assert_param被扩展,同时启动运行检错功能,但是会增大代码尺寸,降低代码的运行效率。因此在最终程序中应该删除它们。2固件库:文件夹Examples对应每一个stm32外设,都包含一个子文件夹。这些子文件夹包含了整套文件,组成典型的例子,来示范如何使用对应外设。这些文件有:readme.txt :每个例子的简单描述和使用说明。stm32f10x_conf.h:该头文件设置了所有使用到的外设,有不同的DEFINE语句组成。stm32f10x_it.c :该头文件包含了所有的终端处理程序,如果未使用中断,则所有的函数体都为空stm32f10x.it.h :该都闻见包含了所有的中断处理程序的原型。main.c 例程代码文件夹Library包含组成固件函数库核心的所有子文件夹和文件:子文件夹inc包含了固件函数库所需的头文件,用户无需修改该文件夹stm32f10x_type.h 所有其他文件使用的通用数据类型和枚举 stm32f10x_map.h 外设存储器映像和寄存器数据结构stm32f10x_lib.h 头文件夹,包含了其他头文件stm32f10x_ppp.h 每个外设对应一个头文件,包含了该外设使用的函数原型,数据结构和枚举子文件夹src包含了固件函数库所需要的源文件,用户无需修改该文件夹:stm32f10x_ppp.c :每个外设对应一个源文件,高喊了该外设使用的函数体stm32f10x_lib.c :初始化所有外设的指针文件夹Project高喊了一个标准的程序项目模板,包括库文件的编译和所有用户可以修改的文件,可用以建立新的工程stm32f10x_conf.h 项目配置头文件,默认为设置了所有的外设stm32f10x_it.c 该源文件包含了所有的中断处理程序stm32f10x_it.h 该头文件包含了所有的中断处理程序的原型main.c 主函数体stm32f10x_ppp.c对应一个stm32f10x_ppp.h stm32f10x_ppp.c包含了所有 PPP需要的固件函数stm32f10x_map.h 存储器映像文件,包含了所有寄存器的声明,可用于Debug 和release 模式stm32f10x_lib.h 包含所有外设头文件的头文件。他是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。stm32f10x_conf.h 是唯一一个需要用户修改的文件。他作为应用和库之间的连接界面指定了一系列的参数 外设的初始化和设置1:在主应用文件中,声明一个结构PPP_InitTypeDef,例如:PPP_InitTypeDef PPP_InitStructure;这里PPP_InitStructure是一个位于内存中的工作变量,用来初始化一个或者多个外设PPP2:为变量PPP_InitStructure的各个结构成员填入允许的值。可以采用以下两种方式:a)按照如下例程设置整个结构体PPP_InitStructure.member1 = val1; PPP_InitStructure.member2 = val2; PPP_InitStructure.memberN = valN; /* where N is the number of the structure members */ 以上步骤可以合并在同一行里,用以优化代码大小:PPP_InitTypeDef PPP_InitStructure = val1, val2,., valN b)仅设置结构体中的部分成员:这种情况下,用户应当首选调用函数PPP_SturcIiit()来初始化变量PPP_InitStructure,然后在修改其中需要修改的成员。这样可以保证其他成员的值(多为缺省值)被正确填入。PPP_StructInit(&PPP_InitStructure);PP_InitStructure.memberX = valX; PPP_InitStructure.memberY = valY; /*where X and Y are the members the user wants to configure*/3:调用函数PPP_Init(.)来初始化外设PPP4:在这一步,外设PPP已被初始化。可以调用函数PPP_Cmd(.)来使能之。PPP_Cmd(PPP, ENABLE);可以通过调用一系列函数来使用外设。每个外设都拥有各自的功能函数。注:1.在设置一个外设钱,必须调用以下一个函数来使能他的时钟; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE); 2. 可以调用函数PPP_Deinit(.) 来吧外设PPP 的所有寄存器复位为缺省值:PPP_DeInit(PPP) 3. 在外设设置完成以后,继续修改他的一些参数,可以参照如下步骤:PPP_InitStucture.memberX = valX; PPP_InitStructure.memberY = valY; /* where X and Y are the only members that user wants to modify*/ PPP_Init(PPP, &PPP_InitStructure); 位段Cortex?-M3 存储器映像包括两个位段区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读改写操作的相同效果。所有STM32f10x外设寄存器都被映射到一个位段区。这个特性在各个函数中对单个比特惊醒置1置0操作时被大量使用。用以减小和优化代码尺寸。以下给出了固件函数库中如何实现位段访问的描述。映射公式给出了别名区中的每个字是如何对应位带区的相应位的,公式如下“bit_word_offset = (byte_offset x 32) + (bit_number !á 4)bit_word_addr = bit_band_base + bit_word_offset bit_word_offset :是目标位在存取器位段区中的位置bit_word_addr :是别名存储器区中字的地址,它映射到某个目标位bit_band_base :是别名区的起始地址byte_offset :是包含目标位的字节在位段里的序号bit_number :是目标位所在位置0-31 应用实例下例展现了如何把寄存器RCC_CR 的PLLON24位,映射到别名区:/* Peripheral base address in the bit-band region */ #define PERIPH_BASE (u32)0x40000000) /* Peripheral address in the alias region */ #define PERIPH_BB_BASE (u32)0x42000000) /* - RCC registers bit address in the alias region - */ #define RCC_OFFSET (RCC_BASE - PERIPH_BASE) /* - CR Register -*/ /* Alias word address of PLLON bit */ #define CR_OFFSET (RCC_OFFSET + 0x00) #define PLLON_BitNumber 0x18 #define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32 (PLLON_BitNumber * 4) 编写一个使能失能PLL的函数,步骤如下:#define CR_PLLON_Set (u32)0x01000000) #define CR_PLLON_Reset (u32)0xFEFFFFFF) . void RCC_PLLCmd(FunctionalState NewState) if (NewState != DISABLE) /* Enable PLL */ RCC->CR |= CR_PLLON_Set; else /* Disable PLL */ RCC->CR &= CR_PLLON_Reset; Using bit-band access this function will be coded as follows: void RCC_PLLCmd(FunctionalState NewState) *(vu32 *) CR_PLLON_BB = (u32)NewState; 运行时间检测固件函数库通过检查库函数的输入来实现运行时间错误侦测。通过使用宏assert_param来实现运行时的检测功能。所有要求输入参数的函数都是用这个宏。他可以检查输入参数是否在允许的范围之内。例如:函数PWR_ClearFlagstm32f10x_pwr.c: void PWR_ClearFlag(u32 PWR_FLAG) /* Check the parameters */ assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG); PWR->CR |= PWR_FLAG << 2; stm32f10x_pwr.h: /* PWR Flag */ #define PWR_FLAG_WU (u32)0x00000001) #define PWR_FLAG_SB (u32)0x00000002) #define PWR_FLAG_PVDO (u32)0x00000004) #define IS_PWR_CLEAR_FLAG(FLAG) (FLAG = PWR_FLAG_WU) | (FLAG = PWR_FLAG_SB) 如果传给宏assert_param的参数为false,则调用函数assert_failed并返回被错误调用的函数所在的文件名和行数。如果传给宏assert_param的参数为true,则无返回值。宏assert_param编写与文件stm32f10x_conf.h中:/* Exported macro -*/ #ifdef DEBUG /* * Macro Name : assert_param * Description : The assert_param macro is used for function's parameters check. * It is used only if the library is compiled in DEBUG mode. * Input : - expr: If expr is false, it calls assert_failed function * which reports the name of the source file and the source * line number of the call that failed. * If expr is true, it returns no value. * Return : None */ #define assert_param(expr) (expr) ? (void)0 : assert_failed(u8 *)_FILE_, _LINE_) /* Exported functions - */ void assert_failed(u8* file, u32 line); #else #define assert_param(expr) (void)0) #endif /* DEBUG */ 函数assert_failed编写与文件main.c或者其他用户C文件:#ifdef DEBUG /* * Function name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert_param error has occurred. * Input : - file: pointer to the source file name * - line: assert_param error line source number * Output : None * Return : None */ void assert_failed(u8* file, u32 line) /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %drn", file, line) */ /* Infinite loop */ while (1) #endif 注:该功能在Debug模式下编译时使用,建议在用户应用代码的开发和调试阶段使用,最终的代码中去掉它们以改进代码尺寸和速度

    注意事项

    本文(STM32 固件库的使用(13页).doc)为本站会员(1595****071)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开