你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
技术帖
话题
资源
创客秀
视频
标签
积分商城
每日签到
spi做从设备时,接受处理程序,只能处理第一个字节...
[复制链接]
any012
提问时间:2016-5-18 11:53 /
悬赏
3
ST金币
已解决
本帖最后由 any012 于 2016-5-18 11:57 编辑
主设备连续发送4个16位的数据,第一个是0x3a05,于是想用这个数据来作为帧首判断,结果想在SPI中断里将串口接收到的数组发送出来,总是不成功。
于是精简了下函数,只发送spi2Num这个数,结果总是1...
void SPI2_IRQHandler(void)
{
u8 spi2Num, i;
u16 spi2Temp;
spi2Temp = SPI_I2S_ReceiveData(SPI2);
if(spi2Num == 0)
{
if(spi2Temp == 0x3a05)
{
spi2Num = 1;
}
}
else
{
spi2Num++;
if(spi2Num > 5)
spi2Num = 0;
}
printf("\r\nspi2Num: %d", spi2Num);
}
复制代码
最佳答案
sting
查看完整内容
spi2num又没定义成static,所以每次进入SPI2_IRQHandler,spi2num就从0开始
赞
0
收藏
0
评论
9
分享
发布时间:2016-5-18 11:53
举报
请先
登录
后回复
9个回答
sting
回答时间:2016-5-18 11:53:38
a1024a.1 32b0c
spi2num又没定义成static,所以每次进入SPI2_IRQHandler,spi2num就从0开始
赞
0
评论
回复
power568
回答时间:2016-5-18 13:41:09
a1024a.1 32b0c
支持楼上的,能出来一已经算幸运了...
赞
0
评论
回复
any012
回答时间:2016-5-18 14:12:20
a1024a.1 32b0c
感谢楼上两位,我真该挨敲。
赞
0
评论
回复
any012
回答时间:2016-5-18 14:26:22
a1024a.1 32b0c
本帖最后由 any012 于 2016-5-18 14:31 编辑
再请教下,将spi2Num改成全局变量后,可以打印出spi2Recive[]数组了,但结果全是0x3a05.我用示波器观察了波形,主设备发送过来的数据只有第一个是0x3a05.
修改后的程序:
void SPI2_IRQHandler(void)
{
static u16 spi2Recive[5];
static u8 spi2Num;
u8 i;
u16 spi2Temp;
spi2Temp = SPI_I2S_ReceiveData(SPI2);
if(spi2Num == 0)
{
if(spi2Temp == 0x3a05)
{
spi2Num = 1;
spi2Recive[0] = spi2Temp;
// SPI_I2S_SendData(SPI2, spi2Temp);
// printf("\r\nthe first data is: %x", spi2Temp);
}
}
else
{
spi2Recive[spi2Num] = spi2Temp;
spi2Num++;
if(spi2Num > 5)
{
spi2Num = 0;
for(i = 0; i < 5; i++)
printf("\r\nspi2recive[%d]: %x", i, spi2Recive[i]);
// SPI_I2S_SendData(SPI2, 0x3a05);
}
}
// printf("\r\nspirecive: %x", spi2Temp);
printf("\r\nspi2Num: %d", spi2Num);
}
复制代码
串口输出结果:
spi2recive[0]: 3a05
spi2recive[1]: 3a05
spi2recive[2]: 3a05
spi2recive[3]: 3a05
spi2recive[4]: 3a05
spi2Num: 0
赞
0
评论
回复
any012
回答时间:2016-5-18 14:33:51
a1024a.1 32b0c
感觉SPI中断函数只能处理第一个16位数据。
赞
0
评论
回复
any012
回答时间:2016-5-18 14:46:58
a1024a.1 32b0c
是不是中断函数做的事太多了,除了帧首,其他的数据SPI中断没有响应过来?
赞
0
评论
回复
sting
回答时间:2016-5-19 11:21:50
a1024a.1 32b0c
可能发生OVR
赞
0
评论
回复
any012
回答时间:2016-5-19 11:41:55
a1024a.1 32b0c
将SPI中断处理函数精简后正常了。
赞
0
评论
回复
any012
回答时间:2016-5-19 14:03:18
a1024a.1 32b0c
本帖最后由 any012 于 2016-5-19 14:04 编辑
编辑,回复错帖子了。
赞
0
评论
回复
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
再请教下,将spi2Num改成全局变量后,可以打印出spi2Recive[]数组了,但结果全是0x3a05.我用示波器观察了波形,主设备发送过来的数据只有第一个是0x3a05.
修改后的程序:
串口输出结果:
spi2recive[0]: 3a05
spi2recive[1]: 3a05
spi2recive[2]: 3a05
spi2recive[3]: 3a05
spi2recive[4]: 3a05
spi2Num: 0
编辑,回复错帖子了。