【RT1176】使用寄存器点亮LED灯

点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万+阅读 1.6万+收藏

板子没有LED,就用蜂鸣器代替了
原理图如下

在这里插入图片描述
芯片引脚是R13
在这里插入图片描述
查找芯片手册《IMXRT1170IEC》,名称是GPIO_AD_02
在这里插入图片描述

GPIO框图

在这里插入图片描述

IOMUX复用模式

查找芯片手册《IMXRT1170RM》,引脚GPIO_AD_02对应的MUX寄存器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到,寄存器的MUX_MODE域列出了这个引脚的11个可选功能,把该域设置成1010b即十进制数10即可选中ATL10选项,表示GPIO9_IO01,这个就是引脚的GPIO功能。
也就是说对这个引脚的MUX寄存器,我们给它赋值为10即可控制为GPIO9_IO01功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/* 设置MUX寄存器为0x0A,表示把引脚用于普通GPIO */
IOMUXC->SW_MUX_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_GPIO_AD_02] = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0x0A);

PAD属性配置

由于每个引脚还有多种属性,所以控制时还要根据需求配置好各种属性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PAD属性配置寄存器包含输入输出属性、上拉保持器的配置,由于控制蜂鸣器时使用的是输出功能,所以只需要配置输出属性和上拉保持器即可。

0 0 //慢压摆率
1 0 //正常驱动强度
2 0 //关闭上下拉、保持器后,任意值无影响
3 0 //关闭上下拉、保持器后,任意值无影响
4 0 //不使用开漏模式
27-5 0
29-28 10 //使用CM7
31-30 00 //不锁定

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

/* 设置PAD寄存器控制引脚的属性 */
  IOMUXC->SW_PAD_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_GPIO_AD_02] =(unsigned int) 0x20000000;

控制引脚方向

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
GDIR寄存器中的每个数据位控制GPIO端口其中一个引脚的方向,为1时表示输出,为0时表示输入。

在这里插入图片描述

在这里插入图片描述

/* 设置GPIO9_01引脚的方向,使用输出模式 */
GPIO9->GDIR|= (unsigned int)(1<<1);

控制引脚输出电平

设置好引脚方向后,可以通过DR数据寄存器控制引脚的电平。
在这里插入图片描述
在这里插入图片描述

/* 控制引脚为高电平,关闭蜂鸣器 */
GPIO9->DR |= (unsigned int)(1<<1);

/* 控制引脚为低电平,打开蜂鸣器*/
GPIO9->DR &=~  (unsigned int)(1<<1);

开启外设时钟

设置完GPIO的引脚,控制电平输出,以为现在总算可以打开蜂鸣器 了吧,其实还差最后一步。因为RT1176外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/* 开启GPIO9端口的时钟 */
CCM->LPCG[51].DIRECT = 0x00000001;   

水到渠成

开启时钟,配置引脚复用模式,配置引脚属性,控制电平,经过这几步,我们总算可以控制一个 蜂鸣器了。

/**
使用寄存器的方法控制蜂鸣器
*/
#include "MIMXRT1176_cm7.h"

/**
*   主函数
*/
int main(void)
{
	/* 开启GPIO9端口的时钟 */
	CCM->LPCG[51].DIRECT = 0x00000001;  
	
	/* 设置MUX寄存器为0x0A,表示把引脚用于普通GPIO */
	IOMUXC->SW_MUX_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_GPIO_AD_02] = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0x0A);

  /* 设置PAD寄存器控制引脚的属性 */
  IOMUXC->SW_PAD_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_GPIO_AD_02] =(unsigned int) 0x20000000;

  /* 设置GPIO9_01引脚的方向,使用输出模式 */
  GPIO9->GDIR|= (unsigned int)(1<<1);
//	
//	/* 控制引脚为高电平,关闭蜂鸣器 */
//GPIO9->DR |= (unsigned int)(1<<1);

	/* 控制引脚为低电平,打开蜂鸣器*/
	GPIO9->DR &=~  (unsigned int)(1<<1);

   while (1);

}

// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{
}

下载验证

把编译好的程序下载到开发板并复位,然后蜂鸣器就响了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【云轩】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值