ARM--day5(C语言点灯实验、总线、串口通信信息、串口通讯协议)

news2024/12/23 14:43:08

 

 函数分装实现点灯

gpio.c:

#include "gpio.h"
//函数功能:GPIO引脚初始化操作
//参数1:GPIO组号
//参数2:引脚编号
//参数3:初始化内容
void hal_gpio_init(volatile gpio_t*gpiox,unsigned int pin,gpio_init_t* init)
{
	//1.设置GPIO引脚模式
	gpiox->MODER &= (~(0x3<<(pin*2)));
	gpiox->MODER |= (init->moder<<(pin*2));
	//2.设置GPIO引脚输出类型
	gpiox->OTYPER &= (~(0x1<<(pin)));
	gpiox->OTYPER |= (init->otyper<<(pin));

	//3.设置GPIO引脚输出速率
	gpiox->OSPEEDR &= (~(0x3<<(pin*2)));
	gpiox->OSPEEDR |= (init->ospeedr<<(pin*2));

	//4.设置GPIO引脚输是否需要上下拉电阻	
	gpiox->PUPDR &= (~(0x3<<(pin*2)));
	gpiox->PUPDR |= (init->pupdr<<(pin*2));

}


//函数功能:GPIO引脚操作,写1点亮,写0熄灭
//参数1:GPIO组号
//参数2:引脚编号
//参数3:初始化内容
void hai_gpio_write(volatile gpio_t* gpiox,unsigned int pin,gpio_status_t status)
{
	if(status == GPIO_RESET_T)
	{
		gpiox->ODR &= (~(0x1<<pin));
	}
	else
	{
		gpiox->ODR |= (0x1<<pin);
	}
}

gpio.h:

#ifndef __LED_H__
#define __LED_H__
//防止头文件重复包含

//RCC_MP_AHB4ENSETR寄存器封装
#define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000A28)
//GPIO使用结构体封装
typedef struct
{
	 unsigned int MODER;
	 unsigned int OTYPER;
	 unsigned int OSPEEDR;
	 unsigned int PUPDR;
	 unsigned int IDR;
	 unsigned int ODR;
}gpio_t;

#define GPIOE ((gpio_t*)0x50006000)
#define GPIOF ((gpio_t*)0x50007000)

//引脚编号进行封装
#define GPIO_PIN_0 0
#define GPIO_PIN_1 1
#define GPIO_PIN_2 2
#define GPIO_PIN_3 3
#define GPIO_PIN_4 4
#define GPIO_PIN_5 5
#define GPIO_PIN_6 6
#define GPIO_PIN_7 7
#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10
#define GPIO_PIN_11 11
#define GPIO_PIN_12 12
#define GPIO_PIN_13 13
#define GPIO_PIN_14 14
#define GPIO_PIN_15 15

//使用枚举封装MODER模式寄存器(INPUT/OUTPUT/ALT/ANALOG)
typedef enum
{
	INPUT,  //输入0
	OUTPUT, //输入1
	ALT,    //复用2
	ANALOG //模拟3
}gpio_moder_t;
//使用枚举封装OTYPEDR模式寄存器
typedef enum
{
	PP,   //推挽0
	OD   //开漏1
}gpio_otypedr_t;
//使用枚举封装OSPEEDR模式寄存器
typedef enum
{
	LOW,   //低速0
	MED,   //中速1
	HIGH,  //高速2
	VERY_HIGH  //快速3
}gpio_ospeedr_t;
//使用枚举封装PUPDR模式寄存器
typedef enum
{
	NO_PUPDR,  //禁止上下拉电阻0
	PU,        //上拉1
	PD         //下拉2
}gpio_pupdr_t;
//封装初始化结构体
typedef struct
{
	gpio_moder_t moder;//模式寄存器
	gpio_otypedr_t otyper;//输出类型寄存器
	gpio_ospeedr_t ospeedr;//输出速率寄存器
	gpio_pupdr_t pupdr;//是否需要上下拉电阻寄存器
}gpio_init_t;

