2022-11-28
gpio.h
#ifndef __GPIO_H__
#define __GPIO_H__
//结构体封装
typedef struct{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDR;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;
}gpio_t;
#define GPIOE ((gpio_t*)0x50006000)
#define RCC_AHB4_ENSETR (*(volatile unsigned int *)0x50000A28)//0.引脚封装
#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//1.使用枚举封装GPIO接口模式
typedef enum{Input,Output,ALT,Analog,
}gpio_moder_t;//2.使用枚举封装GPIO输出类型
typedef enum{Pp,Od,
}gpio_otyper_t;//3.使用枚举封装GPIO输出速率
typedef enum{Low,Med,High,Very_high,
}gpio_ospeedr_t;//4.使用枚举封装GPIO接口是否需要上下拉电阻
typedef enum{NO_pupd,PU,PD,
}gpio_pupdr_t;//5.使用枚举封装GPIO引脚输出状态
typedef enum{GPIO_RESET,GPIO_SET,
}gpio_status_t;//GPIO初始化封装
typedef struct{gpio_moder_t moder; //模式gpio_otyper_t otyper; //输出类型gpio_ospeedr_t ospeedr; //输出速率 gpio_pupdr_t pupdr; //是否需要上下拉
}gpio_init_t;//函数功能:GPIO接口初始化函数
//参数1:哪组GPIO
//参数2:gpio初始化的值
//参数3:gpio对应的引脚编号
void hal_gpio_init(gpio_t* gpiox, gpio_init_t* init,unsigned int pin);//GPIO写操作函数
//参数1:哪一组gpio
//参数2:gpio对应的引脚编号
//参数3:gpio引脚状态
void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status);
#endif
#include "../include/gpio.h"void hal_gpio_init(gpio_t* gpiox, gpio_init_t* init,unsigned int pin)
{gpiox->MODER &= (~(0x03 << pin*2));gpiox->MODER |= (init->moder << pin*2); gpiox->OTYPER &= (~(0x01 << pin));gpiox->OTYPER |= (init->otyper << pin);gpiox->OSPEEDR &= (~(0x3 << pin*2));gpiox->OSPEEDR |= (init->otyper << pin*2);gpiox->PUPDR &= (~(0x03 << pin*2));gpiox->PUPDR |= (0x03 << pin*2);
}
void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status)
{gpiox->ODR &= (~(0x01 << pin));gpiox->ODR |= (status << pin);
}
main.c
#include "./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++);
}int main()
{RCC_AHB4_ENSETR |= (0x03 << 4);gpio_init_t temp;temp.moder = Output;temp.otyper = Pp;temp.ospeedr = Low;temp.pupdr = NO_pupd; hal_gpio_init(GPIOE,&temp,GPIO_PIN_10);hal_gpio_init(GPIOF,&temp,GPIO_PIN_10);hal_gpio_init(GPIOE,&temp,GPIO_PIN_8);while(1){hal_gpio_write(GPIOE,GPIO_PIN_10,GPIO_SET);hal_gpio_write(GPIOE,GPIO_PIN_8,GPIO_SET);hal_gpio_write(GPIOF,GPIO_PIN_10,GPIO_SET);delay_ms(1000);hal_gpio_write(GPIOE,GPIO_PIN_10,GPIO_RESET);hal_gpio_write(GPIOF,GPIO_PIN_10,GPIO_RESET);hal_gpio_write(GPIOE,GPIO_PIN_8,GPIO_RESET);delay_ms(1000);}return 0;
}
2022-11-28相关推荐
- 计量经济学-多元回归-2022.11
计量经济学-多元回归-2022.11 注意: 一.请在此文档的基础上在每一问之后输入答案,编辑为word文档的一个整体报告,上传到智慧树. 二.散点图(截屏或下载)嵌入到报告里. 三.回答每一个问题都 ...
- 网上IC笔试面试题目与秋招进度(2022.11.5更新)
2022.11.5更新:(IC笔试题目有JL科技.TR半导体.HZW.MX半导体.RSKX)欢迎大家一起讨论题目,也请多多指教弟弟.笔试已经转移到新开帖子了. 目前投递60+,人才库8,offer6拒 ...
- Daily scrum[2013.11.28]
2013.11.28 Qiang Li开始迁移代码,负责view和control层,但是win8机制和wp7机制还是有很大不同,遇到不少的问题. Yu Wu完成Data和Model层的代码迁移工作,这 ...
- 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置
- 11.28 限定某个目录禁止解析php - 11.29 限制user_agent - 11.30/11.31 php相关配置 - 扩展 - apache开启压缩 http://ask.apelea ...
- 训练日志 2018.11.28
并查集.2-SAT.二分图相关内容都看完了,但只做了些并查集.二分图判定.二分图最大匹配的题,其他内容仍需多做些题来验证一下,只剩差分约束和网络流内容没看,考试周快来了,这周先尽量看吧.. 天冷了,这 ...
- 《中国人工智能学会通讯》——11.28 统一先验建模框架 II:整数规划
11.28 统一先验建模框架 II:整数规划 在上一章中,利用约束谱聚类框架来求解视觉物体分割问题,其能很好地处理可以建模为一阶.二阶或高阶局部数据约束的先验信息.但有些先验知识,例如全局数据约束和模 ...
- scrum 11.28
今天任务: 明天任务: 转载于:https://www.cnblogs.com/coding-hundredOfYears/archive/2012/11/28/2793860.html
- 2019.11.28
2019.11.28 % 滑动平均(均值滤波) sliding_window = 5; impulse_fft_tmp = impulse_fft_6k; for i = 1+sliding_wind ...
- English Learning - Day22 作业打卡 2022.12.28 周三
English Learning - Day22 作业打卡 2022.12.28 周三 引言 1. 否认这一点就是闭眼不看事实. 2. 他承认拿了手表. 3. 考驾照前我还得再练练. 4. 没有你陪伴 ...
- 【02】2022.11最新超详细Vuforia图片识别教程
[02]2022.11最新超详细Vuforia图片识别教程 文章目录 [02]2022.11最新超详细Vuforia图片识别教程 1.Vuforia环境搭建 2.License Key获取及注册 3. ...
最新文章
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_auth_request_module实录
- 以远程桌面访问Windows Azure虚拟机(转+译)
- php回调函数原理和实例
- 机器学习一 -- 什么是监督学习和无监督学习?
- c mysql insert语句_MySQL_mysql insert详细讲解,INSERT语法
INSERT [LOW_PRIORITY |DELA - phpStudy...
- 剑指offer---用两个栈实现队列
- LINQ 的标准查询操作符
- 【原创】搭建spark环境二
- jdk动态代理为什么只能为接口生成代理类?
- ECMAScript——(二)
- 如何让你的Python程序支持多语言
- mongodb数据库
- 网站seo优化方式途径
- torch.sort
- 【2018年11月12日】其他化学制品行业的股票估值和排名
- 计算机二级《MS Office》考试真题及答案
- 【渝粤教育】广东开放大学 行政组织学 形成性考核 (34)
- ITK (1)窗宽窗位的意义与设置
- 英雄联盟手游登录注册地与服务器不匹配,英雄联盟手游提示Unable to login地区不支持怎么解决 地区不支持解决方法_手心游戏...
- python中有指针吗_Python中的指针——到底指什么(一)