初级会员

- 积分
- 169
- 金钱
- 169
- 注册时间
- 2017-8-23
- 在线时间
- 45 小时
|
1金钱
stm32F2通过spi驱动富士通MB85RS2MT,SPI正常,ID可读,但是不能写数据,这边原子论坛也有一个相似的帖子,但是我按照那个帖子的方法也弄不了!!!以下是代码:
void SPI_write_MB85RS2MT(uint8_t data,u16 address)
{
uint8_t addr_tempH, addr_tempL;
addr_tempH = (uint8_t)((address&0xff00)>>8); //获取高8位地址
addr_tempL = (uint8_t)(address&0x00ff); //获取低8位地址
MB_CS_L;
SPIx_ReadWriteByte(MB85RS2MT_WREN_INST); //写使能
MB_CS_H;
delayus(10);
MB_CS_L;
SPIx_ReadWriteByte(MB85RS2MT_WRITE_INST); //写存储器寄存器操作吗
SPIx_ReadWriteByte(addr_tempH); //写入高八位地址,高3位忽略
SPIx_ReadWriteByte(addr_tempL); //
SPIx_ReadWriteByte(data); //写入数据
MB_CS_H;
}
/*******************************************************************************
* @brief 读出特定地址空间的数据
*
* @param u16 address
* @return uint8_t
*******************************************************************************/
uint8_t SPI_read_MB85RS2MT(uint16_t address)
{
uint8_t dat, addr_tempH, addr_tempL;
addr_tempH = (uint8_t)((address&0xff00)>>8);
addr_tempL = (uint8_t)(address&0x00ff);
MB_CS_L;
SPIx_ReadWriteByte(MB85RS2MT_READ_INST); //读存储器寄存器操作码
SPIx_ReadWriteByte(addr_tempH);
SPIx_ReadWriteByte(addr_tempL);
dat=SPIx_ReadWriteByte(0xAA); //读取数据,0xAA给予读取数据所需的时钟
MB_CS_H;
return (dat);
}
uint8_t shuju=0;
uint8_t fram_process(void)
{
uint8_t i = 0, result = 0;
// MB_CS_L;
//
// id1[0]=SPIx_ReadWriteByte(0x9F); //读ID
// id1[1]=SPIx_ReadWriteByte(0);
// id1[2]=SPIx_ReadWriteByte(0);
// id1[3]=SPIx_ReadWriteByte(0);
// id1[4]=SPIx_ReadWriteByte(0);
// id1[5]=SPIx_ReadWriteByte(0);
//
// MB_CS_H;
MB_CS_L;
SPIx_ReadWriteByte(0x05); //读取状态寄存器
MB_CS_H;
MB_CS_L;
SPIx_ReadWriteByte(0x01); //设置状态寄存器
SPIx_ReadWriteByte( 0x80 );
MB_CS_H;
SPI_write_MB85RS2MT(0x05,10);
shuju=SPI_read_MB85RS2MT(10);
}
shuju这个变量永远都是0,而不是0x05,我怀疑是写数据操作不成功,但是为什么读出来由是0?不应该是0xff吗?写操作有问题在哪里???
还有,SPIx_ReadWriteByte( 0x80 );有何用意?手册里找不到这个意思?望用过的大神指教。。。。。
|
|