//使用枚举封装ODR寄存器
typedef enum
{
	GPIO_RESET_T,//熄灭0
	GPIO_SET_T  //点亮1
}gpio_status_t;

//函数功能:GPIO引脚初始化操作
//参数1:GPIO组号
//参数2:引脚编号
//参数3:初始化内容
void hal_gpio_init(volatile gpio_t* gpiox,unsigned int pin,gpio_init_t* init);


//函数功能:GPIO引脚操作,写1点亮,写0熄灭
//参数1:GPIO组号
//参数2:引脚编号
//参数3:初始化内容
void hai_gpio_write(volatile gpio_t* gpiox,unsigned int pin,gpio_status_t status);

main.c:

#include "gpio.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++);
}

void led_init()
{
	//使能GPIOE/GPIOF组
	RCC_MP_AHB4ENSETR |= (0x3<<4);
	//初始化结构体
	gpio_init_t init={OUTPUT,PP,LOW,NO_PUPDR};
	//调用LED灯初始化函数
	hal_gpio_init(GPIOE,GPIO_PIN_10,&init);
	hal_gpio_init(GPIOF,GPIO_PIN_10,&init);
	hal_gpio_init(GPIOE,GPIO_PIN_8,&init);
}

int main()
{
	led_init(); // LED1灯初始化
	while(1)
	{
		hai_gpio_write(GPIOE,GPIO_PIN_10,GPIO_SET_T);
		delay_ms(500);
		hai_gpio_write(GPIOE,GPIO_PIN_10,GPIO_RESET_T);
		delay_ms(500);

		hai_gpio_write(GPIOF,GPIO_PIN_10,GPIO_SET_T);
		delay_ms(500);
		hai_gpio_write(GPIOF,GPIO_PIN_10,GPIO_RESET_T);
		delay_ms(500);

		hai_gpio_write(GPIOE,GPIO_PIN_8,GPIO_SET_T);
		delay_ms(500);
		hai_gpio_write(GPIOE,GPIO_PIN_8,GPIO_RESET_T);
		delay_ms(500);

	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器控制台调试代码和JavaScript控制台方法介绍

浏览器控制台调试代码和JavaScript控制台方法介绍 浏览器控制台调试代码 浏览器控制台&#xff08;Console&#xff09;是浏览器提供的一个开发工具&#xff0c;用于在浏览器中执行和调试 JavaScript 代码。它提供了一个交互式环境&#xff0c;可以输入 JavaScript 代码&#…

计算机竞赛 wifi指纹室内定位系统

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity&#xff0c;在中文里又称作“行动热点”&#xff0c;是Wi-Fi联盟制造商的商标做为产品的品牌认证&#xff0c;是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

UGUI组件Rect Transform

一. Rect Transform概述 画布上UI对象都附加一个Rect Transform组件&#xff0c;和一般对象附加的Transform对象相比&#xff0c;Rect Transform多了Width,Height,Anchor,Pivot属性。 二.位置属性 UI对象的坐标是其轴心到锚点之间的像素值&#xff0c;如下图所示。 三.Pivot(…

同时负责多个项目,团队成员还参与多个项目开发,如何有效管理?分享9个策略

如果你正在管理一个团队或项目&#xff0c;可能会需要同时在进行多个项目的管理。在这种情况下&#xff0c;追踪所有进行中的项目部分可能会迅速变得非常复杂。没有合适的管理过程&#xff0c;就难以确定哪些工作应该优先处理&#xff0c;也不容易确保团队有效管理工作量&#…

WPF显示初始界面--SplashScreen

WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快&#xff0c;但并不能在瞬间启动。当第一次启动应用程序时&#xff0c;会有一些延迟&#xff0c;因为公共语言运行时&#xff08;CLR&#xff09;首先需要初始化.NET环境&#xff0c;然后启动应用程序。 对于WPF中…

Spring基础梳理(一):一定要先全局掌握Spring

越活越完蛋了&#xff0c;看着看着现在又想梳理梳理Spring基础&#xff0c;搞点原始真解吧&#xff0c;不过技术人每个阶段看相同东西的理解都是不同的&#xff0c;只是现在浮躁的技术中又有多少人能够一本书啃两遍以上呢&#xff0c;我也一样&#xff0c;徜徉于业务之中&#…

【国护攻防场景下的沙箱技术对比】

目录 前言 沙箱技术分析 总结 前言 真高兴呀&#xff0c;又是受到红队大佬青睐的一天&#xff0c;今天下午很荣幸的收到了来自红队大佬的恶意投喂&#xff0c;把我们各位在座100年工作经验的蓝队师傅们吓得赶忙拔掉自己的电脑电源&#xff0c;断掉自己的网线&#xff0c;…

基于Helm管理Kubernetes应用

目录 基于kubeadm部署K8S集群 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装…

Linux驱动开发(Day4)

字符设备驱动分步注册&#xff1a;

OpenCV实战(OCR识别和高级基础)

目录 图像特征harris角点检测基本原理实现 Scale Invariant Feature Transform&#xff08;SIFT&#xff09;图像尺度空间多分辨率金字塔高斯差分金字塔&#xff08;DOG&#xff09;DoG空间极值检测关键点的精确定位消除边界响应特征点的主方向生成特征描述 特征匹配Brute-Forc…

Linux命令200例:crontab详解及应用场景(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

视频智能分析/视频云存储/集中存储EasyCVR平台AI分析告警列表定制

安防监控视频集中存储/云存储EasyCVR视频汇聚平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;视频监控综合管理平台具有强大的数据接入、处理及分发能力&#xff0c;能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、…

Effective C++学习笔记(7)

目录 条款41&#xff1a;了解隐式接口和编译多态条款42&#xff1a;了解typename的双重意义条款43&#xff1a;学习处理模板化基类内的名称条款44&#xff1a;将与参数无关的代码抽离templates条款45&#xff1a;运用成员函数模板接受所有兼容类型条款46&#xff1a;需要类型转…

100. 相同的树

100. 相同的树 题目-简单难度示例1. dfs2. bfs 题目-简单难度 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 示例 1&#xff1a; 输入…

Stable Diffusion XL(SDXL)原理详解

技术报告&#xff1a;SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 官方代码&#xff1a;Stability-AI-generative-models 模型权重&#xff1a;HuggingFace-Stability AI 非官方代码&#xff1a;Linaqruf/kohya-trainer diffuser库&#xf…

Redis实战:Redis的安装及简单使用

本片将介绍 Redis 的安装及简单使用 文章目录 1、Redis安装1.1、Windows下Redis的安装1.2、Linux下Redis的安装1.3、Mac下Redis的安装&#xff08;使用Homebrew&#xff09; 2、Redis使用2.1、启动服务端客户端2.2、Redis简单命令 3、Redis命令大全 1、Redis安装 1.1、Windows…

Redis持久化——AOF

介绍 Redis是运行在内存中的数据库&#xff0c;当我们关闭了Redis服务器后&#xff0c;内存中的数据会丢失吗&#xff1f; 答案是不会的&#xff0c;因为Redis有持久化功能&#xff0c;能够将内存中的数据保存到磁盘中的文件&#xff0c;以此来实现数据的永久保存。 在Redis中…

Spring Clould 消息队列 - RabbitMQ

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识MQ-同步通讯的优缺点&#xff08;P61&#xff0c;P62&#xff09; 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&…

步入React正殿 - React组件设计模式

目录 扩展学习资料 高阶组件 /src/components/hoc/withTooltip.js /src/components/hoc/itemA.jsx /src/components/hoc/itemB.jsx /src/App.js 函数作为子组件【Render pprops】 函数作为子组件 /src/components/rp/itemC.jsx【父组件】 /src/components/rp/withToo…

特朗普钱包中持有的以太坊价值高达 500 万美元

根据华盛顿公民责任与道德组织最新发布的经认证的《2023年财务披露信息》&#xff0c;美国前总统唐纳德特朗普持有的以太坊价值高达500万美元。其中&#xff0c;详细条目特别列出了280万美元的收入。此外&#xff0c;特朗普还从NFT INT LLC的NFT授权许可协议中赚取了490万美元。…