查看:
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#
已经确定是stm32本身的问题,就是不明白为什么PB0-7写入数据以后,再写PB8-15,PB0-7也变成了PB8-15一样的数据 反过来先写PB8-15,后写PB0-7也是一样。 重点是,同样的代码,有的时候好的,有的时候写低8bit或者高8bit,再写其他8bit,早前写的8位数据被改变了,怪事啊~~ |
|||
|
发表于2017-08-29 18:53:31
|
显示全部楼层
5#
是因为写sram并非原子操作,中间被中断去执行其他事情了,于是数据被改变了
|
|