求助:关于程序的疑问

[复制链接]
 楼主| leshak 发表于 2012-6-24 00:38 | 显示全部楼层 |阅读模式
  刚上手STM32方面的程序,有点疑问
1.   RCC_APB2ENR |= (1<<4);
这个语句的|=是按位或赋值,可是(1<<4)将第4位赋值1,C语言规定<<左边不是一个变量嘛?而且<<是移位功能啊,这个语句如何实现BIT 4赋值成1的呢?
2.   (*((volatile unsigned long *)0xE0028000))和(*((volatile unsigned long *)(0xE0028000))) 有什么区别嘛?


3.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| , ENABLE);
RCC_APB2Periph_GPIOB| 形参RCC_APB2Periph_GPIOB后面跟个| 或符号是什么意思呢?


查了C语言的书籍想不通,还望大家帮忙下,谢谢了!



梅花望青竹 发表于 2012-6-24 08:43 | 显示全部楼层
有这个| 在后面吗?没有用到过。<<实现的是移位寄存器的功能而已,内部的结构真不懂!
adce 发表于 2012-6-24 14:12 | 显示全部楼层
1.没那个规定 (1<<4) 是 0x01左移5位 是0x10 RCC_APB2ENR|=0x10
2.应该一样
3.他拷贝过来的代码去掉了|后面的内容 但是忘了去掉|了 去掉就行...
lai832 发表于 2012-6-24 16:04 | 显示全部楼层
如楼上,
1:真不知有这规定,反正用得N多.
2.是一样的,后者是习惯,当后面是表达式时,括号就很有用了
3. |应该是忘了删的,    在STM库里,其实就是N个量或后,得到一个量传递而已------因为RCC_APB2Periph_GPIOB等只是32位中的一位为"1",并且各个不同位.你也可以用"+"一样的---------注:只在这类特定的参数/声明才可以这样
acgean 发表于 2012-6-25 08:39 | 显示全部楼层
1<<4 不就是 16 嘛。一个或操作就是置位了
看来楼主还要补习补习c。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

522

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部