OpenEdv-开源电子网

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

一个很简单,但是很诡异的问题啊,困扰。。

[复制链接]

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
发表于 2013-7-18 21:27:57 | 显示全部楼层 |阅读模式
怪现象:

GPIO E口,0~7脚给LCD1602做驱动用、8~13做状态量读入用,14、15脚做普通GPIO使用。

可是我在程序里 GPIOE 14和 GPIOE15脚 置高电平不管用啊,置高了,量一下还是低。

这还不是最奇葩的,我在程序里单步调试,置高(在大循环外实现)过后,确实变高了,然后我 在大循环里设置一个断点在程序中间,点运行一次就运行一个循环

这样点的话,量一下GPIOE14、15都是高的。但是把断点去掉,一点运行,马上就拉低了。。我的天。。!!!


GPIO_InitStructure.GPIO_Pin = LCD_DB0 | LCD_DB1 | LCD_DB2 | LCD_DB3 | LCD_DB4 | LCD_DB5 | LCD_DB6 | LCD_DB7 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(LCD_DB_PORT, &GPIO_InitStructure);

        SetBits(GPIOE,GPIO_Pin_15|GPIO_Pin_14)

都是在大循_环外面的

我还全局搜索了,其余程序各处均为提到GPIO_Pin_15和GPIO_Pin_14啊。。。







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

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-18 21:29:05 | 显示全部楼层
1、GPIOE和别的端口有什么不同吗?特殊的?
2、会是驱动能力不够吗?那为什么单步调试,还是可以高的呢?

我用这个GPIO驱动的是一个,TI的模拟开关

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-18 22:12:13 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
咋看捏。。调试状态?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-18 22:15:18 | 显示全部楼层
回复【4楼】cooljuicy:
---------------------------------
我们的教程就有教你如何仿真的时候查看寄存器状态的啊...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-18 23:44:05 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
GPIOE->ODR = 0xCF;
这样的赋值,会误伤 8~15管脚的值么。。
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-19 00:01:39 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;
}

这个ResetBits库函数 里 GPIOx->BRR=GPIO_Pin,是不是把其他所有Pin都误伤了啊?
貌似不是位操作啊,是直接把整个端口的值赋过去了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1816
金钱
1816
注册时间
2011-10-9
在线时间
230 小时
发表于 2013-7-19 08:39:26 | 显示全部楼层
回复【5楼】正点原子: 
--------------------------------- 
GPIOE->ODR = 0xCF; 
这样的赋值,会误伤 8~15管脚的值么。。






GPIOE->ODR = 0xCF;     等于  GPIOE->ODR = 0x00CF; 

8-15脚是低电平







回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-19 09:40:51 | 显示全部楼层
回复【9楼】simms01:
---------------------------------
经过苦思冥想 终于发现原因了。。

ODR的问题。。现在下载程序去
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-7-19 09:47:49 | 显示全部楼层
回复【9楼】simms01:
---------------------------------
那我要是想 控制16个口中的 低八个口,应该怎么控制呢?
用SetBits(GPIOE,Command)是不是可以ia
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1816
金钱
1816
注册时间
2011-10-9
在线时间
230 小时
发表于 2013-7-19 09:57:55 | 显示全部楼层



GPIOE->ODR|=0x00cf?


回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-17 05:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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