STM32F4 | MDK下C语言基础

一、MDK下C语言基础

1.位操作

  简而言之,位操作就是对基本类型变量可以在位级别进行操作。C 语言支持如下 6 种位操作:

运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

  下面介绍位操作在单片机开发中的一些实用技巧。

  1. 不改变其他位的值的状况下,对某几个位进行设值
    方法就是先对需要设置的位用&操作符进行清零操作,然后用|操作符设值。比如:要改变 GPIOA->ODR 的状态,可以先对寄存器的值进行&清零操作

    GPIOA->ODR &=0XFF0F; //将第 4-7 位清 0
    

    然后再与需要设置的值进行|或运算

    GPIOA->ODR |=0X0040; //设置相应位的值,不改变其他位的值
    
  2. 移位操作提高代码的可读性
    移位操作在单片机开发中也非常重要。比如:将 ODR 寄存器的第 5 位设置为 1

    GPIOA->ODR| = 1 << 5;
    

    如果写成

    GPIOA->ODR =0x0020;
    

    这样的代码可读性非常差同时也不好重用。

  3. ~取反操作使用技巧
    例如:GPIOA->ODR 寄存器的每一位都用来设置一个 IO 口的输出状态,某个时刻我们希望去设置某一位的值为 0,同时其他位都为 1,简单的作法是直接给寄存器设置一个值:

    GPIOA->ODR =0xFFF7

    这样的作法设置第 3 位为 0,但是这样的写法可读性很差。使用取反操作实现如下:

    GPIOA->ODR= (uint16_t)~(1<<3);
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值