0220作业

C语言实现LED1闪烁

led.h

#ifndef __LED_H__
#define __LED_H__

//RCC寄存器封装
#define RCC_MP_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28) //寄存器封装

//GPIO寄存器封装
typedef struct{
    volatile unsigned int MODER; //00
    volatile unsigned int OTYPER; //04
    volatile unsigned int OSPEEDR; //08
    volatile unsigned int PUPDR; //0C
    volatile unsigned int IDR; //10
    volatile unsigned int ODR; //14
}gpio_t;
#define GPIOE (*(gpio_t*)0x50006000) //GPIOE基地址 0x50006000
#define GPIOF (*(gpio_t*)0x50007000) //GPIOF基地址 0x50007000

//LED1灯初始化
void led1_rcc_init();
//LED1灯点亮
void led1_on();
//LED1灯熄灭
void led1_off();


#endif

led.c

#include "led.h"


//LED1灯初始化
void led1_rcc_init()
{
	//设置GPIOE组时钟使能 通过RCC_MP_AHB4ENSETR寄存器设置 0x50000A28[4] = 1
	RCC_MP_AHB4_ENSETR |=(0x1<<4);
	//1.设置PE10引脚为输出模式 通过GPIOE_MODER寄存器设置 0x50006000[21:20] = 01
	GPIOE.MODER&=~(0x3<<20);
	GPIOE.MODER|=(0x1<<20);
	//2.设置PE10引脚为推挽输出类型 通过GPIOE_OTYPER寄存器设置 0x50006004[10] = 0
	GPIOE.OTYPER&=~(0x1<<10);
	//3.设置PE10引脚为低速输出 通过GPIOE_OSPEEDR寄存器设置 0x50006008[21:20] =00
	GPIOE.OSPEEDR&=~(0x3<<20);
	//4.设置PE10引脚为禁止上下拉电阻 通过GPIOE_PUPDR寄存器设置 0x5000600C[21:20]= 00
	GPIOE.PUPDR&=~(0x3<<20);

}

//LED1灯点亮
void led1_on()
{
	//1.设置PE10引脚为输出高电平 通过GPIOE_ODR寄存器设置 0x50006014[10] = 1
	GPIOE.ODR|=(0x1<<10);
}

//LED1灯熄灭
void led1_off()
{
	//1.设置PE10引脚为输出低电平 通过GPIOE_ODR寄存器设置 0x50006014[10] = 0
	GPIOE.ODR&=~(0x1<<10);
}

main.c

#include "led.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}


