嵌入式技术论坛
直播中

刘杰

7年用户 1327经验值
私信 关注
[问答]

RT-Thread4.1.0的SDK下rt_pin_get()未返回正确的引脚编号咋办?

用RT-Thread4.1.0的SDK开发程序,在使用PIN中断时注册失败,发现rt_pin_get函数一直返回-6,PIN在初始化时 _stm32_pin_ops 结构体没有注册 pin_get函数导致。

// PIN初始化接口未注册pin_get
struct rt_pin_ops
{
void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode);
void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_base_t value);
int (*pin_read)(struct rt_device *device, rt_base_t pin);
rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_int32_t pin,
rt_uint32_t mode, void (*hdr)(void *args), void *args);
rt_err_t (*pin_detach_irq)(struct rt_device *device, rt_int32_t pin);
rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled);
rt_base_t (*pin_get)(const char *name);
};
const static struct rt_pin_ops _stm32_pin_ops =
{
stm32_pin_mode,
stm32_pin_write,
stm32_pin_read,
stm32_pin_attach_irq,
stm32_pin_dettach_irq,
stm32_pin_irq_enable,
};
// 导致 _hw_pin.ops->pin_get == RT_NULL 返回-6
rt_base_t rt_pin_get(const char *name)
{
RT_ASSERT(_hw_pin.ops != RT_NULL);
RT_ASSERT(name[0] == 'P');
if(_hw_pin.ops->pin_get == RT_NULL)
{
return -RT_ENOSYS;
}
return _hw_pin.ops->pin_get(name);
}

回帖(2)

李艳

2023-2-7 10:33:48
是使用studio创建的工程吗?
驱动可以自己对比master看看加一下。
举报

h1654155275.5614

2023-2-7 10:33:56
所有的引脚 pin 号都是可以预先计算出来的,为啥用这个低效的 api 呢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分