summaryrefslogtreecommitdiff
path: root/bsp/stm32
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-09-11 12:57:59 +0800
committerGitHub <[email protected]>2020-09-11 12:57:59 +0800
commit36cb4349a61d768c5e2fad0798647dfb3e0b523e (patch)
tree4884be1053baae696aa635356dbce01f410973ea /bsp/stm32
parent8ea34bf936afafb2f9ed6955c53064f9e8081680 (diff)
parent38b3a3445e59d11b5efbfafb72c4bdc4bcb6fee4 (diff)
Merge pull request #3897 from yangjie11/yj_dev1
[components][driver/pin.c]pin 框架增加 rt_pin_get
Diffstat (limited to 'bsp/stm32')
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_gpio.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
index d75a5d3fce..85b54fe637 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c
@@ -332,6 +332,51 @@ static const struct pin_index *get_pin(uint8_t pin)
return index;
};
+static rt_base_t stm32_pin_get(const char *name)
+{
+ rt_base_t pin = 0;
+ int hw_port_num, hw_pin_num = 0;
+ int i, name_len = 1;
+ int mul = 1;
+
+ name_len = rt_strlen(name);
+
+ if ((name_len < 4) || (name_len >= 6))
+ {
+ return -RT_EINVAL;
+ }
+ if ((name[0] != 'P') || (name[2] != '.'))
+ {
+ return -RT_EINVAL;
+ }
+
+ if ((name[1] >= 'A') && (name[1] <= 'Z'))
+ {
+ hw_port_num = (int)(name[1] - 'A');
+ }
+ else
+ {
+ return -RT_EINVAL;
+ }
+
+ for (i = name_len - 1; i > 2; i--)
+ {
+ hw_pin_num += ((int)(name[i] - '0') * mul);
+ mul = mul * 10;
+ }
+
+ pin = 16 * hw_port_num + hw_pin_num;
+
+ if (pin < ITEM_NUM(pins))
+ {
+ return pin;
+ }
+ else
+ {
+ return -RT_EINVAL;
+ }
+}
+
static void stm32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
{
const struct pin_index *index;
@@ -646,6 +691,7 @@ const static struct rt_pin_ops _stm32_pin_ops =
stm32_pin_attach_irq,
stm32_pin_dettach_irq,
stm32_pin_irq_enable,
+ stm32_pin_get,
};
rt_inline void pin_irq_hdr(int irqno)