int main()
{
	 // LED1灯初始化
	 led1_rcc_init();
	while(1)
	{
		//LED1灯点亮
		led1_on();
		delay_ms(500);
		//LED1灯熄灭
		led1_off();
		delay_ms(500);
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++:蓝桥杯中的基础算法1(枚举,双指针)

枚举 基础概念&#xff1a; 枚举&#xff08;Enum&#xff09;是一种用户定义的数据类型&#xff0c;用于定义一个有限集合的命名常量。在C中&#xff0c;枚举类型可以通过关键字enum来定义。 下面是一个简单的枚举类型的定义示例&#xff1a; #include <iostream>enum…

Spring Bean 的生命周期了解么?

Spring Bean 的生命周期基本流程 一个Spring的Bean从出生到销毁的全过程就是他的整个生命周期, 整个生命周期可以大致分为3个大的阶段 : 创建 使用 销毁 还可以分为5个小步骤 : 实例化(Bean的创建) , 初始化赋值, 注册Destruction回调 , Bean的正常使用 以及 Bean的销毁 …

leetcode 105. 从前序与中序遍历序列构造二叉树【构造二叉树】

原题链接&#xff1a;105. 从前序与中序遍历序列构造二叉树 题目描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 输入输出描述&…

ETL快速拉取物流信息

我国作为世界第一的物流大国&#xff0c;但是在目前的物流信息系统还存在着几大的痛点。主要包括以下几个方面&#xff1a; 数据孤岛&#xff1a;有些物流企业各个部门之间的数据标准不一致&#xff0c;难以实现数据共享和协同&#xff0c;容易导致信息孤岛。 操作繁琐&#x…

小程序--loading和toast

一、loading wx.showLoading({})显示loading提示框。wx.hideLoading({})隐藏loading提示框。 title&#xff1a;文字提示内容 mask&#xff1a;是否显示透明蒙层&#xff0c;防止触摸穿透。 更多属性参考showLoading官方文档。 wx.showLoading({title: 加载中...,mask: true }…

HTML学习笔记——08:表单<form>

HTML <form> 元素表示文档中的一个区域&#xff0c;此区域包含交互控件&#xff0c;用于向 Web 服务器提交信息。 例如&#xff1a;登录页面。 作用&#xff1a;搜集不同类型的用户输入&#xff0c;并向服务器传送数据。 注意&#xff1a;表单本身并不可见&#xff01;…

Git基本操作(2)

Git基本操作&#xff08;2&#xff09; 上交文件之后&#xff0c;git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退&#xff08;git reset&#xff09;撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没…

全志 T527 适配 I2S

一、背景概念 在 T5 系列芯片中&#xff0c;内置了一个 AudioHub 模块&#xff0c;使用的 是I2S 接口&#xff0c;都跟 AudioHub 关联在一起&#xff0c;此时外挂的声卡若想正常工作&#xff0c;还需要配置 AudioHub 的路由信息。&#xff08;AudioHub 是全志 T527 特有的模块&…

【Java程序员面试专栏 数据结构】三 高频面试算法题:栈和队列

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,因为栈和队列这两哥们结构特性比较向对应,所以放到一篇Blog中集中练习 题目题干直接给出对应博客链接,这里只给出简单思路、代码实现、复杂度分析 题目关键字…

高考杂志高考杂志社高考编辑部2023年第32期目录

高考论坛 高中数学课堂教学中创设有效情境的策略探究 黄进生; 3-5 核心素养为导向的高中物理教学探究 王丽萍; 6-8 高中化学“教、学、评”一体化教学模式的有效应用 陈燕; 9-11《高考》投稿&#xff1a;cn7kantougao163.com 新高考背景下高中英语阅读理解教学…

xshell安装社区(免费)版本

xshell安装社区(免费)版本 官方网址&#xff0c;点击直接跳转&#xff1a;https://www.xshell.com/zh/free-for-home-school/ 1.打开链接之后&#xff0c;先选择 家庭/学校免费 &#xff0c;然后输入名字和邮箱&#xff0c;勾选需要下载的资源&#xff1a; 2.然后邮箱就会收到…

Dockerfile文件中只指定挂载点会发生什么?

当你在VOLUME指令中只指定容器内的路径&#xff08;挂载点&#xff09;而不指定宿主机的目录时&#xff0c;Docker会为该挂载点自动生成一个匿名卷。这个匿名卷存储在宿主机的某个位置&#xff0c;但这个具体位置是由Docker自动管理的&#xff0c;用户通常不需要关心这个存储位…

JavaScript 设计模式之组合模式

组合模式 在我们日常中肯呢个会将一个表单用这种模式来创建 const Car function () { } Car.prototype.getName function () { throw new Error("需要重写该方法") } Car.prototype.getPrice function () {throw new Error("需要重写该方法") } const…

K8S临时小结

k8s是什么&#xff1f;能解决什么问题&#xff1f; k8s是容器管理平台&#xff0c;一套复杂的开源系统 如何更好的维护pod&#xff0c;k8s第二大要素&#xff08;pod控制器&#xff09; k8s的很多对容器&#xff08;pod&#xff09;管理的高级特性&#xff0c;都是基于控制器…

HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 概述 ObjectLink和Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步&#xff1a; 被Observed装饰的类&#xff0c;可以被观察到属性的变化&#xff1b;子组件中ObjectLink装饰器装饰的状…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO

目录 一、GPIO 概述二、GPIO模块相关API三、实例四、GPIO HDF驱动开发4.1、LED驱动程序(待续...)4.2、LED驱动配置(待续...) 坚持就有收获 轻量系统设备通常需要进行外设控制&#xff0c;例如温湿度数据的采集、灯开关的控制&#xff0c;因此在完成内核开发后&#xff0c;需要进…

Rancher实用篇-使用rancher,部署微服务应用

说到rancher&#xff0c;我们必须先了解一下k8s 一、k8s简介 Kubernetes&#xff08;通常简写为 K8s&#xff09;是一个开源的容器管理系统&#xff0c;由Google于2014年发起&#xff0c;并在2015年贡献给Cloud Native Computing Foundation (CNCF)进行维护。它基于Borg项目的…

app逆向-平头哥框架ratel使用

文章目录 一、前言二、实现逻辑1、安装ratel手机端app2、使⽤电脑端进⾏感染目标app3、开发⼀个平头哥插件 一、前言 平头哥&#xff08;ratel&#xff09;是⼀个Android逆向分析⼯具套件&#xff0c;他提供⼀系列渐进式app逆向分析⼯具。同时平头哥也是⼀个app⼆次开发的沙箱…

从0到1的私域流量体系搭建,私域操盘手的底层认知升级

一、教程描述 本套私域操盘手教程&#xff0c;大小4.31G&#xff0c;共有12个文件。 二、教程目录 01第一课、私域能力必修&#xff1a;私域大神熟记于心的高阶私域体系.mp4 02第二课、私域IP打造&#xff1a;那些忍不住靠近的私域IP如何打造的.mp4 03第三课、朋友圈经济&…

秦岭天台山隧道群荣获交通运输部科技示范工程,恒星科通群载波应急广播与无线调度系统产品应用其中

2023年9月12日&#xff0c;全国交通运输科技示范工程现场推进会在河南省平顶山市召开&#xff0c;会上为全国已通过验收的10项科技示范工程进行了授牌&#xff0c;其中由陕西交控集团负责实施的“秦岭天台山超长隧道群安全绿色科技示范工程”名列其中。 该科技示范工程为陕西省…