STM32学习记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32学习记

STM32学习笔记 常用英文单词 remap:重映射 partialremap:部分重映射 pend:挂起 工程模板的建立可以套用标准模板,只把Main函数改一下就可以了,不需要加入头文件路径、声明宏定义变量、设置调试参数等。一般模板中都含有USER、CORE、FWLIB、OBJ、HARDWARE五个文件夹。USER中放置main函数c文件。CORE中放置启动c和s文件。FWLIB放置固件库C文件。OBJ放置编译后的乱七八糟的生成文件。HARDWARE放置自己写的硬件相关函数的c文件。 赋值操作: 与1或操作可以置某位为1,与0与操作可以置某位为0,要保持其他没操作的位不变才可以。如: GPROA_BSRR |=0X01 //不改变前7位的值,将第零位置为1 GPROA_BSRR =~0X01 //也不改变前七位的值,将第零位置为0 TIMx-SR = (uint16_t)~TIM_FLAG; //也是把某位置零的操作 写法上的小技巧: GPIOx-BSRR = (((uint32_t)0x01) pinpos); 这个操作就是将 BSRR寄存器的第pinpos位设置为1,为什么要通过左移而不是直接设置一个固定的值呢?其实,这是为了提高代码的可读性以及可重用性。这行代码可以很直观明了的知道,是将第 pinpos位设置为1。如果你写成 GPIOx-BSRR =0x0030; 这样的代码就不好看也不好重用了。 类似这样的代码很多: GPIOA-ODR|=15; //PA.5 输出高,不改变其他位 这样我们一目了然, 5告诉我们是第5位也就是第 6个端口, 1 告诉我们是设置为 1了。 格式:#define 标识符 字符串 “标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如: #define SYSCLK_FREQ_72MHz 定义标识符SYSCLK_FREQ_72MHz的值 单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当 标识符 已经被定义过(一般是用#define 命令定义),则对程序段 1 进行编译,否则编译程序段2。 其中#else部分也可以没有,即: #ifdef 程序段1 #endif 关于结构体的定义: 标准格式为: struct _GPIO { __IO uint32_t CRL; __IO uint32_t CRH; … }; 使用时用 struct _GPIO GPIOA 来定义其他同样结构的结构体,这里定义了GPIOA结构体,但是觉得使用struct _GPIO XXXX 来定义比较麻烦,所以给结构体重新取了一个名字,格式为: typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; … } GPIO_TypeDef; 原来写结构体名的地方不写名字了,在结构体最后写结构体的名字,这样就可以直接使用简单的格式来定义结构体了,如GPIO_TypeDef _GPIOA,_GPIOB 这里定义了两个结构体_GPIOA,_GPIOB 有一个情况跟上面的在形式上很接近,但实质上不同,如下: struct _GPIO { __IO uint32_t CRL; __IO uint32_t CRH; … }_GPIOA,_GPIOB; 这是在定义结构体后紧接着定义了结构体变量_GPIOA,_GPIOB,并不是给结构体取了一个新的名称,所以与上面的作用是不同的。 结构体指针变量定义也是一样的,跟其他变量没有啥区别。 例如:struct U_TYPE *usart3;//定义结构体指针变量 usart1; 结构体指针成员变量引用方法是通过“-”符号实现,比如要访问usart3结构体指针指向的结构体的成员变量BaudRate,方法是: Usart3-BaudRate; 使用USB模块时,PLL必须使能 设置系统时钟的理解: 只需调用SetSysClock()函数即可,至于设置成了多少是由系统的宏定义来决定的。如下: static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE(); #elif defined SYSCLK_FREQ_24MHz SetSysClockT

文档评论(0)

书是爱的奉献 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档