[I.MX6UL] 用STM32的方式来写I.MX6UL程序

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

/**************************************************************

Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

文件名	: 	 mian.c

作者	   : 左忠凯

版本	   : V1.0

描述	   : I.MX6U开发板裸机实验3 STM32模式的LED灯开发

		 使用STM32开发模式来编写LED灯驱动,学习如何从STM32来转入

		 I.MX6U的裸机开发,同时也通过本实验了解STM32库的运行方式。

其他	   	: 无

论坛		: www.openedv.com

在线教育	: www.yuanzige.com

日志	   	: 初版V1.0 2019/1/3 左忠凯创建

**************************************************************/

#include "imx6ul.h"



/*

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

 * @param 		: 无

 * @return 		: 无

 */

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;

}



/*

 * @description	: 初始化LED对应的GPIO

 * @param 		: 无

 * @return 		: 无

 */

void led_init(void)

{

	/* 1、初始化IO复用 IMX6UL参考手册.pdf P1332*/

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





	/* 2、配置GPIO1_IO03的IO属性	1 00 0 0 10 110 00 0

	 *bit [31:17] HYS关闭

	 *bit [16] HYS关闭

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

     *bit [13]: 0 kepper功能

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

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

	 *bit [10:8]: 保留

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

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

	 *bit [2:1]: 保留

     *bit [0]: 0 低转换率

     */

    IOMUX_SW_PAD->GPIO1_IO03 = 0X10B0;





	/* 3、初始化GPIO */

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



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

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

	

}



/*

 * @description	: 打开LED灯

 * @param 		: 无

 * @return 		: 无

 */

void led_on(void)

{

	/* 将GPIO1_DR的bit3清零 	*/

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

}



/*

 * @description	: 关闭LED灯

 * @param 		: 无

 * @return 		: 无

 */

void led_off(void)

{

	/* 将GPIO1_DR的bit3置1 */

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

}



/*

 * @description	: 短时间延时函数

 * @param - n	: 要延时循环次数(空操作循环次数,模式延时)

 * @return 		: 无

 */

void delay_short(volatile unsigned int n)

{

	while(n--){}

}



/*

 * @description	: 延时函数,在396Mhz的主频下

 * 			  	  延时时间大约为1ms

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

 * @return 		: 无

 */

void delay(volatile unsigned int n)

{

	while(n--)

	{

		delay_short(0x7ff);

	}

}



/*

 * @description	: mian函数

 * @param 		: 无

 * @return 		: 无

 */

int main(void)

{

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

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



	while(1)			/* 死循环 				*/

	{	

		led_off();		/* 关闭LED 			*/

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



		led_on();		/* 打开LED 			*/

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

	}



	return 0;

}


猜你喜欢

转载自blog.csdn.net/qq_29246181/article/details/106219063