我的代码如下:
struct MODER_BITS
{ __IO uint32_t MODER0:2;
__IO uint32_t MODER1:2;
__IO uint32_t MODER2:2;
__IO uint32_t MODER3:2;
__IO uint32_t MODER4:2;
__IO uint32_t MODER5:2;
__IO uint32_t MODER6:2;
__IO uint32_t MODER7:2;
__IO uint32_t MODER8:2;
__IO uint32_t MODER9:2;
__IO uint32_t MODER10:2;
__IO uint32_t MODER11:2;
__IO uint32_t MODER12:2;
__IO uint32_t MODER13:2;
__IO uint32_t MODER14:2;
__IO uint32_t MODER15:2;
};
typedef union {
__IO uint32_t all;
struct MODER_BITS bit;
}MODER_REG;
然后我可以使用GPIO结构
typedef struct
{
MODER_REG MODER_REG;
//__IO uint32_t MODER ;/*!< GPIO port mode register,
__IO uint32_t OTYPER; /*!< GPIO port output type register, */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, */
__IO uint32_t IDR; /*!< GPIO port input data register, */
__IO uint32_t ODR; /*!< GPIO port output data register, */
__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, */
} GPIO_TypeDef;
然后我可以像这样使用这个定义:
GPIOA->MODER_REG.bit.MODER0=0x2;
有没有办法在结构MODER_REG中使用数组?要像这样使用GPIO:
GPIOA->MODER_REG.bit.MODER[0]=0x2;
如何看待
的定义struct MODER_BITS{
__IO uint32_t MODER[?]:? //options
}
PS: __IO只是易变的宏
请建议。
答案 0 :(得分:3)
没有办法。 C不允许位数组。
但是,您仍然可以使用位掩码访问原始单词:
GPIOA->MODER_REG.all = (GPIOA->MODER_REG.all)&(~3<<0)|(2<<0);
第一部分重置位置0的位,第二部分重置为值2.