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

ARM接口实验-LED灯实验(A7核)

一、实现原理分析

本次实验使用开发板为:SRM32MP157A-FSMP1A,

LED灯丝印为:LD1、LD2、LD3,通过查询电路图可知其对应引脚为:LD1->PE10、LD2->PF10、LD3->PE8

由于控制LED通断的三极管采用的是NPN结构,所以只要给基极高电平,即给PE10、PF10、PE8三个引脚高电平,LED即可亮起

二、芯片手册分析

2.1框图分析:

 软件编程控制硬件思想:内核是通过向特殊功能寄存器中书写和读取值,来控制外设进行工作

GPIO控制器:通用的输入输出控制器

RCC控制器:SOC的心脏,对其他控制器进行使能

实现步骤:

1.使用RCC寄存器对GPIO控制器进行使能

2.配置GPIO寄存器

        2.1.MODEL改为输出模式

        2.2.OTYPER改为推挽输出

        2.3.OSPEEDR输出速率为低速

        2.4.PUPDR.不需要上拉电阻

        2.5.ODR. 输出数据寄存器,通过输出高低电平来控制LED亮灭

三、代码实现

3.1:头文件:

#ifndef __GPIO_H__
#define __GPIO_H__

#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"

#define PIN_8 8
#define PIN_10 10


//引脚对应GPIO初始化
void hal_gpio_init();
//写函数,控制高低电平输出
void hal_gpio_write();



#endif

功能文件:

#include "gpio.h"

//引脚对应GPIO初始化
void hal_gpio_init(gpio_t* GPIO_Temp,unsigned int Pin)
{
	//RCC使能GPIOE/GPIOF
	RCC->MP_AHB4ENSETR |= (0X1 <<4);
	RCC->MP_AHB4ENSETR |= (0X1 <<5);

	//设置GPIO控制器
	//输出模式  01
	GPIO_Temp->MODER &= (~(0x3 << Pin*2));
	GPIO_Temp->MODER |= (0X1 << Pin*2);
	//推挽输出 0
	GPIO_Temp->OTYPER &= (~(0X1 << Pin));
	//低速 00
	GPIO_Temp->OSPEEDR &= (~(0x3 <<Pin*2));
	//禁止上下拉 00
	GPIO_Temp->PUPDR &= (~(0X3 <<Pin*2));

}
//写函数,控制高低电平输出
void hal_gpio_write(gpio_t *GPIO_Temp,unsigned int Pin)
{
	if(GPIO_Temp->ODR &= (0x1 <<Pin))
	{
		GPIO_Temp->ODR &= (~(0X1 << Pin));
	}else
	{
		GPIO_Temp->ODR |= (0X1<<Pin);
	}

}

主函数

#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()

{

	hal_gpio_init(GPIOE,PIN_8); // LED灯初始化

	hal_gpio_init(GPIOE,PIN_10); // LED灯初始化

	hal_gpio_init(GPIOF,PIN_10); // LED灯初始化

	while(1)

	{

		hal_gpio_write(GPIOE,PIN_10);

		delay_ms(500);

		hal_gpio_write(GPIOE,PIN_8);

		delay_ms(500);

		hal_gpio_write(GPIOF,PIN_10);

		delay_ms(500);

	}

	return 0;

}

四:功能测试

1.执行make语句后生成 .bin文件

2.在串口执行程序

        2.1在交互模式下输入 loadb c0008000

        2.2 将.bin文件拖入串口工具窗口内,选取send Kermit

         

        2.3 输入 go c0008000

3, 实验现象

相关文章:

  • 经典卷积和深度卷积的神经网络
  • 【C语言】一篇文章彻底搞懂变量和常量
  • CSS基础12-canvas
  • javascript时钟的开发制作
  • 应用层协议 —— HTTP(二)
  • Qt之QCompleter的简单使用(自动补全、文本框提示、下拉框提示含源码+注释)
  • MyBatis-Plus(二)
  • Linux-常见命令(三)
  • 【国庆活动】Spring Boot 必知必会的核心理念(二)
  • c++:程序流程结构,顺序结构,选择结构if else,三目运算符
  • 使用 Amazon Rekognition API 进行文本检测和 OCR
  • 内核驱动踩坑记录
  • 半导体中的杂质和缺陷能级
  • SSM毕设项目大学生心理咨询系统792l6(java+VUE+Mybatis+Maven+Mysql)
  • 嵌入式学习的第二天
  • Android系统模拟器绘制实现概述
  • Angular4 模板式表单用法以及验证
  • Laravel5.4 Queues队列学习
  • Octave 入门
  • Python打包系统简单入门
  • React-Native - 收藏集 - 掘金
  • STAR法则
  • 从0到1:PostCSS 插件开发最佳实践
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 利用jquery编写加法运算验证码
  • 面试遇到的一些题
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • $(selector).each()和$.each()的区别
  • (11)MATLAB PCA+SVM 人脸识别
  • (42)STM32——LCD显示屏实验笔记
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (九十四)函数和二维数组
  • (顺序)容器的好伴侣 --- 容器适配器
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)socket Aio demo
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Core 中的路径问题
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Bean有哪些属性
  • [20140403]查询是否产生日志
  • [Android Pro] AndroidX重构和映射
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Avalon] Avalon中的Conditional Formatting.
  • [C++]类和对象【下】
  • [Django ]Django 的数据库操作
  • [MFC] MFC消息机制的补充
  • [OGRE]看备注学编程(02):打地鼠01-布置场地九只地鼠
  • [POI2007] ZAP-Queries (莫比乌斯反演)
  • [POI2009]WIE-Hexer