STM32使用库函数点灯实验
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使用库函数点灯实验相关推荐
- STM32使用寄存器点灯实验
寄存器点灯实验 操作过程 使能IO口时钟配置寄存器RCC_APB2ENR 初始化IO口模式,配置寄存器GPIOx_CRH/CRL 操作IO口,输出高低电平,配置寄存器GPIOx_ODR或者BSRR/B ...
- 【STM32+机智云】机智云手机APP点灯实验踩坑记录
[STM32+机智云]机智云手机APP点灯实验踩坑记录 一.实验背景 因为项目开发需要用到云平台,所以开始学习机智云平台,听说机智云比较容易入门,还有手机APP.因此开始了踩坑之旅,一切的一切开始于一 ...
- STM32F103ZET6+新建工程+点灯实验
STM32F103ZET6+新建工程+点灯实验 目前,ST公司已经停止标准外设库的更新,转而推广HAL库和LL库.HAL库是由标准外设库升级而来的,学习标准外设库有助于对HAL库的理解,接下来我就简单 ...
- 第一章 stm32 cubemx基础配置实验以及proteus 8的使用
第一章 stm32 cubemx基础配置实验以及proteus 8的使用 文章目录 第一章 stm32 cubemx基础配置实验以及proteus 8的使用 前言 一.STM32 Cubemx基础配置 ...
- 基于STM32F103ZET6库函数串口实验
基于STM32F103ZET6库函数串口实验 本次实验实现如下功能 串口设置的一般步骤可以总结为如下几个步骤 与串口基本配置直接相关的几个固件库函数 1.串口时钟使能. 2.串口复位. 3.串口参数初 ...
- stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...
- c语言课题设计字符串处理函数报告,C语言输入输出库函数设计实验报告.doc
C语言输入输出库函数设计实验报告 第 PAGE \* MERGEFORMAT I页 共 SECTIONPAGES \* MERGEFORMAT 1页 华中科技大学计算机科学与技术学院 C语言课程设计报 ...
- STM32 CAN 库函数
STM32 CAN 库函数 CAN筛选器 CAN控制 CAN中断管理 回调函数 参数宏定义 Tx邮箱定义 Rx队列定义 中断类型定义 CAN 错误码 CAN 标志 回调函数注册 回调函数ID枚举定义 ...
- stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)
stm32汉字字库显示实验与OLED的使用 1.字库的使用 GBK字库的简介: GBK库的由两部分组成,如下图: 高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0 ...
最新文章
- ApacheBench(ab)使用详解
- TensorFlow与PyTorch之争,哪个框架最适合深度学习
- AngularJs学习笔记(3)--$scope中的$apply和$digest方法
- 向Lucene增加中文分词功能
- LaTeX 使用 bib 管理参考文献时,引用网络资源 URL 导致排版难看的问题
- CloudFoundry应用的自定义端口的命令行设置方式
- 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径
- python——Web服务开发(一)Flask模块
- “软考”遗失试卷全部追回 相关责任人接受审查
- c语言指针向前移动i个位置,C语言指针
- 关于网站版权声明(Copyright)的格式和写法
- 计算机用户删除文件找回,文件删除了怎么找回来_文件删掉了怎么恢复-win7之家...
- android 监控行为,一种针对Android系统App行为的监控方法
- 推荐系统——用户画像
- GPA——平均绩点计算器(5.0分制)
- 电脑版微信怎么双开、多开 超级简单
- 有什么软件可以免费压缩图片?
- 这是一篇让你从早吃到晚的『台南美食攻略』
- sass入门_Sass入门
- 初识 JavaScript(揭开javascript的神秘面纱)