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);
}
}