分别用库函数和寄存器点灯

  • 一、用寄存器点灯
  • 二、用库函数点灯

一、用寄存器点灯

硬件分析:首先我们要先去看原理图找到相应的GPIO口


然后再去看用到的寄存器
首先我们先看一下GPIO口是挂载在AHB1上面的,要先使能GPIOB的时钟

下面是RCC AHB1的寄存器

然后看一下配置GPIO口的寄存器







下面我们就借助上面原理图和寄存器来写我们点亮LED的代码,工程的建立如果不会可以看一下前面的博文

先建一个led.h和led.c文件别放进去user文件夹的inc和src
led.h中的代码

#ifndef _LED_H
#define _LED_H#include "stm32f4xx.h"
void Led_Config(void);#endif

led.c中的代码
主要是配置寄存器

#include "led.h"/*
函数功能:LED初始化
形参:void
返回值:void
说明:1、打开GPIOB时钟2、PB8  -----  通用推挽模式   PB9  -----  通用推挽模式*/void Led_Config(void)
{RCC->AHB1ENR |= 1 << 1;          //打开GPIOB的时钟GPIOB->MODER &=~ (3 << 16);GPIOB->MODER |= (1 << 16);GPIOB->OTYPER &=~ (1 << 8);GPIOB->OSPEEDR |= 2 << 16;GPIOB->PUPDR &=~ (3 << 16);GPIOB->ODR |= 1 << 8;//默认灭GPIOB->MODER &=~ (3 << 18);GPIOB->MODER |= (1 << 18);GPIOB->OTYPER &=~ (1 << 9);GPIOB->OSPEEDR |= 2 << 18;GPIOB->PUPDR &=~ (3 << 18);GPIOB->ODR |= 1 << 9;//默认灭
}

main.c中的代码

#include "main.h"
int main()
{Led_Config();//LED初始化while(1){ /**寄存器点亮LED(PB8、PB9)*/GPIOB->ODR &=~ (1 << 8);//LED1亮GPIOB->ODR &=~ (1 << 9);//LED2亮      GPIOB->ODR &=(1 << 8);//LED1灭GPIOB->ODR &=(1 << 9);//LED2灭}
}

main.h中的代码

#ifndef _MAIN_H
#define _MAIN_H#include "stm32f4xx.h"
#include "led.h"#endif

两盏蓝色的就是点亮的灯

二、用库函数点灯

工程跟上面是一样的只是代码变了,换成了调用库函数
led.h中的代码

#ifndef _LED_H
#define _LED_H#include "stm32f4xx.h"
void Led_Config(void);#endif

led.c中的代码

#include "led.h"/*
函数功能:LED初始化
形参:void
返回值:void
说明:1、打开GPIOB时钟2、PB8  -----  通用推挽模式   PB9  -----  通用推挽模式*/void Led_Config(void)
{/**库函数版本*/ GPIO_InitTypeDef GPIO_InitStruct;//声明结构体变量RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//打开GPIOB的时钟//初始化PB8和PB9GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//通用输出GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;//第八号管脚GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度50MhzGPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_SetBits(GPIOB, GPIO_Pin_8);//默认灭GPIO_SetBits(GPIOB, GPIO_Pin_9);//默认灭
}

main.h中的代码

#ifndef _MAIN_H
#define _MAIN_H#include "stm32f4xx.h"
#include "led.h"#endif

main.c中的代码

#include "main.h"
int main()
{Led_Config();//LED初始化while(1){ /**库函数点亮LED(PB8、PB9)*///方式一不使用宏定义GPIO_ResetBits(GPIOB, GPIO_Pin_8);GPIO_ResetBits(GPIOB, GPIO_Pin_9);GPIO_SetBits(GPIOB, GPIO_Pin_8);GPIO_SetBits(GPIOB, GPIO_Pin_9);}
}

两盏蓝色的就是点亮的灯

博文就先写到这里,下一篇我们来写按键的操作,如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!

