函数原型:
unsigned int hi_io_set_func(unsigned int id, unsigned char val);
参数说明:
unsigned int id:这是一个枚举类型的参数(hi_io_name),用于指定你要配置的具体GPIO引脚编号。
unsigned char val:这也是一个枚举类型的参数,用于指定该GPIO引脚将要被复用的功能。每个GPIO引脚都有一套独立的功能枚举定义。例如,对于GPIO9,HI_IO_FUNC_GPIO_9_GPIO表示将其作为普通GPIO,而 HI_IO_FUNC_GPIO_9_PWM0_OUT则表示将其复用为PWM0的输出引脚。
使用流程
在使用 hi_io_set_func()时,通常需要遵循一个清晰的步骤,特别是当引脚最终用于PWM等复杂功能时:
1.初始化GPIO:首先调用 IoTGpioInit(id)初始化目标引脚。
2.设置复用功能:接着调用 hi_io_set_func(id, val),将引脚配置为所需的功能(如PWM、I2C等)。
3.(可选)设置引脚方向:如果配置为普通GPIO,需使用 IoTGpioSetDir()设置输入或输出方向。
4.初始化并启动功能模块:如果配置的是PWM、I2C等,还需调用相应的初始化函数(如 IoTPwmInit)和启动函数(如 IoTPwmStart)。
代码实例
将GPIO9配置为PWM0输出(实现呼吸灯)
#include "iot_gpio.h"
#include "hi_io.h"
#include "iot_pwm.h"
#define PWM_GPIO 9
#define PWM_PORT 0 // PWM0通道
// 初始化
IoTGpioInit(PWM_GPIO);
// 关键步骤:将GPIO9复用为PWM0输出功能
hi_io_set_func(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_PWM0_OUT);//HI_IO_NAME_GPIO_9代表GPIO9引脚, HI_IO_FUNC_GPIO_9_PWM0_OUT则表示将其复用为PWM0的输出引脚
IoTPwmInit(PWM_PORT); // PWM_PORT表示PWM的端口号
// 启动PWM,占空比50%,频率2kHz (160MHz / 80000 = 2kHz)
IoTPwmStart(PWM_PORT, 50, 80000); // PWM_PORT为PWM的端口号,50表示PWM占空比为50%,80000则表示PWM频率为80000。
重要注意事项
复用功能唯一性:一个GPIO引脚在某一时刻只能作为一种功能使用。通过hi_io_set_func()设定后,该引脚即工作于指定模式,直到下次更改。
功能枚举值:参数val的取值与具体的GPIO引脚绑定,不同引脚的可用功能枚举不同,使用时最好查阅手册或头文件(如 hi_io.h)以确定正确的枚举值。例如,GPIO9的PWM功能对应值可能是5,而GPIO11的对应值则不同。
与GPIO方向设置的关系:当引脚被复用为PWM、I2C等非普通GPIO功能时,通常无需也不应再调用 IoTGpioSetDir()来设置引脚方向,因为复用功能本身已经确定了引脚的行为方式。
9664

被折叠的 条评论
为什么被折叠?



