ISKBoard example project
Wenxue
2025-09-02 7dc2985c99db42f170d93ba6d013c4dd4e429eeb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**********************************************************************
*   Copyright: (C)2024 LingYun IoT System Studio
*      Author: GuoWenxue<guowenxue@gmail.com>
* Description: ISKBoard Hardware Abstract Layer driver
*
*   ChangeLog:
*        Version    Date       Author            Description
*        V1.0.0  2024.08.29    GuoWenxue      Release initial version
***********************************************************************/
 
#include "miscdev.h"
 
/*
 *+----------------------+
 *|    GPIO Relay API    |
 *+----------------------+
 */
 
gpio_t     relays[RelayMax] =
{
    { "Relay1",   GPIOD, GPIO_PIN_2, OFF },
};
 
int init_relay(void)
{
    int                 which;
 
    /* Turn all relays off */
    for(which=0; which<RelayMax; which++)
    {
        HAL_GPIO_WritePin(relays[which].group, relays[which].pin, GPIO_PIN_RESET);
    }
 
    return 0;
}
 
/* Turn $which relay to ON/OFF */
void turn_relay(int which, int status)
{
    GPIO_PinState       level;
 
    if( which >= RelayMax )
        return ;
 
    level = status==OFF ? GPIO_PIN_RESET : GPIO_PIN_SET;
 
    HAL_GPIO_WritePin(relays[which].group, relays[which].pin, level);
 
    relays[which].status = status;
}
 
/* Get $which relay current status */
int status_relay(int which)
{
    if( which >= RelayMax )
        return 0;
 
    return relays[which].status;
}
 
/*
 *+----------------------+
 *|     GPIO Led API     |
 *+----------------------+
 */
 
gpio_t     leds[LedMax] =
{
    { "RedLed",   GPIOC, GPIO_PIN_9, OFF },
    { "GreenLed", GPIOC, GPIO_PIN_6, OFF },
    { "BlueLed",  GPIOB, GPIO_PIN_2, OFF },
};
 
 
int init_led(void)
{
    int                 which;
 
    /* Turn all Leds off */
    for(which=0; which<LedMax; which++)
    {
        HAL_GPIO_WritePin(leds[which].group, leds[which].pin, GPIO_PIN_SET);
    }
 
    return 0;
}
 
/* Turn $which led to ON/OFF */
void turn_led(int which, int status)
{
    GPIO_PinState       level;
 
    if( which >= LedMax )
        return ;
 
    level = status==OFF ? GPIO_PIN_SET : GPIO_PIN_RESET;
 
    HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level);
 
    leds[which].status = status;
}
 
/* Toggle $which led status */
void toggle_led(int which)
{
 
    if( which >= LedMax )
        return ;
 
    HAL_GPIO_TogglePin(leds[which].group, leds[which].pin);
 
    leds[which].status = !leds[which].status;
}
 
/* Blink $which led */
void blink_led(int which, uint32_t interval)
{
    turn_led(which, ON);
    HAL_Delay(interval);
 
    turn_led(which, OFF);
    HAL_Delay(interval);
}
 
/* Get $which led current status */
int status_led(int which)
{
    if( which >= LedMax )
        return 0;
 
    return leds[which].status;
}
 
/*
 *+----------------------+
 *|     GPIO Key API     |
 *+----------------------+
 */
#include "main.h" /* Key1_pin, Key2_Pin, Key3_Pin 定义在该头文件下 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if( Key1_Pin == GPIO_Pin )
    {
        blink_led( Led_R, 500 );
    }
    else if( Key2_Pin == GPIO_Pin )
    {
        blink_led( Led_G, 500 );
    }
    else if( Key3_Pin == GPIO_Pin )
    {
        blink_led( Led_B, 500 );
    }
}