stm宏定义使用及注意事项

笔者接到一个C51单片机的工程要转移到stm上来,然后有一些思索感受,遂做个简单的记录。使用宏定义的好处大家都熟知,便于移植与维护,清晰直观,因此要善于应用,方便自己也方便他人;51的数据输入输出寄存器是同一个,而且输入输出方向寄存器是分开的,因此,在移植的时候要多一些工作!下面是51的原工程部分代码:
#define CHIP_MODE_GPIO                                     P2
#define CHIP_MODE_GPIO_DIR_REG                     P2MDOUT  //0 as in or 1 as out
#define CHIP_MODE_GPIO_GPIO_PIN                   PIN_2        //P2^4

sbit CHIP_MODE_IO = CHIP_MODE_GPIO ^ CHIP_MODE_GPIO_GPIO_PIN;
#define  CHIP_MODE_OPEN_DRAIN()               CHIP_MODE_GPIO_DIR_REG &= ~(1 << CHIP_MODE_GPIO_GPIO_PIN)
#define  CHIP_MODE_PUSH_PULL()                CHIP_MODE_GPIO_DIR_REG |= (1 << CHIP_MODE_GPIO_GPIO_PIN)

#define CHIP_MODE_H()                                CHIP_MODE_IO = LOGIC_1
#define CHIP_MODE_L()                                CHIP_MODE_IO = LOGIC_0

这是我的简单移植应用测试:

#define PIN_0                                0
#define PIN_1                                1
#define PIN_2                                2
#define PIN_3                                3
#define PIN_4                                4
#define PIN_5                                5
#define PIN_6                                6
#define PIN_7                                7

#define CHIP_MODE_GPIO                       PB_ODR        //输出数据
#define CHIP_MODE_GPIO_GPIO_PIN              PIN_5        //PB5
#define CHIP_MODE_GPIO_DIR_REG               PB_DDR 
#define CHIP_MODE_GPIO_OUTPUT_TYPE_REG       PB_CR1 
#define CHIP_MODE_IO_OUTPUT_OPERATION()      CHIP_MODE_GPIO_DIR_REG |= (1 << CHIP_MODE_GPIO_GPIO_PIN)
          
#define CHIP_MODE_OPEN_DRAIN()               CHIP_MODE_GPIO_OUTPUT_TYPE_REG &= ~(1 << CHIP_MODE_GPIO_GPIO_PIN)
#define CHIP_MODE_PUSH_PULL()                CHIP_MODE_GPIO_OUTPUT_TYPE_REG |= (1 << CHIP_MODE_GPIO_GPIO_PIN)

#define CHIP_MODE_H()                        CHIP_MODE_GPIO |= (1 << CHIP_MODE_GPIO_GPIO_PIN)
#define CHIP_MODE_L()                        CHIP_MODE_GPIO &= ~(1 << CHIP_MODE_GPIO_GPIO_PIN)  

void Gpio_Init()
{
      CHIP_MODE_IO_OUTPUT_OPERATION();
      CHIP_MODE_PUSH_PULL();
      CHIP_MODE_L();
}

int main( void )
{
          Gpio_Init();
	  while (1)
	  {
	  }
  return 0;
}

stm IO的操作按照方向配置、输入输出类型、输入输出数据步骤来。另外,补充两点经验:

①:如果宏定义是操作的话,最好加上类似函数的括号,如果是端口引脚等申明则不需要,这样比较直观

②:宏定义紧跟字符串编译器是无法识别的,有操作运算符分开则是可以的


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值