I.MX6U-裸机-stm32版LED实验(3)

本文介绍了一个在IMX6UL开发板上操作外设时钟和LED的C程序,通过引用商家提供的`imx6ul.h`头文件,实现了结构体指针方式的寄存器操作,提高了代码可读性。程序中包含了时钟使能、LED初始化、开关及延时函数,展示了如何利用预定义的寄存器结构体进行硬件控制。
摘要由CSDN通过智能技术生成

本文和(1)只有main.c程序不一样,具体如下:

#include "imx6ul.h"

 // @description	: 使能I.MX6U所有外设时钟


void clk_enable(void)

{

	CCM->CCGR0 = 0XFFFFFFFF;

	CCM->CCGR1 = 0XFFFFFFFF;

	CCM->CCGR2 = 0XFFFFFFFF;

	CCM->CCGR3 = 0XFFFFFFFF;

	CCM->CCGR4 = 0XFFFFFFFF;

	CCM->CCGR5 = 0XFFFFFFFF;

	CCM->CCGR6 = 0XFFFFFFFF;

}


void led_init(void)

{

	/* 1、初始化IO复用 */

	IOMUX_SW_MUX->GPIO1_IO03 = 0X5;		/* 复用为GPIO1_IO03 */


	/* 2、配置GPIO1_IO03的IO属性	

	 *bit 16:0 HYS关闭

	 *bit [15:14]: 00 默认下拉

     *bit [13]: 0 kepper功能

     *bit [12]: 1 pull/keeper使能

     *bit [11]: 0 关闭开路输出

     *bit [7:6]: 10 速度100Mhz

     *bit [5:3]: 110 R0/6驱动能力

     *bit [0]: 0 低转换率

     */

    IOMUX_SW_PAD->GPIO1_IO03 = 0X10B0;



	/* 3、初始化GPIO */

	GPIO1->GDIR = 0X0000008;	/* GPIO1_IO03设置为输出 */



	/* 4、设置GPIO1_IO03输出低电平,打开LED0 */	

	GPIO1->DR &= ~(1 << 3);	

	

}



void led_on(void)

{

	/* 将GPIO1_DR的bit3清零 	*/

	GPIO1->DR &= ~(1<<3); 

}



void led_off(void)

{

	/* 将GPIO1_DR的bit3置1 */

	GPIO1->DR |= (1<<3); 

}

void delay_short(volatile unsigned int n)

{

	while(n--){}

}


 //@param - n	: 要延时的ms数



void delay(volatile unsigned int n)

{

	while(n--)

	{

		delay_short(0x7ff);

	}

}





int main(void)

{

	clk_enable();		/* 使能所有的时钟 			*/

	led_init();			/* 初始化led 			*/


	while(1)			/* 死循环 				*/

	{	

		led_off();		/* 关闭LED 			*/

		delay(500);		/* 延时500ms 			*/


		led_on();		/* 打开LED 			*/

		delay(500);		/* 延时500ms 			*/

	}



	return 0;

}


这是(1)中关于main.h里面各个寄存器的宏定义,然后我们在main.c里面进行了调用,但我们不可能每次都还要自己写这种,于是各个开发板商家配套了这种具有寄存器的定义文件。本次实验中的定义在 ——imx6ul.h

因此,在具体的程序中:

(自己定义寄存器)

(店家定义寄存器)


 通过图片我们可以看出:自己写的寄存器版本就是一个整型指针。而店家的是结构体指针。结构体指针具有更高的代码阅读性。

其中 与等取反 表示对这个寄存器的哪个位置置0

          或等 表示对这个寄存器的哪个位置置1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值