【10天基于STM32F401RET6智能锁项目实战第2天】(分别用库函数和寄存器点灯)相关推荐

  1. 10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程)

    10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程) 一.环境搭建 二.新建工程 一.环境搭建 1.安装keil5 2.安装支持包 这里按照需求安装支持包,有F4和F1的支持 ...

  2. 【10天基于STM32F401RET6智能锁项目实战第2天】用按键点灯----GPIO的输入和输出

    用按键点灯----GPIO的输入和输出 一.原理讲解 二.代码实现 这只是提供一个思路给你参考如何做这样一个东西,具体不同型号的单片机初始化都是不一样的,但是基本原理都是差不多的,如果你对这个项目有兴 ...

  3. 【10天基于STM32F401RET6智能锁项目实战第4天】外部中断的按键实现语音控制

    外部中断的按键实现语音控制 一.实现语音功能 1.语音模块的资料 2.代码实现 二.外部中断的按键实现语音控制 一.实现语音功能 1.语音模块的资料 首先我们要做的就是了解语音模块是怎么使用的,那么就 ...

  4. 【10天基于STM32F401RET6智能锁项目实战第2天】GPIO与寄存器

    GPIO与寄存器 一.GPIO的作用.数量与命名 二.GPIO口的四大模式 三.寄存器 一.GPIO的作用.数量与命名 二.GPIO口的四大模式 三.寄存器 更多的寄存器的实际操作会在后面的代码中讲解 ...

  5. 10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础)

    10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础) 一.学习目标 二.了解单片机STM32F401RET6 三.C语言基础 一.学习目标 二.了解单片机STM32F401R ...

  6. Python基于AIML智能聊天机器人实战(4)- 机器人自学习能力集成

    一.前言 本文是<Python基于AIML智能聊天机器人实战>第四篇:AIML自学习能力集成: AIML是智能对话机器人具有里程碑意义的开源项目,曾斩获多项国际大奖,是基于检索技术的闲聊式 ...

  7. 基于 Netty 网络编程项目实战课程

    一 基于 Netty 网络编程项目实战课程 1项目介绍 2Netty 介绍与相关基础知识 2.1Netty 介绍 简介 Netty 是由 JBOSS 提供的一个 java 开源框架.Netty 提供异 ...

  8. Python基于AIML智能聊天机器人实战视频教程-张子良-专题视频课程

    Python基于AIML智能聊天机器人实战视频教程-244人已学习 课程介绍         Python基于AIML的智能聊天机器人开发实战课程,包括典型案例.基础理论.功能拓展.源码框架解读四个方 ...

  9. 基于C++的OpenCV项目实战——文档照片转换成扫描文件

    基于C++的OpenCV项目实战--文档照片转换成扫描文件 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移 ...

最新文章

  1. 表示层 业务逻辑层 数据层(UI BLL DAL)
  2. 现代软件工程讲义4 Scrum/Sprint
  3. DayDayUp:追梦赤子心——1024,你好!程序猿们的节日!
  4. jquery获取html文件大小,jQuery获取file表单选择文件的路径、名字、大小、类型_忘却_前端开发者...
  5. php for linux配置文件,linux配置php运行环境
  6. 工作375-input readonly
  7. idea 版本控制忽略文件、文件夹设置
  8. xml学习中的趣事一件----嘿嘿!
  9. 提高.net网站的性能
  10. .net 编译、反编译、查壳、脱壳、反混淆工具
  11. 【探索PowerShell 】【七】变量
  12. oracle数据库左链接,Oracle数据库中的左连接与右连接
  13. Zynga以特别的《CSR Racing 2》系列活动庆祝布加迪110周年
  14. 买域名+配置SSL站点
  15. 新视野大学英语(1)课本单词汇总
  16. 2020-05-25
  17. games101学习笔记_Geometry1(几何)
  18. 2016.2.10-2.24 中关村图书大厦实习--图书管理系统;
  19. 编译原理 机械工业出版社 课后答案 GitHub链接
  20. 京东店铺如何做基础评价?这样做轻松500+评

热门文章

  1. HTML5学习笔记简明版(11):新API
  2. .Net应用程序打包部署总结
  3. [Usaco2016 Dec]Moocast
  4. Sage CRM升级注意事项二
  5. Eclipse导入GitHub上面项目的两处报错处理
  6. sso单点登录系统(解决session共享)
  7. 每日冲刺报告——Day2(Java-Team)
  8. Java基础——Ajax(一)
  9. SaltStack 模块学习之拷贝master服务器上文件和目录到minion服务器
  10. xib加载的两种方式