前言

  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. P1014_Cantor表 (JAVA语言)

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/11/1 , 1/21/2 , 1/31/3 , 1/41/4, 1/51/ ...

  2. python-递归函数和内置函数笔记汇总

    1. def syz(*args)    #    *args  参数组 不必填,不限制参数的个数    参数组不常用 2.def sys2(**kwargs): #关键字参数 3.递归函数,  不常 ...

  3. java例题_42 求满足809*??=800*??+9*??+1的??的值

    1 /*42 [程序 42 求数字] 2 题目:809*??=800*??+9*??+1 3 其中??代表的两位数,8*??的结果为两位数,9*??的结果为 3 位数.求??代表的两位数,及 809* ...

  4. JS中EventLoop、宏任务与微任务的个人理解

    为什么要EventLoop? JS 作为浏览器脚本语言,为了避免复杂的同步问题(例如用户操作事件以及操作DOM),这就决定了被设计成单线程语言,而且也将会一直保持是单线程的.而在单线程中若是遇到了耗时 ...

  5. Android Studio 如何运行单个activity

    •写在前面 调试界面运行单个 Activity 可节省编译整个项目的时间提高效率: 本着提高效率的角度,特地上网百度相关知识: •解决方法 首先,在 AndroidManifest.xml 文件中,找 ...

  6. Java中注释的形式

    单行注释 单行注释 // #双斜杠 快捷键:Ctrl + / 多行注释 多行注释 /* */ #单斜杠星号 星号单斜杠 快捷键:Ctrl + shift + / 文档注释 多行注释 /** */ #单 ...

  7. 报错:Method definition shorthands are not supported by current JavaScript version

    当你在html中使用调用js中的方法时,会出现这行报错: method definition shorthands are not supported by current JavaScript ve ...

  8. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之文件配置-08

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之文件配置-08 欢迎加QQ群:1026880196   进行交流学习 文件配置 #controller ...

  9. Linux下屏幕亮度的调节

    1 概述 Linux下的屏幕调节可以通过图形界面或者命令行进行调节,图形界面的话主要就是在设置中进行调节,如果设置中没有相应的选项可以进行手动调节. 2 手动调节 2.1 手动屏幕调节 亮度由ACPI ...

  10. NTP时间同步服务

    NTP时间服务器 作用:ntp主要是用于对计算机的时间同步管理操作. 时间是对服务器来说是很重要的,一般很多网站都需要读取服务器时间来记录相关信息,如果时间不准,则可能造成很大的影响. 部署安装NTP ...