OpenEdv-开源电子网

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

SPI 中u8 SPIx_ReadWriteByte(u8 TxData)的问题,搞两天了,求救啊

[复制链接]

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
发表于 2012-3-1 20:13:51 | 显示全部楼层 |阅读模式

我把原子的这个程序拆成了两个:

//SPIx 读写一个字节

//TxData:要写入的字节
//返回值:读取到的字节
u8 SPIx_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while((SPI1->SR&1<<1)==0)//等待发送区空
{
retry++;
if(retry>200)return 0;
}
SPI1->DR=TxData; //发送一个byte
retry=0;
while((SPI1->SR&1<<0)==0) //等待接收完一个byte
{
retry++;
if(retry>200)return 0;
}
return SPI1->DR; //返回收到的数据

}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

拆开成下面两个程序后就不能读出ID了,,!!!!!!!!!!!!!!!!请教啊

//作用:SPI读一个byte
u8 SPI_R_BYTE(void)
{
        u8 t=0;
        SPI1->DR=0XFF;
        while((SPI1->SR&(1<<0))==0) //等待接收完一个byte
        {
            t++;
            if(t>200)
            return 0;
        }
        return SPI1->DR;
}


//作用:SPI写一个byte
void SPI_WR_BYTE(u8 txdata)
 {
     u8 t=0;
    while((SPI1->SR&(1<<1))==0)//==0发送缓冲区非空
    {
        t++;
        if(t>200)
                return;
    }
    SPI1->DR=txdata;
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-1 22:13:04 | 显示全部楼层
SPI,收发本身就是一起的,你干嘛要拆了呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
 楼主| 发表于 2012-3-1 22:43:38 | 显示全部楼层
我写的时候就把他们拆开了,觉得可以分开,可结果却不行啊,请问为什么啊
柳暗花明
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-1 23:17:45 | 显示全部楼层
写之前先判断是否能写.
读之前先判断是否能读.
在read函数里面,最开始增加如下代码试试:
while((SPI1->SR&1<<1)==0)//等待发送区空 
{
retry++;
if(retry>200)return 0;

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
 楼主| 发表于 2012-3-2 11:46:29 | 显示全部楼层
原子哥不行啊
得到的ID号总是65535
柳暗花明
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-2 11:54:22 | 显示全部楼层
那你直接别拆开了吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
 楼主| 发表于 2012-3-2 20:39:45 | 显示全部楼层
不擦了,已经搞定了
柳暗花明
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-5-7
在线时间
1 小时
发表于 2014-6-26 12:36:01 | 显示全部楼层
是不是因为SPI 本身传输的时候就是 “上升沿发送、下降沿接收、高位先发送。”同一个时钟控制发送、接收,所以不能拆开
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2014-12-2
在线时间
1 小时
发表于 2015-2-5 22:42:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,为什么有retry的循环呢 ?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-5 23:21:47 | 显示全部楼层
回复【9楼】蚂蚁乱舞:
---------------------------------
防止死机。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-3-15
在线时间
0 小时
发表于 2015-3-18 21:35:50 | 显示全部楼层
回复【7楼】liucheng_34:
---------------------------------
请问是怎么搞定的?求指导!
回复 支持 反对

使用道具 举报

3

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-4-18
在线时间
8 小时
发表于 2015-11-18 15:50:03 | 显示全部楼层
回复【11楼】翻篇好:
---------------------------------
不拆开。收发一起
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 07:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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