智能车学习日记(二)LED_BLINK_DEMO

1.gpio_init()
gpio初始化

gpio_init(P00_0, GPO, 1, PUSHPULL);//P00_0初始化为GPIO功能、输出模式、输出高电平、推挽输出

GPI:输入模式

case NO_PULL:  	port_mode = IfxPort_Mode_inputNoPullDevice; break;
case PULLUP:   	port_mode = IfxPort_Mode_inputPullUp; 		break;
case PULLDOWN: 	port_mode = IfxPort_Mode_inputPullDown; 	break;
default:		port_mode = IfxPort_Mode_inputPullUp; 		break;

GPO:输出模式

case OPENDRAIN:	port_mode = IfxPort_Mode_outputOpenDrainGeneral; break;//开漏输出
default:		port_mode = IfxPort_Mode_outputPushPullGeneral;	 break;//默认为推挽输
//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPIO引脚驱动模式
//  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
//  @param      pin_driver 	引脚驱动模式设置
//  @return     void
//  Sample usage:           gpio_pin_driver(P00_0, IfxPort_PadDriver_cmosAutomotiveSpeed1)
//-------------------------------------------------------------------------------------------------------------------
void gpio_pin_driver(PIN_enum pin, IfxPort_PadDriver pin_driver)
{
	IfxPort_setPinPadDriver(get_port(pin), pin&0x1f, pin_driver);
}

//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPIO输出设置
//  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
//  @param      dat         0:低电平 1:高电平
//  @return     void
//  Sample usage:           gpio_set(P00_0, 1);//P00_0 输出高电平
//-------------------------------------------------------------------------------------------------------------------
void gpio_set(PIN_enum pin, uint8 dat)
{
    if(dat) IfxPort_setPinHigh(get_port(pin), pin&0x1f);
    else    IfxPort_setPinLow(get_port(pin), pin&0x1f);
}

//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPIO状态获取
//  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
//  @return     uint8       0:低电平 1:高电平
//  Sample usage:           uint8 status = gpio_get(P00_0);//获取P00_0引脚电平
//-------------------------------------------------------------------------------------------------------------------
uint8 gpio_get(PIN_enum pin)
{
    return IfxPort_getPinState(get_port(pin), pin&0x1f);
}

//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPIO方向设置
//  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
//  @param      dir         引脚的方向   输出:GPO   输入:GPI
//  @param      pinmode     引脚配置(可设置参数由zf_gpio.h文件内GPIOMODE_enum枚举值确定)
//  @return     void        
//  Sample usage:           gpio_dir(P00_0, GPO, PUSHPULL);//设置P00_0为推挽输出模式
//-------------------------------------------------------------------------------------------------------------------
void gpio_dir(PIN_enum pin, GPIODIR_enum dir, GPIOMODE_enum pinmode)
{
	IfxPort_Mode port_mode;

	if(dir == GPI)
	{
		switch(pinmode)
		{
			case NO_PULL:  	port_mode = IfxPort_Mode_inputNoPullDevice; break;
			case PULLUP:   	port_mode = IfxPort_Mode_inputPullUp; 		break;
			case PULLDOWN: 	port_mode = IfxPort_Mode_inputPullDown; 	break;
			default:		port_mode = IfxPort_Mode_inputPullUp; 		break;
		}
	}
	else
	{
		switch(pinmode)
		{
			case OPENDRAIN:	port_mode = IfxPort_Mode_outputOpenDrainGeneral; break;//开漏输出
			default:		port_mode = IfxPort_Mode_outputPushPullGeneral;	 break;//默认为推挽输
		}
	}
	
	IfxPort_setPinMode(get_port(pin), pin&0x1f, port_mode);
}

//-------------------------------------------------------------------------------------------------------------------
//  @brief      GPIO 翻转
//  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
//  @return     void        
//  Sample usage:           gpio_toggle(P00_0);//P00_0引脚电平翻转
//-------------------------------------------------------------------------------------------------------------------
void gpio_toggle(PIN_enum pin)
{
	IfxPort_togglePin(get_port(pin), pin&0x1f);
}

主函数

uint8 gpio_status;

int core0_main(void)
{
	disableInterrupts();
	get_clk();//获取时钟频率  务必保留

    //用户在此处调用各种初始化函数等

	//需要特别注意P20_2是不能用于输出的,仅仅只有输入的功能
	//需要特别注意P20_2是不能用于输出的,仅仅只有输入的功能
	//需要特别注意P20_2是不能用于输出的,仅仅只有输入的功能

	gpio_init(P20_8, GPO, 0, PUSHPULL);//设置P20_8为输出 默认输出低电平  PUSHPULL:推挽输出
	gpio_init(P20_9, GPO, 0, PUSHPULL);
	gpio_init(P21_4, GPO, 0, PUSHPULL);
	gpio_init(P21_5, GPO, 0, PUSHPULL);

	gpio_init(P21_2, GPI, 0, PULLUP);  //设置P21_2为输入 PULLUP:上拉输入

    enableInterrupts();

    while (TRUE)
    {
    	//获取gpio状态
    	gpio_status = gpio_get(P21_2);
    	//将gpio状态打印到FSS窗口
    	printf("gpio_status: %d\n", gpio_status);

    	gpio_toggle(P20_8);//翻转IO
    	gpio_toggle(P20_9);
    	gpio_toggle(P21_4);
    	gpio_toggle(P21_5);

    	systick_delay_ms(STM0, 100);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值