GPIO库函数介绍

重要函数:

1个初始化函数:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);2个读取输入电平函数:uint8_t GPIO_ReadlnputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);uint16_t GPIO_ReadlnputData(GPIO_TypeDef* GPIOx);2个读取输出电平函数:uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);4个设置输出电平函数:void GPIO_SetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);void GPIO_ResetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);void GPIO_WriteBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,BitAction BitVal);void GPIO_Write(GPIO_TypeDef* GPIOx,uint16_t PortVal);

操作过程

操作IO口之前,必须使能对应的时钟位。

1.使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();这个函数在stm32f10x_rcc.c文件中

不同的IO组,调用的时钟使能函数不一样。

2.初始化IO口模式。调用函数GPIO Init();

3.操作IO口,输出高低电平。

GPIO_SetBits();

GPIO_ResetBits();

程序

LED.c

看开发板电路图,看LED接到了哪个引脚上,就初始化哪个端口的时钟,然后配置引脚模式,再用GPIO_Init初始化引脚

#include "LED.h"void LED_Init()
{//定义GPIO的结构体变量GPIO_InitTypeDef GPIO_InitStructure;//因为C8T6板LED接到了PA1,PA1挂到了APB2总线上,所以用APB2的时钟初始化函数//时钟初始化函数在stm32f10x_rcc.c文件中RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//对结构体内的变量赋初值GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                //选择引脚1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //GPIO模式设置为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //GPIO的速度设为50MHz//调用GPIO_Init对结构体变量初始化,初始化的是GPIOA端口组GPIO_Init(GPIOA,&GPIO_InitStructure);//根据电路图,设置GPIOA的Pin1引脚输出低电平,LED灯才亮GPIO_ResetBits(GPIOA,GPIO_Pin_1);//GPIO_SetBits(GPIOA,GPIO_Pin_1);  //设置PA1输出高电平,LED灯熄灭
}

GPIO_ResetBits是清除引脚电平,也就是输出低电平,函数内部其实就是对端口位清除寄存器(GPIOx_BRR)进行赋值

/*** @brief  Clears the selected data port bits.* @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.* @param  GPIO_Pin: specifies the port bits to be written.*   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).* @retval None*/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GPIO_PIN(GPIO_Pin));GPIOx->BRR = GPIO_Pin;
}

注意:

手上的开发板LED的电路图表示LED灯是低电平点亮

问题:

实验时发现如果把PA1引脚输出低电平的函数GPIO_ResetBits注释掉或者删掉,LED灯仍然会被点亮

解决:

因为开发板上的LED是低电平点亮的,而GPIO_ResetBits函数操作的是寄存器BRR,BRR在复位时复位值是 0x0000 0000,所以BR1位为0,置0对对应的ODR1位不产生影响,而ODR1位是端口输出数据寄存器(GPIOx_ODR)的,该寄存器的复位值也是 0x0000 0000,也就是说,只要配置了PA1为输出模式,GPIOx_ODR寄存器是默认每一位都输出低电平的,这样ODR1位就是0,因为配置ODR寄存器的该位为0 LED灯是会亮的;

所以即使没有最后这一句GPIO_ResetBits(GPIOA,GPIO_Pin_1);设置引脚输出低电平,LED灯也是会被默认点亮

如果使用GPIO_SetBits输出高电平,则LED灯会被熄灭

STM32使用库函数点灯实验相关推荐

  1. STM32使用寄存器点灯实验

    寄存器点灯实验 操作过程 使能IO口时钟配置寄存器RCC_APB2ENR 初始化IO口模式,配置寄存器GPIOx_CRH/CRL 操作IO口,输出高低电平,配置寄存器GPIOx_ODR或者BSRR/B ...

  2. 【STM32+机智云】机智云手机APP点灯实验踩坑记录

    [STM32+机智云]机智云手机APP点灯实验踩坑记录 一.实验背景 因为项目开发需要用到云平台,所以开始学习机智云平台,听说机智云比较容易入门,还有手机APP.因此开始了踩坑之旅,一切的一切开始于一 ...

  3. STM32F103ZET6+新建工程+点灯实验

    STM32F103ZET6+新建工程+点灯实验 目前,ST公司已经停止标准外设库的更新,转而推广HAL库和LL库.HAL库是由标准外设库升级而来的,学习标准外设库有助于对HAL库的理解,接下来我就简单 ...

  4. 第一章 stm32 cubemx基础配置实验以及proteus 8的使用

    第一章 stm32 cubemx基础配置实验以及proteus 8的使用 文章目录 第一章 stm32 cubemx基础配置实验以及proteus 8的使用 前言 一.STM32 Cubemx基础配置 ...

  5. 基于STM32F103ZET6库函数串口实验

    基于STM32F103ZET6库函数串口实验 本次实验实现如下功能 串口设置的一般步骤可以总结为如下几个步骤 与串口基本配置直接相关的几个固件库函数 1.串口时钟使能. 2.串口复位. 3.串口参数初 ...

  6. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

  7. c语言课题设计字符串处理函数报告,C语言输入输出库函数设计实验报告.doc

    C语言输入输出库函数设计实验报告 第 PAGE \* MERGEFORMAT I页 共 SECTIONPAGES \* MERGEFORMAT 1页 华中科技大学计算机科学与技术学院 C语言课程设计报 ...

  8. STM32 CAN 库函数

    STM32 CAN 库函数 CAN筛选器 CAN控制 CAN中断管理 回调函数 参数宏定义 Tx邮箱定义 Rx队列定义 中断类型定义 CAN 错误码 CAN 标志 回调函数注册 回调函数ID枚举定义 ...

  9. stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)

    stm32汉字字库显示实验与OLED的使用 1.字库的使用 GBK字库的简介: GBK库的由两部分组成,如下图: 高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0 ...

最新文章

  1. ApacheBench(ab)使用详解
  2. TensorFlow与PyTorch之争,哪个框架最适合深度学习
  3. AngularJs学习笔记(3)--$scope中的$apply和$digest方法
  4. 向Lucene增加中文分词功能
  5. LaTeX 使用 bib 管理参考文献时,引用网络资源 URL 导致排版难看的问题
  6. CloudFoundry应用的自定义端口的命令行设置方式
  7. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径
  8. python——Web服务开发(一)Flask模块
  9. “软考”遗失试卷全部追回 相关责任人接受审查
  10. c语言指针向前移动i个位置,C语言指针
  11. 关于网站版权声明(Copyright)的格式和写法
  12. 计算机用户删除文件找回,文件删除了怎么找回来_文件删掉了怎么恢复-win7之家...
  13. android 监控行为,一种针对Android系统App行为的监控方法
  14. 推荐系统——用户画像
  15. GPA——平均绩点计算器(5.0分制)
  16. 电脑版微信怎么双开、多开 超级简单
  17. 有什么软件可以免费压缩图片?
  18. 这是一篇让你从早吃到晚的『台南美食攻略』
  19. sass入门_Sass入门
  20. 初识 JavaScript(揭开javascript的神秘面纱)

热门文章

  1. Java实现汉字转换拼音功能
  2. 那些英年早逝的 IT 劳模们
  3. java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化
  4. XXXXXXX\android-sdk\\tools\zipalign.exe”无效
  5. [精简]RuoYi开发实战-搭建开发环境
  6. 【超级炫酷的旋转特效——html实现(附源代码)】
  7. 【茗创科技】婴儿脑电机器学习实用指南
  8. 如何进行git ssh文件的配置
  9. 每年都有几个研究生,被“爸爸”逼得跳楼
  10. CentOS7 下MariaDB安装与简单配置(最新)