- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 幼儿园课件:小班儿歌:笑嘻嘻.pptx
- 内蒙古版综合实践活动五年级下册第四单元 第1课《我的植物栽培之旅》课件.ppt VIP
- 药学基本知识.pdf VIP
- 2025年春新课程能力培养七年级数学下册北师大版答案.pdf VIP
- 第一课 我的姓名牌 课件 2024湘美版一年级美术上册.pptx
- GB_T19001-2016:质量管理体系要求.pdf VIP
- Unit+1+Laugh+out+Loud!+单词课件 高中英语外研版(2019)选择性必修第一册.pptx VIP
- 砂石料加工合作协议 范本最新版2篇.docx VIP
- 12J502-2:内装修-室内吊顶国标 行业图集.pdf VIP
- 【语文课件】浪浪山小妖怪开学第一课.pptx VIP
文档评论(0)