当前位置: 首页 > news >正文

GPIO接口

作业

作业一:自己实现寄存器配置点亮LED1。

main.c文件

	//1.使能系统时钟
	// 系统时钟初始化  - 不加入会报错 可以尝试一下
	void SystemInit(void)
	{
		//对地址 0xE000ED88 的内容 进行修改:
		//将0X3向左移动20位 或上 0X3 向左移动22位
		*(unsigned int*) 0xE000ED88|=((3UL << 20U)|(3UL << 22U));
	}

	int main()
	{
		//RCC_AHB2寄存器地址 = RCC的基地址+RCC_AHB2的偏移地址得到
		//RCC_AHB2寄存器地址 = 0x5602 0C8C
		//2.使能GPIO总线上的时钟
		*(unsigned int *)0x56020C8C |=1<<2;
		
		//3.配置GPIO相关寄存器
		//GPIO_MODER位27和位26分别为01 输出模式
		*(unsigned int *)0x52020800 &=~(1<<27);
		*(unsigned int *)0x52020800 |=1<<26;
		//GPIO_OTYPER寄存器位13写入0
		*(unsigned int *)0x52020804 &=~(1<<13);
		//GPIO_OSPEEDR位27和位26写入00
		*(unsigned int *)(0x52020800+0x08) &=~(1<<27);
		*(unsigned int *)(0x52020800+0x08) &=~(1<<26);
		//GPIO_ODR寄存器位13写入1 高电平
		*(unsigned int *)(0x52020800+0x14) |=(1<<13);
			return 0;
	}


6、作业二:寄存器配置打开风扇,打开蜂鸣器。

打开风扇main.c文件

// 系统时钟初始化  - 不加入会报错 可以尝试一下
void SystemInit(void)
{
  //对地址 0xE000ED88 的内容 进行修改:
  //将0X3向左移动20位 或上 0X3 向左移动22位
  *(unsigned int*) 0xE000ED88|=((3UL << 20U)|(3UL << 22U));
}

int main()
{
		//RCC_AHB2寄存器地址 = RCC的基地址+RCC_AHB2的偏移地址得到
		//RCC_AHB2寄存器地址 = 0x5602 0C8C
		//2.使能GPIO总线上的时钟
		*(unsigned int *)0x56020C8C |=1<<2;
		
		//3.配置GPIO相关寄存器
		//GPIO_MODER位13和位12分别为01 输出模式
		*(unsigned int *)0x52020800 &=~(1<<13);
		*(unsigned int *)0x52020800 |=1<<12;
		//GPIO_OTYPER寄存器位13写入0
		*(unsigned int *)(0x52020800+0x04) &=~(1<<6);
		//GPIO_OSPEEDR位13和位12写入00
		*(unsigned int *)(0x52020800+0x08) &=~(1<<13);
		*(unsigned int *)(0x52020800+0x08) &=~(1<<12);
		//GPIO_ODR寄存器位6写入1 高电平
		*(unsigned int *)(0x52020800+0x14) |=(1<<6);
	
		return 0;
}

蜂鸣器main.c代码

// 系统时钟初始化  - 不加入会报错 可以尝试一下
void SystemInit(void)
{
  //对地址 0xE000ED88 的内容 进行修改:
  //将0X3向左移动20位 或上 0X3 向左移动22位
  *(unsigned int*) 0xE000ED88|=((3UL << 20U)|(3UL << 22U));
}

int main()
{
		//RCC_AHB2寄存器地址 = RCC的基地址+RCC_AHB2的偏移地址得到
		//RCC_AHB2寄存器地址 = 0x5602 0C8C
		//2.使能GPIO总线上的时钟
		*(unsigned int *)0x56020C8C |=1<<2;
		
		//3.配置GPIO相关寄存器
		//GPIO_MODER位31和位30分别为01 输出模式
		*(unsigned int *)0x52020800 &=~(1<<31);
		*(unsigned int *)0x52020800 |=1<<30;
		//GPIO_OTYPER寄存器位15写入0
		*(unsigned int *)(0x52020800+0x04) &=~(1<<15);
		//GPIO_OSPEEDR位31和位30写入00
		*(unsigned int *)(0x52020800+0x08) &=~(1<<31);
		*(unsigned int *)(0x52020800+0x08) &=~(1<<30);
		//GPIO_ODR寄存器15位写入1 高电平
		*(unsigned int *)(0x52020800+0x14) |=(1<<15);
	
		return 0;
}

思维导图

相关文章:

  • Django ORM自定义排序的实用示例
  • Axure RP 9 安装与汉化指南(附安装包)包含下载、安装、汉化、授权,Axure9 汉化教程、Axure9 汉化步骤
  • MoonSharp 文档三
  • Rust规律归纳随笔
  • 使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图
  • Leetcode8-字符串转换整数(atoi)
  • 【技术白皮书】内功心法 | 第二部分 | Telnet远程登录的工作原理
  • 大模型:定义与主流架构全解析
  • 【TVM教程】为 Mobile GPU 自动调优卷积网络
  • SwiftUI 让视图自适应高度的 6 种方法(四)
  • Kubernetes Pod的生命周期概述
  • LearnOpenGL-笔记-其二
  • DeepSeek-实用集成大礼包
  • 基于某著名企业IPD与质量管理体系融合的研发质量管理方案(64页PPT)
  • 【保姆级教程】使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD
  • 十二天-双指针技术:链表问题的高效解法
  • springboot433-基于SpringBoot的流浪猫爱心救助系统(源码+数据库+纯前后端分离+部署讲解等)
  • Fast DDS Security--多方密钥协商协议
  • 人脸识别之数据集中 PI20 和 CFMT 之间关联的模型预测贝叶斯(Python+论文代码实现)
  • 接口使用实例和Object类及内部类
  • 夜读丨读《汉书》一得
  • 昆明警方重拳打击经济领域违法犯罪:去年抓获905名嫌犯
  • 夜读|尊重生命的棱角
  • 外国游客“在华扫货”热:“带空箱子到中国!”
  • 第二期人工智能能力建设研讨班在京开班,近40国和区域组织代表参加
  • 中国一直忽视欧盟经贸问题关切?外交部:事实证明中欧相互成就,共同发展