本帖最后由 l4568527193 于 2019-2-28 16:20 编辑
以前使用51的时候没有这样分组,操作某一个引脚就直接P1^1 = 0就行了比如:
#define led P1^1
led = 1;
现在学习32控制引脚都是GPIO_ResetBits(GPIOC,GPIO_Pin_1);
能不能就像使用宏定义或者二维数组那样,直接把GPIOC,GPIO_Pin_1捆绑在一起,
#define led (GPIOC,GPIO_Pin_1)
a[] = ((GPIOC,GPIO_Pin_1),(GPIOC,GPIO_Pin_2))
实际问题是这样:
有两组灯Z1,Z2,每组两个灯泡led1和led2,
Z1 led1 GPIOC,GPIO_Pin_1
led2 GPIOC,GPIO_Pin_2
Z1 led1 GPIOC,GPIO_Pin_3
led2 GPIOC,GPIO_Pin_4
typedef struct
{
GPIOX
GPIO_PinX
}LED;
typedef struct
{
LED Led1
LED Led2
}Z;
void fun(Z1)
{
GPIO_ResetBits(Z1->Led1)
}
求大神指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
需求可能像这样
- //=============== 头文件 ============================//
- #define LED0_GPIO_PORT GPIOC
- #define LED0_GPIO_PIN GPIO_Pin_13
- #define LED0_GPIO_CLK RCC_APB2Periph_GPIOC
- #define LED0_GPIO_MODE GPIO_Mode_Out_PP //推挽输出
- typedef const struct
- {
- GPIO_TypeDef* GPIO_PORT;
- const uint32_t GPIO_CLK;
- const uint16_t GPIO_PIN;
- GPIOMode_TypeDef GPIO_MODE;
- }Pin_TypeDef; //引脚绑定
- extern const Pin_TypeDef LED0;
- extern void GPIO_Config(Pin_TypeDef Pin, uint8_t Val); //初始化引脚
- //================ C文件 =========================//
- const Pin_TypeDef LED0 =
- {
- .GPIO_PORT = LED0_GPIO_PORT,
- .GPIO_CLK = LED0_GPIO_CLK,
- .GPIO_PIN = LED0_GPIO_PIN,
- .GPIO_MODE = LED0_GPIO_MODE,
- };
- void GPIO_Config(Pin_TypeDef Pin, uint8_t Val) //初始化引脚
- {
- //定义一个GPIO_InitTypeDef类型的结构体
- GPIO_InitTypeDef GPIO_InitStructure;
- //开启GPIO的外设时钟
- RCC_APB2PeriphClockCmd(Pin.GPIO_CLK, ENABLE);
-
- //选择要控制的GPIO引脚
- GPIO_InitStructure.GPIO_Pin = Pin.GPIO_PIN;
-
- //引脚模式
- GPIO_InitStructure.GPIO_Mode = Pin.GPIO_MODE;
-
- //设置引脚速率为50MHz
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- //调用库函数,初始化GPIO
- GPIO_Init(Pin.GPIO_PORT, &GPIO_InitStructure);
-
- if(0 == Val)
- {
- GPIO_ResetBits(Pin.GPIO_PORT,Pin.GPIO_PIN);
- }
- else
- {
- GPIO_SetBits(Pin.GPIO_PORT,Pin.GPIO_PIN);
- }
- }
- GPIO_Config(LED0, 0);
复制代码一周热门 更多>