操作stm32引脚的时候如何把引脚分组和编号绑定?

2019-12-13 18:22发布

本帖最后由 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)
}
求大神指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
Semiconductor
2019-12-14 01:07
本帖最后由 Semiconductor 于 2019-2-28 18:36 编辑

需求可能像这样

  1. //=============== 头文件 ============================//
  2. #define LED0_GPIO_PORT                GPIOC
  3. #define LED0_GPIO_PIN                 GPIO_Pin_13       
  4. #define LED0_GPIO_CLK            RCC_APB2Periph_GPIOC               
  5. #define LED0_GPIO_MODE                GPIO_Mode_Out_PP        //推挽输出

  6. typedef const struct
  7. {
  8.         GPIO_TypeDef*                GPIO_PORT;
  9.         const uint32_t                GPIO_CLK;
  10.         const uint16_t                GPIO_PIN;
  11.         GPIOMode_TypeDef        GPIO_MODE;
  12. }Pin_TypeDef;        //引脚绑定

  13. extern const Pin_TypeDef  LED0;
  14. extern void GPIO_Config(Pin_TypeDef Pin, uint8_t Val);        //初始化引脚


  15. //================ C文件 =========================//
  16. const Pin_TypeDef  LED0 =
  17. {
  18.         .GPIO_PORT        = LED0_GPIO_PORT,
  19.         .GPIO_CLK                = LED0_GPIO_CLK,
  20.         .GPIO_PIN                = LED0_GPIO_PIN,
  21.         .GPIO_MODE        = LED0_GPIO_MODE,
  22. };


  23. void GPIO_Config(Pin_TypeDef Pin, uint8_t Val)        //初始化引脚
  24. {
  25.         //定义一个GPIO_InitTypeDef类型的结构体
  26.         GPIO_InitTypeDef GPIO_InitStructure;

  27.         //开启GPIO的外设时钟       
  28.         RCC_APB2PeriphClockCmd(Pin.GPIO_CLK, ENABLE);
  29.        
  30.         //选择要控制的GPIO引脚                                                                                                                          
  31.         GPIO_InitStructure.GPIO_Pin = Pin.GPIO_PIN;       
  32.        
  33.         //引脚模式
  34.         GPIO_InitStructure.GPIO_Mode = Pin.GPIO_MODE;
  35.        
  36.         //设置引脚速率为50MHz
  37.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  38.        
  39.         //调用库函数,初始化GPIO       
  40.         GPIO_Init(Pin.GPIO_PORT, &GPIO_InitStructure);            
  41.        
  42.         if(0 == Val)
  43.         {
  44.                 GPIO_ResetBits(Pin.GPIO_PORT,Pin.GPIO_PIN);
  45.         }
  46.         else
  47.         {
  48.                 GPIO_SetBits(Pin.GPIO_PORT,Pin.GPIO_PIN);
  49.         }
  50. }

  51. GPIO_Config(LED0, 0);
复制代码

一周热门 更多>