标签:寄存器


C语言结构体与寄存器


单片机开发中免不了会与寄存器打交道。在51,AVR单片机中,会有一个头文件将寄存器的地址定义成更容易阅读的宏,在C语言中通过宏定义来访问寄存器。

  1. #ifndef _AVR_IOM128_H_
  2. #define _AVR_IOM128_H_ 1
  3. ............
  4. /* Input Pins, Port D */
  5. #define PIND _SFR_IO8(0x10)
  6. /* Data Direction Register, Port D */
  7. #define DDRD _SFR_IO8(0x11)
  8. /* Data Register, Port D */
  9. #define PORTD _SFR_IO8(0x12)
  10. /* Input Pins, Port C */
  11. #define PINC _SFR_IO8(0x13)
  12. /* Data Direction Register, Port C */
  13. #define DDRC _SFR_IO8(0x14)
  14. /* Data Register, Port C */
  15. #define PORTC _SFR_IO8(0x15)
  16. ...........
  17. // When use GPIO register
  18. PORTD = 0xff;
  19. tmp = PINC;
#ifndef _AVR_IOM128_H_
#define _AVR_IOM128_H_ 1
............
/* Input Pins, Port D */
#define PIND      _SFR_IO8(0x10)

/* Data Direction Register, Port D */
#define DDRD      _SFR_IO8(0x11)

/* Data Register, Port D */
#define PORTD     _SFR_IO8(0x12)

/* Input Pins, Port C */
#define PINC      _SFR_IO8(0x13)

/* Data Direction Register, Port C */
#define DDRC      _SFR_IO8(0x14)

/* Data Register, Port C */
#define PORTC     _SFR_IO8(0x15)
...........

// When use GPIO register 
PORTD = 0xff; 
tmp = PINC;

而在STM32单片机中,寄存器不再是地址转化成宏定义的形式了,变成了一个结构体。对C语言不熟的同学可能会感到困惑。其实这样的定义方式,对于STM32单片机的寄存器设计而言,是更合理的一种方式。Read More »