前言

  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等

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

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

  • 步骤四:初始化端口

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

 
 

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

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

  1. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  2. stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)

    很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE.虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末, ...

  3. Django开发笔记二

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...

  4. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  5. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  6. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  7. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  8. STM32 HAL固件库编程的文件构架

    对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起 ...

  9. STM32开发笔记之——CMSIS DAP

    都说开发stm32都是使用kail iar+jatg/swd的方式,然而arm公司已经开发出了CMSIS DAP的开源下载工具,全称是CoreSight Debug Access Port,网络上有大 ...

随机推荐

  1. InlineHook

    前言 IATHOOK局限性较大,当我们想HOOK一个普通函数,并不是API,或者IAT表里并没有这个API函数(有可能他自己LoadLibrary,自己加载的),那我们根本就从导入表中找不到这个函数, ...

  2. MySQL5.7和MySQL8.0通用配置文件

    MySQL5.7 my.cnf配置 [client] port=3306 socket=/log/mysql/mysql.sock [mysql] socket=/log/mysql/mysql.so ...

  3. Java利用线程工厂监控线程池

    目录 ThreadFactory 监控线程池 扩展线程池 扩展线程池示例 优化线程池大小 线程池死锁 线程池异常信息捕获 ThreadFactory 线程池中的线程从哪里来呢?就是ThreadFoct ...

  4. 201871030134-余宝鹏 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming) 2.掌握GitHub协作开发程 ...

  5. 那些你可能不知道的 ZooKeeper 知识

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  6. BUAA_OO_2020_第四单元与课程总结

    BUAA_OO_2020_第四单元与课程总结 第四单元架构 第一次 架构设计 第一次作业要求实现UML类图解析器. 我才用自顶向下依次解析的方法,首先将类图中涉及的所有元素分成三层: 第一层 第二层 ...

  7. MQ 入门实践

    MQ Message Queue,消息队列,FIFO 结构. 例如电商平台,在用户支付订单后执行对应的操作: 优点: 异步 削峰 解耦 缺点 增加系统复杂性 数据一致性 可用性 JMS Java Me ...

  8. JAVA JNI 中解决在C/C++跨线程FindClass失败

    在JAVA与C/C++交互时使用JNI接口: 先是在JAVA调用的C++方法中直接测试FindClass,使用获取到的jclass操作没有任何问题: 但是在调用的C++方法中起线程后,在线程中Find ...

  9. OOP-面向对象(二)

    面向对象三大特征: 封装 继承 多态 -封装:对类中成员属性和方法的保护,控制外界对内部成员的访问,修改,删除等操作 私有的: private 在本类内部可以访问,类的外部不可以访问.(python中 ...

  10. surging 如何使用流媒体服务

    前言 随着直播行业大火,各种直播类产品和产品层出不穷,能够满足各方人员的需求和互动,也使得斗鱼.虎牙.抖音都随着直播业的大火而欣欣向荣, 大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频 ...