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相关推荐

  1. 计量经济学-多元回归-2022.11

    计量经济学-多元回归-2022.11 注意: 一.请在此文档的基础上在每一问之后输入答案,编辑为word文档的一个整体报告,上传到智慧树. 二.散点图(截屏或下载)嵌入到报告里. 三.回答每一个问题都 ...

  2. 网上IC笔试面试题目与秋招进度(2022.11.5更新)

    2022.11.5更新:(IC笔试题目有JL科技.TR半导体.HZW.MX半导体.RSKX)欢迎大家一起讨论题目,也请多多指教弟弟.笔试已经转移到新开帖子了. 目前投递60+,人才库8,offer6拒 ...

  3. Daily scrum[2013.11.28]

    2013.11.28 Qiang Li开始迁移代码,负责view和control层,但是win8机制和wp7机制还是有很大不同,遇到不少的问题. Yu Wu完成Data和Model层的代码迁移工作,这 ...

  4. 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 ...

  5. 训练日志 2018.11.28

    并查集.2-SAT.二分图相关内容都看完了,但只做了些并查集.二分图判定.二分图最大匹配的题,其他内容仍需多做些题来验证一下,只剩差分约束和网络流内容没看,考试周快来了,这周先尽量看吧.. 天冷了,这 ...

  6. 《中国人工智能学会通讯》——11.28 统一先验建模框架 II:整数规划

    11.28 统一先验建模框架 II:整数规划 在上一章中,利用约束谱聚类框架来求解视觉物体分割问题,其能很好地处理可以建模为一阶.二阶或高阶局部数据约束的先验信息.但有些先验知识,例如全局数据约束和模 ...

  7. scrum 11.28

    今天任务: 明天任务: 转载于:https://www.cnblogs.com/coding-hundredOfYears/archive/2012/11/28/2793860.html

  8. 2019.11.28

    2019.11.28 % 滑动平均(均值滤波) sliding_window = 5; impulse_fft_tmp = impulse_fft_6k; for i = 1+sliding_wind ...

  9. English Learning - Day22 作业打卡 2022.12.28 周三

    English Learning - Day22 作业打卡 2022.12.28 周三 引言 1. 否认这一点就是闭眼不看事实. 2. 他承认拿了手表. 3. 考驾照前我还得再练练. 4. 没有你陪伴 ...

  10. 【02】2022.11最新超详细Vuforia图片识别教程

    [02]2022.11最新超详细Vuforia图片识别教程 文章目录 [02]2022.11最新超详细Vuforia图片识别教程 1.Vuforia环境搭建 2.License Key获取及注册 3. ...

最新文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_auth_request_module实录
  2. 以远程桌面访问Windows Azure虚拟机(转+译)
  3. php回调函数原理和实例
  4. 机器学习一 -- 什么是监督学习和无监督学习?
  5. c mysql insert语句_MySQL_mysql insert详细讲解,INSERT语法 INSERT [LOW_PRIORITY |DELA - phpStudy...
  6. 剑指offer---用两个栈实现队列
  7. LINQ 的标准查询操作符
  8. 【原创】搭建spark环境二
  9. jdk动态代理为什么只能为接口生成代理类?
  10. ECMAScript——(二)
  11. 如何让你的Python程序支持多语言
  12. mongodb数据库
  13. 网站seo优化方式途径
  14. torch.sort
  15. 【2018年11月12日】其他化学制品行业的股票估值和排名
  16. 计算机二级《MS Office》考试真题及答案
  17. 【渝粤教育】广东开放大学 行政组织学 形成性考核 (34)
  18. ITK (1)窗宽窗位的意义与设置
  19. 英雄联盟手游登录注册地与服务器不匹配,英雄联盟手游提示Unable to login地区不支持怎么解决 地区不支持解决方法_手心游戏...
  20. python中有指针吗_Python中的指针——到底指什么(一)

热门文章

  1. 某计算机商店店主考虑未来五年的,《市场调查与预测》练习题
  2. xing生成二维码与解析二维码
  3. 使用GNURadio和RTL-SDR搭建FM广播接收机
  4. H264编码- 码率控制 RQ 模型参数推导过程以及JM代码分析
  5. 角色扮演游戏引擎的设计原理--转自MOVE2008
  6. php正则表达式检查匹配数字英文中文及手机号
  7. iphone试用手记
  8. 谷歌学术导出参考文献(BibTeX)报错 403
  9. Python——email模块
  10. markdown使用方法大全