OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4387|回复: 10

程序求解

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-18
在线时间
6 小时
发表于 2016-7-18 14:02:45 | 显示全部楼层 |阅读模式
求大神指导一下
#include <stm32f10x_hd.h>
void SEG_TEST(u16 x)
{
        GPIOB->ODR.W &= 0x00FF;
        GPIOB->ODR.W |= x<<8;
}

这句是什么意思啊,小白不胜感激!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11550
金钱
11550
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-7-18 14:06:46 | 显示全部楼层

a &= b     =>    a = a & b;
a |= b       =>    a = a | b;


回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
33
金钱
33
注册时间
2016-7-18
在线时间
5 小时
发表于 2016-7-18 14:17:54 | 显示全部楼层
我没有看过寄存器版本的程序我不清楚为什么要有一个.w,如果按字面来看的话就是控制GPIOB的高8位输出为X的值,GPIOB->ODR是控制GPIOB输出数据的寄存器
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-18
在线时间
6 小时
 楼主| 发表于 2016-7-18 14:32:53 | 显示全部楼层
kaikaicheng 发表于 2016-7-18 14:17
我没有看过寄存器版本的程序我不清楚为什么要有一个.w,如果按字面来看的话就是控制GPIOB的高8位输出为X的 ...

3Q,不胜感激!!!!!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-18
在线时间
6 小时
 楼主| 发表于 2016-7-18 14:33:05 | 显示全部楼层
xuande 发表于 2016-7-18 14:06
a &= b     =>    a = a & b;
a |= b       =>    a = a | b;

谢谢!!!!!!!!
回复 支持 反对

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2016-7-18 14:46:50 | 显示全部楼层
w是个啥意思?!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-18
在线时间
6 小时
 楼主| 发表于 2016-7-18 14:51:53 | 显示全部楼层

我也不清楚啊,看的程序就是这么写的,我直接全部复制过来
回复 支持 反对

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2016-7-18 14:55:00 | 显示全部楼层
shallot6912 发表于 2016-7-18 14:51
我也不清楚啊,看的程序就是这么写的,我直接全部复制过来

从来没见过这么写的,请指点
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-18
在线时间
6 小时
 楼主| 发表于 2016-7-18 16:36:02 | 显示全部楼层
ssssssssssss 发表于 2016-7-18 14:55
从来没见过这么写的,请指点

103的寄存器名字多一个.W或者.B,
.w是写整个端口,.B是单独写一个脚

回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2016-5-20
在线时间
15 小时
发表于 2016-7-18 22:32:52 | 显示全部楼层
据我所知GPIOB->ODR,是操作GPIOB的输出数据寄存器,查看stm32f10x.h,发现ODR并不是一个结构体,所以, GPIOB->ODR.W这样,显然是不合理的, GPIOB->ODR|=0x00ff,才符合语法,其实他就是 GPIOB->ODR= GPIOB->ODR|0x00ff的简写,就是ODR寄存器上的位与0x00ff按位相或,GPIOB->ODR|=x<<8;就是x左移八位,再与ODR相或,这里的X是变量,只能取0或1,希望对你有所帮助
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2016-5-20
在线时间
15 小时
发表于 2016-7-18 22:34:02 | 显示全部楼层
看错了,上面那里是按位相与
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 10:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表