GPIO 输出—使用固件库点亮 LED
编程要点
1. 使能 GPIO 端口时钟;
2. 初始化 GPIO 目标引脚为推挽输出模式;
3. 编写简单测试程序,控制 GPIO 引脚输出高、低电平。
LED的电路图

过程:
1.拷贝一个库函数编程模板,重新命名。
2.user新建led文件夹,目录下新建bsp_led.h bsp_led.c
3.keil打开项目,user添加bsp_led.c,点击魔术棒,c/c++选项卡的include path添加led文件夹。
4. 下面我将给出各个文件的内容:
main.c文件中
#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>
#include "bsp_led.h" //调用自己写的功能函数的头文件即可。 void Delay( uint32_t count){
for( ;count!=0;count--); } int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_GPIO_Config();
while(1){
/* LED长亮 */
//GPIO_SetBits(LED_GPIO_PORT, GPIO_Pin_2);
/* 下面为闪烁点亮LED */
GPIO_SetBits(LED_GPIO_PORT, GPIO_Pin_2);
Delay(0xfffff);
GPIO_ResetBits(LED_GPIO_PORT, GPIO_Pin_2);
Delay(0xfffff);
}
}
bsp_led.c中
/* 在bsp_led.c中只需要引入它自己的头文件即可,因为在它头文件中已经调用了 stm32f10x.h,所以这里可以不重复调用 */
#include "bsp_led.h"
void LED_GPIO_Config(){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_GPIOC_CLOCK, ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=LED_GPIO_PIN;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}
bsp_led.h中
#ifndef BSP_LED_H_
#define BSP_LED_H_#include "stm32f10x.h"
#define LED_GPIO_PIN GPIO_Pin_2
#define LED_GPIO_PORT GPIOC
#define LED_GPIOC_CLOCK RCC_APB2Periph_GPIOCvoid LED_GPIO_Config(void);
#endif
关于LED点亮函数和延迟函数的宏定义写法
延迟函数的宏定义
#define SOFT_DELAY Delay(0x0FFFFF);
/* 在main函数中调用 SOFT_DELAY即可;
点亮LED灯的函数
第一种:
/* 使用标准的固件库控制 IO*/
#define ON 0
#define OFF 1
#define LED(a) if (a) \
GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);\
else \
GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN)
/* 在main中调用即可,例如 LED(ON); */
第二种
/* 直接操作寄存器的方法控制 IO */
#define digitalHi(p,i) {p->BSRR=i;} //输出为高电平
#define digitalLo(p,i) {p->BRR=i;} //输出低电平
#define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态 /* 定义控制 IO 的宏 */
#define LED_TOGGLE digitalToggle(LED_GPIO_PORT,LED_GPIO_PIN)
#define LED_OFF digitalHi(LED_GPIO_PORT,LED_GPIO_PIN)
#define LED_ON digitalLo(LED_GPIO_PORT,LED_GPIO_PIN) /*在main中调用即可,例如 LED_ON;
GPIO 输出—使用固件库点亮 LED的更多相关文章
- 第11章 GPIO输出—使用固件库点亮LED
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- 第12章 GPIO输出—使用固件库点亮LED
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 利用库建立好的工程模板,就可以方便地使用STM32 H ...
- GPIO输出—使用固件库点亮LED
为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植.在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 BoardSupp ...
- 使用固件库点亮led灯
1. 项目 使用STM32F103VE的固件库实现流水灯设计. 2. 代码 由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的. 点亮绿灯: main.c #include " ...
- S3C2440—3.用点亮LED来熟悉裸机开发的详细流程
文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...
- JZ2440裸机点亮LED【学习笔记】
平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一.我们首先来做第一个实验,用汇编语言点亮板子上的LED. 1.1 LED的原理图 从下面的原理图可知LED1是 ...
- stm32F103C8T6通过写寄存器点亮LED灯
因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正 我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通过写GPIO的寄存器 ...
- 单片机基础——使用GPIO输出点亮一个LED灯
1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...
随机推荐
- Java基础系列 - 查找数组的最大值和最小值
package com.test6; public class test5 { public static void main(String[] args) { int[] arr = {1, 2, ...
- mysql数据库单独移动位置
在新版本中.sym方式已不再支持,最新的方式是使用软链接方式(Windows),官方文档:https://dev.mysql.com/doc/refman/5.7/en/windows-symboli ...
- RK3399 4G模块移远EC20移植调试
转载请注明出处:https://www.cnblogs.com/lialong1st/p/11266330.html CPU:RK3399 系统:Android 7.1 1.通过串口打印或者adb获取 ...
- legend3---20、加东西之前要保证没有,删东西之前要保证有,无论前端后端
legend3---20.加东西之前要保证没有,删东西之前要保证有,无论前端后端 一.总结 一句话总结: 加东西之前要保证没有,删东西之前要保证有,无论前端后端 这是很好的编程习惯,可以避免很多错误, ...
- MAC将根目录文件夹的权限赋给用户
https://my.oschina.net/liujiest/blog/762004 1.sudu -i进入root模式(需输入密码) 2.chown -R 用户名 /文件夹名 sudo -i Pa ...
- 不建议在for循环中使用”+”进行字符串拼接
https://mp.weixin.qq.com/s/qG6bdhndAip9s-_XM9oP3A 为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接 互联网后端架构 1周前
- 关于tomcat-users.xml添加用户被重复加载的问题mark
今天用Eclipse启动tomcat带不起来项目,想进tomcat管理页面看我的工程是否已经发布,但是管理页面没有配置tomcat用户,于是进行tomcat-user.xml的用户添加. 本来想当然地 ...
- ubuntu系统开机优化参数
date : 2019-06-20 14:34:48 author: headsen chen 临时设置: ulimit -n 1000000 永久设置: vim /etc/security/li ...
- osgGA::KeySwitchMatrixManipulator 跟随
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osg/Group> #include <os ...
- DELPHI中 screen.Cursor:=crhourglass; adoQuery.close; adoquery.Open; screen.Cursor:=crdefault;啥意思
鼠标忙这段代码大概是用来演示鼠标的用法的.具体解释如下: 使鼠标指针为沙漏状.(以表示程序正忙)screen.Cursor:=crhourglass; 把(打开的)数据库关闭.adoQuery.clo ...