OpenEdv-开源电子网

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

关于GPIOx-ODR的使用问题

[复制链接]

38

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2013-8-19
在线时间
0 小时
发表于 2013-8-19 21:44:23 | 显示全部楼层 |阅读模式
在跑马灯的试验中。我的LED端口是PE7-PE10。我将这个定义方式        
        GPIOE->CRH&=0XFFFFFFF0;
        GPIOE->CRH|=0X00000003;//PE.8推挽输出
        GPIOE->ODR|=1<<8;      //PE.8输出高 

        GPIOE->CRH&=0XFFFFFF0F;
        GPIOE->CRH|=0X00000030;//PE.9推挽输出
        GPIOE->ODR|=1<<9;      //PE.9输出高 

        GPIOE->CRH&=0XFFFFF0FF;
        GPIOE->CRH|=0X00000300;//PE.10推挽输出
        GPIOE->ODR|=1<<10;      //PE.10输出高 
改成  

        GPIOE->CRL&=0X0FFFFFFF; 
        GPIOE->CRL|=0X30000000;//PE.7 推挽输出            
        GPIOE->ODR|=1<<7;      //PE.7 输出高
                                                                                          
        GPIOE->CRH&=0XFFFFF000;
        GPIOE->CRH|=0X00000333;//PE.8-10推挽输出
        GPIOE->ODR|=7;      //PE.8-10输出高 

效果一样。后来发现GPIOE->ODR|=7; 定义有错误,但是发现把GPIOE->ODR相关的语句全部注释掉
如此
        GPIOE->CRL&=0X0FFFFFFF; 
        GPIOE->CRL|=0X30000000;//PE.7 推挽输出            
       //GPIOE->ODR|=1<<7;      //PE.7 输出高
                                                                                          
        GPIOE->CRH&=0XFFFFF000;
        GPIOE->CRH|=0X00000333;//PE.8-10推挽输出
        //GPIOE->ODR|=7;      //PE.8-10输出高 
试验效果一样。这是怎么回事,ODR的定义与否都没有问题么
其次,如果要定义ODR,那么应该这样写么 GPIOE->ODR|=15<<7 ?


实验1 跑马灯实验.rar

204.91 KB, 下载次数: 44

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-19 23:42:09 | 显示全部楼层
GPIOE->ODR|=7;      //PE.8-10输出高 
语法上没错误,只是你的注释有误,这里是是的PE0~2输出高。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-8-20 20:42:54 | 显示全部楼层
回复【楼主位】liyuanmrwhite:
---------------------------------
我尝试将GPIOE->ODR相关的两个语句注释掉,运行程序,板子还是可以运行,效果和加上ODR的效果是一样的。所以想请问一下,是不是ODR的存在与否都没有问题呢。
其次第二个问题,定义PE7-10是不是GPIOE->ODR|=15<<7 来定义呢,谢谢。
回复 支持 反对

使用道具 举报

38

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-8-20 20:43:20 | 显示全部楼层
回复【2楼】正点原子:

GPIOE->ODR|=7;      //PE.8-10输出高 
语法上没错误,只是你的注释有误,这里是是的PE0~2输出高。

---------------------------------
我尝试将GPIOE->ODR相关的两个语句注释掉,运行程序,板子还是可以运行,效果和加上ODR的效果是一样的。所以想请问一下,是不是ODR的存在与否都没有问题呢。 
其次第二个问题,定义PE7-10是不是GPIOE->ODR|=15<<7 来定义呢,谢谢。
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-4-7
在线时间
8 小时
发表于 2013-8-20 21:52:45 | 显示全部楼层
定义PE8-10应该是GPIO->ODR|=7<<8吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-20 22:26:44 | 显示全部楼层
回复【4楼】liyuanmrwhite:
---------------------------------
回复【5楼】a771069306:
---------------------------------
你这是设置输出,不是定义PE7~10。

跑马灯实验,你注释掉这句,是无关痛痒的,因为你在main函数里面还会对IO进行高地设置。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-8-21 12:33:13 | 显示全部楼层
回复【6楼】正点原子:

回复【4楼】liyuanmrwhite:
---------------------------------
回复【5楼】a771069306:
---------------------------------
你这是设置输出,不是定义PE7~10。
跑马灯实验,你注释掉这句,是无关痛痒的,因为你在main函数里面还会对IO进行高地设置。

---------------------------------
谢谢,定义PE7-10时这样写GPIOE->ODR|=15<<7有没有语法问题呢。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-21 15:52:04 | 显示全部楼层
回复【7楼】liyuanmrwhite:
---------------------------------
没问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 17:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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