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, 实验现象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林某某..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值