完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在学习江科大的stm32课程编码器正转反转时,出现如下问题,编码器源代码如附件。*附件:Encoder.rar 主函数代码如下: int16_t Num; //定义待被旋转编码器调节的变量 int main(void) while (1) OLED_ShowSignedNum(1, 5, Num, 5); //显示Num } 其中Num += Encoder_Get(); 修改为Num = Encoder_Get();则实现不了编码器正反转OLED显示数值增减的现象。一直找不到问题出在哪里? 另外如果编码器模块里的状态获取函数更改为: int16_t Encoder_Get(void) 然后主函数更改为: while (1) 另外还有一个问题:keil软件Debug时,如何查看中间变量值?比如Temp,我想通过watch窗口查看,显示非法数据,有什么方法可以看到中间变量值么? |
|
相关推荐
2 条评论
1个回答
|
|
int16_t Encoder_Get(void)
{ /*使用Temp变量作为中继,目的是返回Encoder_Count后将其清零*/ /*在这里,也可以直接返回Encoder_Count 但这样就不是获取增量值的操作方法了 也可以实现功能,只是思路不一样*/ int16_t Temp; Temp = Encoder_Count; Encoder_Count = 0; return Temp; } 经过我多方排查,终于找到问题点了,出问题的地方就是这个获取增量值函数里面:Encoder_Count = 0;这句代码,加上这句,Return回去的值一直是0,不是需要的增量值,Temp一开始是增量值,等到执行该句代码后,Temp也变为常量0了,所以导致值一直是0,将该句代码注释掉后,一切显示正常。 也终于理解UP主为啥采用Num += Encoder_Get(); 的方式。 但是为啥执行那句代码后,Temp也变常量0了呢?不是应该Encoder_Count清零之前的值么? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 18:43 , Processed in 0.565582 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号