3.跑马灯

1.GPIO的输出模式:

  • 推挽模式输出:因为LED0和LED1阳极都是3.3V,需要将阴极设置为低电平才可以点亮LED;
  • 操作io口时,必须引入源文件和头文件;
  • 关于时钟的文件存放在rcc中;

2.GPIO库函数介绍:

(1).1个初始化函数:

  1. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
  2. 作用:初始化一个或多个io口(同一组)的工作方式和速度,
  3. 该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或下拉的时候有设置BSRR或BRR寄存器;
  4. 主要包括设置指定初始化io口、设置工作模式(8种)、设置io口输出速度;
注意:
  • 外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟;
  • 可以一次初始化一个io组下的多个io,前提是这些io口的设置方式一样;

(2).2个读取输入电平函数:

  1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  2. 作用:读取某个GPIO的输入电平。实际操作GPIOx_IDR寄存器;
  3. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
  4. 作用:读取某组GPIO的输入电平。实际也是操作GPIOx_IDR寄存器;

(3).2个读取输出电平函数:

  1. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  2. 作用:读取某个GPIO的输出电平。实际操作的是GPIOx_ODR寄存器;
  3. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
  4. 作用:读取某组GPIO的输出电平。实际也是操作GPIOx_ODR寄存器;

(4).4个设置输出电平函数:

  1. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  2. 作用:设置某个io口输出为高电平(1)。实际操作BSRR寄存器;
  3. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  4. 作用:设置某个io口输出为低电平(0)。实际操作BRR寄存器;
  5. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
  6. void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
  7. 以上两个函数不常用,也是用来设置io口输出电平;

3.相关引脚原理图:

 4.跑马灯实验步骤:

  1. 使能io口时钟,调用RCC_APB2PeriphClockCmd()函数实现;
  2. 初始化io口模式,调用GPIO_Init()函数实现;
  3. 操作io口,输出高低电平;GPIO_SetBits()和GPIO_ResetBits()函数实现;
 注意:

        在使能io口时钟时,不同的io组,调用的时钟使能函数不一样;

(1)主函数:

#include "led.h"
#include "delay.h"int main(){LED_Init();     //LED初始化delay_init();   //延时初始化while(1){delay_ms(100);GPIO_ResetBits(GPIOB,GPIO_Pin_5);   //LED0亮GPIO_SetBits(GPIOE,GPIO_Pin_5);     //LED1不亮delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_5);   //LED0不亮GPIO_ResetBits(GPIOE,GPIO_Pin_5);   //LED1亮}}

(2)LED头文件:

#ifndef __LED_H
#define __LED_Hvoid LED_Init();#endif

(3)LED初始化功能函数:

#include "led.h"
#include "stm32f10x.h"/*1.功能:LED的初始化2.返回参数:无
*/
void LED_Init(){GPIO_InitTypeDef GPIO_InitStruct;//1.初始化io时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);//2.配置GPIOGPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD;  //推挽输出模式->既可以输出高电平也可以输出低电平GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;    //PB5GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;    //输出速率50MHzGPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_SetBits(GPIOB,GPIO_Pin_5); //LED0灭->LED对应的引脚,高电平灭,低电平亮GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD; //推挽输出模式GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;    //PE5GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStruct);  GPIO_SetBits(GPIOE,GPIO_Pin_5); //LED1灭}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2410.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NodeJS NVM版本管理⑩⑧

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言NVM IntroduceNVM UseDownload And InstallNVM Project Use总结 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹…

使用VSCODE跑orbslam2踩的坑

我用的是ubuntu22.04,opencv是4.7,使用其他的库感觉就算版本不一样,也能跑。 一、运行build.sh能够产生可执行文件遇到的问题 1.由于opencv版本高带来的问题 这些问题怎么定位出现在哪些文件中,你通过命令行,运行下…

【K8SRockyLinux】基于开源操作系统搭建K8S高可用集群(详细版)

文章目录 一、实验节点规划表👇二、实验版本说明📃三、实验拓扑📊四、实验详细操作步骤🕹️1. 安装Rocky Linux开源企业操作系统2. 所有主机系统初始化3. 所有master节点部署keepalived4. 所有master节点部署haproxy5. 所有节点配…

【SpringMVC 学习笔记】

SpringMVC 笔记记录 1. SpringMVC 简介2. 入门案例3. 基本配置3.1 xml形式配置3.2 注解形式配置 4. 请求4.1 请求参数4.1.1 普通类型传参4.1.2 实体类类型传参4.1.3 数组和集合类型传参 4.2 类型转换器4.3 请求映射 5. 响应 1. SpringMVC 简介 三层架构 2. 入门案例 3. 基本…

Java死锁

代码: package Test0629;public class BankTest {static Bank b1 null;static Bank b2 null;public static void main(String[] args) {Thread t1 new Thread(){public void run(){b1 Bank.getInstance();}};Thread t2 new Thread(){public void run(){b2 Ba…

fast admin报错:Unexpected token ‘<‘, “ (已解决)

报错信息: 在新加视图的时候的,点击编辑/添加忽然报这个错误,网上找了半天,js、视图、修修改改最后竟是一个小问题; 解决方法: 改为: 简单的说就是:btn-ajax ->btn-dialog

【MySQL】MySQL数据库,RDBMS 术语,使用说明和报错解决的详细讲解

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

【强化学习】常用算法之一 “SAC”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

【网络安全带你练爬虫-100练】第1练:发送请求获取返回内容

目录 一、前置知识1 二、前置知识2 requests库的7个主要方法 语法: 注解: 三、扩展工具 四、网络安全小圈子 一、前置知识1 顾名思义网络爬虫第一步,爬取目标 URL的网页的信息 可以使用 urllib.request 和 requests发送请求&#xff0…

浪潮发布G2平台

2017年2月28日下午,浪潮在北京粤财JW万豪酒店以“智变”为主题,发布新一代智能存储平台G2,该平台基于统一架构和In系列智能软件设计,在保障”三高”特性满足企业级关键数据存储、处理需求的同时,更强调数据生命周期的智…

了解浏览器缓存

什么是HTTP缓存,如何工作的? 当我们打开一个页面时,会向服务端发起很多次请求,如下图打开百毒首页,发起了HTML、各种图片、JS、CSS等资源共101次请求。这里面很多资源并不会频繁变化,每次打开页面都重新请…

为什么有了HTTP,还需要WebSocket协议?

目录 WebSocket是什么? WebSocket怎样建立连接? WebSocket的实际用途 WebSocket 与 HTTP 的选择 HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信。 通常,打开某个网…