stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117085167

长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

单片机相关开发

上一篇:《stm32开发笔记(一):库函数V3.5版本环境搭建以及工程模版配置
下一篇:敬请期待…


前言

  stm32系列是最常用的单片机之一,不同的版本对应除了引脚、外设、频率、容量等’不同之外,其开发的方法是一样的。
  本章讲解使用库函数使用GPIO引脚功能。


补充

  本文章为多年前学习方法总结,基本是一通百通(PS:学的是方法而不是技术本身)。


stm32系列帮助文件GPIO手把手详细解说

  编写GPIO功能,建议初学者学习帮助文件中的案例。
  在这里插入图片描述
  这是固件库V3.4中的GPIO源文件,而V3.5中的资源文件使用的不是固件库,V3.4这个文件明显是GPIO操作LED的,所以本人认为应是V3.5的固件库的.chm帮助文档有问题,V3.5的部分代码截图如下:
  在这里插入图片描述

  可以看出,其函数体根本没有使用固件库,而是使用寄存器,然后我们这个源文件部分使用V3.4版本的固件库作为参考,继续往下走:
  在这里插入图片描述

  再点击
  在这里插入图片描述

  看代码,然后我们跟着代码来详细看整个文件,我们不管注释。
  在这里插入图片描述

  00022行是固件库头文件,而00023行是官方评估板的头文件,这个对我们肯定是不用的,是与使用的具体的硬件定义有关的宏定义,继续往下走
  在这里插入图片描述

  00037行是定义GPIO初始化的结构体,要操作任何外设都得先过它初始化
  在这里插入图片描述

  00040行是延迟函数
  在这里插入图片描述
  00049行进入主函数,也是程序开始执行的入口,注意看注释,时钟已经通过启动文件中调用SystemInit()函数配置好(在未配置固件库时,只添加启动代码和main函数,会报错没有定义SystemInit函数,这就很好的解释了此处为什么没有配置时钟,详细了解请查看QQ21497936空间中STM32新手问题解决方法),继续往下看
  在这里插入图片描述

  (注意:这个注释,这个注释的意思是将端口全部初始化成模拟输入模式,这样可以减少耗电以及增加硬件的抗干扰性能)
  00061,00062,00063行是使能外设GPIOA,GPIOB,GPIOC,GPIOD,GPIOE的外设时钟。
  00065行是选中所有引脚(引脚0至引脚15)
  00066行是输入输出模式为模拟输入
  在这里插入图片描述
  00076行至00082行之间,当定义了宏STM3210E_EVAL或者USE_STM32100E_EVAL则将端口GPIOF,GPIOG也初始化,我们可以判断这两个宏是官方配套的评估板上才有的F端口和G端口,其用的引脚至少144引脚及以上的芯片。
  在这里插入图片描述
  这个是配套版初始化的LED1,LED2,LED3,LED4这样我们可以判断,这个函数是初始化指定端口的一个引脚,至于是哪个引脚肯定在评估板头文件有相关的宏定义,那么我们深入先点开STM_EVAL_LEDInit这个函数,查看它的源代码
  在这里插入图片描述
  跟我们之前预想的一样,定义一个结构体,使能外设,指定引脚,推挽输出,50MHz的频率,初始化;至于Led_TypeDef这个结构和GPIO_CLK,GPIO_PORT应都是与评估板有关的宏定义。我们关心的重点在于声明结构体,使能时钟,配置引脚,然后初始化,我们还是把开发板这个宏定义截图出来,便于大家理解,我们查找一次LED1定义,来看看LED1是哪个端口的哪个引脚,是如何完成配置的
  在这里插入图片描述
  LED1宏的实际值为0;
  在这里插入图片描述
  LED1带入LEDn,实际值为0,c语言数组,则GPIO_CLK[LED1]实际上是LED1_GPIO_CLK,
  在这里插入图片描述
  它的宏定义为C端口,我们再看看引脚:
  在这里插入图片描述
  GPIO_PIN[LED1]实际为GPIO_PIN [0],其宏定义为GPIO_Pin_6(注:联系到固件库本自身的宏定义了)

  在这里插入图片描述
  GPIO_PORT[LED1]实际为LED_GPIO_PORT宏,定义如下

  在这里插入图片描述
  那么就是端口C,所以这段代码就是端口C使能,配置引脚6为推挽输出,然后初始化。
  LED1,LED2,LED3,LED4在评估板的头文件相关宏定义如下:
  在这里插入图片描述

  00090-00115是与评估板相关的LED灯操作,开LED1,延迟,开LED2,开LED3,关LED1,延迟,开LED4,关LED2,关LED3延迟,关LED4,这个程序就不断这个循环体

  在这里插入图片描述
  00123-00126是延迟函数的函数体
  这个例子文件就说到此处,详解了一般IO口的设置过程,过程总结如下:

  • (可选步骤):都设置成模拟输入,降低能耗和增加抗EMC/EMI等

  • 步骤二:使能端口的外设时钟

  • 步骤三:结构体变量配置端口的相关信息(端口引脚,端口模式,端口频率)

  • 步骤四:初始化端口

  • 步骤五:可以对端口进行输入输出的操作。


上一篇:《stm32开发笔记(一):库函数V3.5版本环境搭建以及工程模版配置
下一篇:**敬请期待…


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117085167

  • 15
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值