查看: 3114  |  回复: 5
STM32 GPIO 问题求助

主题

回复
发表于2017-08-29 10:13:47 | 显示全部楼层
1# 电梯直达

在一个SRAM读写设备上,我将

PA0-PA7 设置为A0-A7

PB0-PB7 设置为A8-A15 

PB8-PB15 设置为D0-D7

PA8,PA9,PA10 设置为WR CS OE


#define SET_ADDRESS(_ADR) GPIOA->BSRR  = (u32)(0x00FF0000);	GPIOA->BSRR  = (u32)(((_ADR)>>0)&0x000000FF);\
GPIOB->BSRR  = (u32)(0x00FF0000);	GPIOB->BSRR  = (u32)(((_ADR)>>8)&0x000000FF)
 
#define DATA_READ(_VAR)   _VAR=(((GPIOB->IDR)&0xFF00)>>8)
#define DATA_WRITE(_VAL)  GPIOB->BSRR = (u32)(0xFF000000); GPIOB->BSRR = (u32)(((_VAL)<<8)&0x0000FF00)
当我顺序读取数据的时候,一切都正确,但是当我写入数据的时候,数据不知道写哪里去了。比如写入008 58,结果实际不知道写哪个地址去了,008读出来还是原来的数据


最奇怪的是,在keil调试模式写入数据,写入的数据又全部正确,比如写入 在008 写入 58,实际写入以后读取出来也是 008 变成58了



主题

回复
发表于2017-08-29 11:30:42   |  显示全部楼层
3#
发表于2017-08-29 10:47:49  2# 看看,这对你有用?我网上看到的。如果不行,那只能用逻辑分析仪来排查也是一个有效的办法。在访问外部的SRAM时:当访问字节...

已经确定是stm32本身的问题,就是不明白为什么PB0-7写入数据以后,再写PB8-15,PB0-7也变成了PB8-15一样的数据

反过来先写PB8-15,后写PB0-7也是一样。

重点是,同样的代码,有的时候好的,有的时候写低8bit或者高8bit,再写其他8bit,早前写的8位数据被改变了,怪事啊~~


主题

回复
发表于2017-08-29 18:53:31   |  显示全部楼层
5#
发表于2017-08-29 11:38:38  4# 几个板子都这样吗?我个人初步认为:硬件的布线、连线或软件问题,较大因素。
是因为写sram并非原子操作,中间被中断去执行其他事情了,于是数据被改变了

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部