本节介绍通用输入输出(GPIO)API,包括术语和首字母缩写词,功能,体系结构,如何使用API,GPIO功能组,枚举,结构和功能。
术语和首字母缩写词
条款 | 细节 |
---|---|
通用输入输出 | 通用输入输出是集成电路上的通用引脚,定义为输入或输出引脚,并在运行时由用户控制。有关更多信息,请参阅Wikipedia中的通用输入输出。 |
支持的功能
- 支持 GPIO 和 外设 操作 模式。
GPIO根据用户配置以各种模式运行:
- GPIO 模式:在该模式下,通过读写相应的数据寄存器将引脚编程为软件控制的输入或输出。输入数据和输出数据都可以是数字低电平或数字高电平。
- 外设 模式:在该模式下,引脚用作嵌入式外设。微控制器引脚通过一个多路复用器将外设一次连接到一个备用功能。外围模块在使用前必须将Pinmux配置为相应的引脚。应用pinmux配置的两种方法:调用hal_pinmux_set_function()或配置Easy pinmux工具(EPT),这是一种软件工具,可为pinmux配置提供图形用户界面。有关引脚替代功能的更多信息,请参考hal_pinmux_define.h。
- 调用hal_pinmux_set_function()设置引脚模式,并调用hal_gpio_set_direction()设置GPIO的方向。如果该引脚处于GPIO模式,则调用hal_gpio_get_input()获取该引脚的输入数据,并调用hal_gpio_set_output()设置要输出的数据。
- 支持 切换 功能。 切换功能会为每个功能调用反转引脚的输出数据。 调用hal_gpio_toggle_pin()切换目标引脚的输出数据。
- 支持上 拉 和 下拉 功能。 如果未连接信号源,则上拉和下拉功能定义引脚的输入状态。上拉和下拉功能均通过电阻实现。通过配置GPIO寄存器设置目标引脚的上拉状态。 调用hal_gpio_pull_down()设置引脚为下拉状态,调用hal_gpio_pull_up()设置引脚为上拉状态。
- 支持 反转 功能。 反转功能会反转GPIO的输入数据,直到禁用该功能为止。当芯片输入为高电平有效而连接的设备处于输出状态且低电平有效时,此功能很有用。 调用hal_gpio_enable_inversion()反转引脚的输入数据,直到通过调用hal_gpio_disable_inversion()禁用该功能。
GPIO的软件架构
GPIO驱动程序支持以下两种操作模式。
- GPIO 模式 架构:如果指定该引脚工作在GPIO模式,则可以在输入和输出方向上对其进行编程。如果将方向配置为通过方向寄存器输出,则写入输出寄存器的数据将在引脚上输出,也可以访问输出数据寄存器,而对输出数据寄存器的访问仅获得最后写入的值。输出引脚默认为推挽型,推挽输出在这里是指一种电子电路,它使用一对有源器件,它们交替地向连接的负载提供电流或从连接的负载吸收电流。推挽输出存在于TTL和CMOS数字逻辑电路以及某些类型的放大器中,通常实现为互补的一对晶体管,一个从负载到地的电流消耗或吸收电流,或者是负电源,另一个从正电源向负载提供电流或向负载提供电流。如果将方向配置为输入,则从输入数据寄存器接收引脚上存在的数据。与输出电路不同,施密特触发器以及输入电路上的上拉和下拉电阻。其中,施密特触发器是一个将模拟输入信号转换为数字输出信号的有源电路。当目标引脚未连接至外部电源时,上拉和下拉电阻有助于将目标引脚设置为默认电压电平(高或低)。其中,施密特触发器是一个将模拟输入信号转换为数字输出信号的有源电路。当目标引脚未连接至外部电源时,上拉和下拉电阻有助于将目标引脚设置为默认电压电平(高或低)。其中,施密特触发器是一个将模拟输入信号转换为数字输出信号的有源电路。当目标引脚未连接至外部电源时,上拉和下拉电阻有助于将目标引脚设置为默认电压电平(高或低)。
- 外围 模式 架构:引脚根据多路复用器设置以几种板载外围模式之一运行。它一次只能以一种模式运行,以避免共享同一引脚的外设之间发生冲突。
如何使用此驱动程序
- GPIO 模式。
- 步骤1.调用hal_gpio_init()初始化引脚。
- 步骤2.调用hal_pinmux_set_function()将引脚配置为以GPIO模式运行。
- 步骤3.调用hal_gpio_set_direction()来配置GPIO的方向。
- 步骤4.调用hal_gpio_set_output()将数据设置为输出方向。
- 步骤5.调用hal_gpio_deinit()取消初始化该引脚。
- 样例代码: 无效 gpio_application(无效) { hal_gpio_init(gpio_pin); hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为在GPIO模式下运行。 hal_gpio_set_direction(gpio_pin,HAL_GPIO_DIRECTION_OUTPUT); hal_gpio_set_output(gpio_pin,HAL_GPIO_DATA_HIGH); hal_gpio_deinit(gpio_pin); }
- 外围 模式。
- 步骤1.调用hal_gpio_init()初始化引脚。
- 步骤2.调用hal_pinmux_set_function()将引脚配置为在外围模式下运行。
- 步骤3.调用hal_gpio_deinit()取消初始化该引脚。
- 样例代码: 无效 gpio_application(无效) { hal_gpio_init(gpio_pin); //有关pinmux的更多信息,请参考hal_pinmux_define.h hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为function_index中定义的外设模式。 hal_gpio_deinit(gpio_pin); }
功能 | |
---|---|
hal_gpio_status_t | hal_gpio_init(hal_gpio_pin_t gpio_pin) |
此功能使用基本功能初始化GPIO硬件。使用前必须初始化目标引脚。 更多... | |
hal_gpio_status_t | hal_gpio_deinit(hal_gpio_pin_t gpio_pin) |
该函数将GPIO硬件初始化为默认状态。如果不使用目标引脚,则必须将其初始化。 更多... | |
hal_pinmux_status_t | hal_pinmux_set_function(hal_gpio_pin_t gpio_pin,hal_pinmux_select_t function_index) |
此功能配置目标GPIO的pinmux。引脚多路复用器(pinmux)连接引脚和板载外设,因此一旦将引脚编程为外设功能,该引脚将以特定模式工作。hal_pinmux_define.h中提供了每个引脚的备用功能。 更多... | |
hal_gpio_status_t | hal_gpio_get_input(hal_gpio_pin_t gpio_pin,hal_gpio_data_t * gpio_data) |
当输入GPIO的方向时,此函数获取目标GPIO的输入数据。 更多... | |
hal_gpio_status_t | hal_gpio_set_output(hal_gpio_pin_t gpio_pin,hal_gpio_data_t gpio_data) |
该功能设置目标GPIO的输出数据。 更多... | |
hal_gpio_status_t | hal_gpio_get_output(hal_gpio_pin_t gpio_pin,hal_gpio_data_t * gpio_data) |
当输出GPIO的方向时,此函数获取目标GPIO的输出数据。 更多... | |
hal_gpio_status_t | hal_gpio_set_direction(hal_gpio_pin_t gpio_pin,hal_gpio_direction_t gpio_direction) |
该功能设置目标GPIO的方向。 更多... | |
hal_gpio_status_t | hal_gpio_get_direction(hal_gpio_pin_t gpio_pin,hal_gpio_direction_t * gpio_direction) |
此函数获取目标GPIO的方向。 更多... | |
hal_gpio_status_t | hal_gpio_toggle_pin(hal_gpio_pin_t gpio_pin) |
输出引脚方向时,此功能切换目标GPIO的输出数据。执行此功能后,目标GPIO的输出数据将取反。 更多... | |
hal_gpio_status_t | hal_gpio_enable_inversion(hal_gpio_pin_t gpio_pin) |
此功能启用目标GPIO的输入数据反转,此功能之后,目标GPIO的输入数据将始终反转,直到禁用了反转功能。 更多... | |
hal_gpio_status_t | hal_gpio_disable_inversion(hal_gpio_pin_t gpio_pin) |
该功能禁用目标GPIO的输入数据反转。 更多... | |
hal_gpio_status_t | hal_gpio_pull_up(hal_gpio_pin_t gpio_pin) |
该功能将目标GPIO设置为上拉状态,执行此功能后,如果该引脚断开连接,则目标引脚的输入数据将等于高电平。该功能仅通过一个上拉电阻在引脚上运行。 更多... | |
hal_gpio_status_t | hal_gpio_pull_down(hal_gpio_pin_t gpio_pin) |
此功能将目标GPIO设置为下拉状态,此功能之后,如果该引脚断开连接,则目标引脚的输入数据将等于低电平。该功能通过一个下拉电阻在引脚上运行。 更多... | |
hal_gpio_status_t | hal_gpio_disable_pull(hal_gpio_pin_t gpio_pin) |
该功能禁用目标GPIO的上拉或下拉。该功能通过一个上拉电阻和一个下拉电阻在引脚上运行。 更多... | |
hal_gpio_status_t | hal_gpio_set_driving_current(hal_gpio_pin_t gpio_pin,hal_gpio_driving_current_t驱动) |
该功能设置目标GPIO的驱动电流。 更多... | |
hal_gpio_status_t | hal_gpio_get_driving_current(hal_gpio_pin_t gpio_pin,hal_gpio_driving_current_t *驱动) |
该功能获取目标GPIO的驱动电流。 更多... | |
功能文件
◆ hal_gpio_deinit()
hal_gpio_status_t hal_gpio_deinit | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
该函数将GPIO硬件初始化为默认状态。如果不使用目标引脚,则必须将其初始化。
参量
[在] | gpio_pin | 指定要初始化的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_disable_inversion()
hal_gpio_status_t hal_gpio_disable_inversion | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
该功能禁用目标GPIO的输入数据反转。
参量
[在] | gpio_pin | 指定要配置的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
ret = hal_gpio_init(gpio_pin);
ret = hal_gpio_enable_inversion(gpio_pin);
//做其他事情
ret = hal_gpio_disable_inversion(gpio_pin);
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_disable_pull()
hal_gpio_status_t hal_gpio_disable_pull | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
该功能禁用目标GPIO的上拉或下拉。该功能通过一个上拉电阻和一个下拉电阻在引脚上运行。
参量
[在] | gpio_pin | 指定要设置的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
ret = hal_gpio_init(gpio_pin);
ret_pinmux_status = hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为GPIO模式。
ret = hal_gpio_set_direction(gpio_pin,HAL_GPIO_DIRECTION_INPUT);
ret = hal_gpio_pull_down(gpio_pin);
ret = hal_gpio_disable_pull(gpio_pin); //目标GPIO的上拉状态被禁用。
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_enable_inversion()
hal_gpio_status_t hal_gpio_enable_inversion | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
此功能启用目标GPIO的输入数据反转,此功能之后,目标GPIO的输入数据将始终反转,直到禁用了反转功能。
参量
[在] | gpio_pin | 指定要反转的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
ret = hal_gpio_init(gpio_pin);
ret = hal_gpio_enable_inversion(gpio_pin);
//做其他事情
ret = hal_gpio_disable_inversion(gpio_pin);
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_get_direction()
hal_gpio_status_t hal_gpio_get_direction | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_direction_t * | gpio_direction | ||
) |
此函数获取目标GPIO的方向。
参量
[在] | gpio_pin | 指定要操作的引脚号。 |
---|---|---|
[在] | gpio_direction | 是目标GPIO的方向,可以输入或输出方向。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_INVALID_PARAMETER,则给出了错误的参数(引脚号除外),必须验证该参数。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_get_driving_current()
hal_gpio_status_t hal_gpio_get_driving_current | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_driving_current_t * | 驾驶 | ||
) |
该功能获取目标GPIO的驱动电流。
参量
[在] | gpio_pin | 指定要配置的引脚号。 |
---|---|---|
[在] | 驾驶 | 指定要设置为目标GPIO的驱动电流。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
hal_gpio_driving_current_t *驾驶;
ret = hal_gpio_init(gpio_pin);
ret = hal_gpio_set_driving(gpio_pin,&driving);
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_get_input()
hal_gpio_status_t hal_gpio_get_input | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_data_t * | gpio_data | ||
) |
当输入GPIO的方向时,此函数获取目标GPIO的输入数据。
参量
[在] | gpio_pin | 指定要操作的引脚号。 |
---|---|---|
[在] | gpio_data | 是从目标GPIO接收的输入数据。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_INVALID_PARAMETER,则给出了错误的参数(引脚号除外),必须验证该参数。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_get_output()
hal_gpio_status_t hal_gpio_get_output | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_data_t * | gpio_data | ||
) |
当输出GPIO的方向时,此函数获取目标GPIO的输出数据。
参量
[在] | gpio_pin | 指定要操作的引脚号。 |
---|---|---|
[在] | gpio_data | 是目标GPIO的输出数据。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_INVALID_PARAMETER,则给出了错误的参数(引脚号除外),必须验证该参数。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_init()
hal_gpio_status_t hal_gpio_init | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
此功能使用基本功能初始化GPIO硬件。使用前必须初始化目标引脚。
参量
[在] | gpio_pin | 指定要初始化的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_pull_down()
hal_gpio_status_t hal_gpio_pull_down | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
此功能将目标GPIO设置为下拉状态,此功能之后,如果该引脚断开连接,则目标引脚的输入数据将等于低电平。该功能通过一个下拉电阻在引脚上运行。
参量
[在] | gpio_pin | 指定要设置的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
ret = hal_gpio_init(gpio_pin);
ret_pinmux_status = hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为GPIO模式。
ret = hal_gpio_set_direction(gpio_pin,HAL_GPIO_DIRECTION_INPUT);
ret = hal_gpio_pull_down(gpio_pin); //目标GPIO的上拉状态设置为下拉。
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_pull_up()
hal_gpio_status_t hal_gpio_pull_up | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
该功能将目标GPIO设置为上拉状态,执行此功能后,如果该引脚断开连接,则目标引脚的输入数据将等于高电平。该功能仅通过一个上拉电阻在引脚上运行。
参量
[在] | gpio_pin | 指定要设置的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
ret = hal_gpio_init(gpio_pin);
ret_pinmux_status = hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为GPIO模式。
ret = hal_gpio_set_direction(gpio_pin,HAL_GPIO_DIRECTION_INPUT);
ret = hal_gpio_pull_up(gpio_pin); //目标GPIO的上拉状态设置为上拉。
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_set_direction()
hal_gpio_status_t hal_gpio_set_direction | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_direction_t | gpio_direction | ||
) |
该功能设置目标GPIO的方向。
参量
[在] | gpio_pin | 指定要设置的引脚号。 |
---|---|---|
[在] | gpio_direction | 是目标GPIO的方向,可以输入或输出方向。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_INVALID_PARAMETER,则给出了错误的参数(引脚号除外),必须验证该参数。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_set_driving_current()
hal_gpio_status_t hal_gpio_set_driving_current | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_driving_current_t | 驾驶 | ||
) |
该功能设置目标GPIO的驱动电流。
参量
[在] | gpio_pin | 指定要配置的引脚号。 |
---|---|---|
[在] | 驾驶 | 指定设置为目标GPIO的驱动电流。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
ret = hal_gpio_init(gpio_pin);
ret = hal_gpio_set_driving(gpio_pin,HAL_GPIO_DRIVING_16MA);
ret = hal_gpio_deinit(gpio_pin);
◆ hal_gpio_set_output()
hal_gpio_status_t hal_gpio_set_output | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_gpio_data_t | gpio_data | ||
) |
该功能设置目标GPIO的输出数据。
参量
[在] | gpio_pin | 指定要操作的引脚号。 |
---|---|---|
[在] | gpio_data | 是目标GPIO的输出数据。 |
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_INVALID_PARAMETER,则给出了错误的参数(引脚号除外),必须验证该参数。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
◆ hal_gpio_toggle_pin()
hal_gpio_status_t hal_gpio_toggle_pin | ( | hal_gpio_pin_t | gpio_pin | ) |
---|
输出引脚方向时,此功能切换目标GPIO的输出数据。执行此功能后,目标GPIO的输出数据将取反。
参量
[在] | gpio_pin | 指定要切换的引脚号。 |
---|
退货
指示此函数调用是否成功。如果返回值为HAL_GPIO_STATUS_OK,则操作成功完成。如果返回值为HAL_GPIO_STATUS_ERROR_PIN,则输入引脚号无效,必须验证参数。如果返回值为HAL_GPIO_STATUS_ERROR,则操作失败。
注意
警告
例
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
ret = hal_gpio_init(gpio_pin);
ret_pinmux_status = hal_pinmux_set_function(gpio_pin,function_index); //将引脚设置为GPIO模式。
ret = hal_gpio_set_direction(gpio_pin,HAL_GPIO_DIRECTION_OUTPUT);
ret = hal_gpio_set_output(gpio_pin,HAL_GPIO_DATA_HIGH);
ret = hal_gpio_toggle_pin(gpio_pin); // gpio_pin的输出数据将从高电平切换为低电平。
ret = hal_gpio_deinit(gpio_pin);
◆ hal_pinmux_set_function()
hal_pinmux_status_t hal_pinmux_set_function | ( | hal_gpio_pin_t | gpio_pin, |
---|---|---|---|
hal_pinmux_select_t | function_index | ||
) |
此功能配置目标GPIO的pinmux。引脚多路复用器(pinmux)连接引脚和板载外设,因此一旦将引脚编程为外设功能,该引脚将以特定模式工作。hal_pinmux_define.h中提供了每个引脚的备用功能。
参量
[在] | gpio_pin | 指定要配置的引脚号。 |
---|---|---|
[在] | function_index | 指定引脚的功能。 |
退货
指示此函数调用是否成功。如果返回值为HAL_PINMUX_STATUS_OK,则操作成功完成。如果返回值为HAL_PINMUX_STATUS_INVALID_FUNCTION,则给出了错误的备用函数,必须验证参数。如果返回值为HAL_PINMUX_STATUS_ERROR_PORT,则输入引脚号无效,必须验证参数。如果返回值为HAL_PINMUX_STATUS_ERROR,则操作失败。