你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
再请教下,将spi2Num改成全局变量后,可以打印出spi2Recive[]数组了,但结果全是0x3a05.我用示波器观察了波形,主设备发送过来的数据只有第一个是0x3a05.
修改后的程序:
串口输出结果:
spi2recive[0]: 3a05
spi2recive[1]: 3a05
spi2recive[2]: 3a05
spi2recive[3]: 3a05
spi2recive[4]: 3a05
spi2Num: 0
编辑,回复错帖子了。