毕设测试问题记录1-LCD初始化了但是不工作、初始化顺序、两个单片机用485通信异常、串口标志位TXE和TC

1、首先是上一个文章提到的问题。
(传送门:https://blog.csdn.net/qq_45563820/article/details/124344360?spm=1001.2014.3001.5501)
为什么加上uart-init这个函数lcd就能工作了呢?
因为在正点原子的LCD初始化程序里LCD初始化程序里用了printf语句,如图所示:
在这里插入图片描述
但是一般我们会认为,如果我们不用串口那么就不用将串口初始化,但是在这里是不行的,因为LCD初始化里包含了printf所以必须初始化串口1 ,并且这个操作要放在LCD_init前面。或者去掉初始化里printf这一句。
2、第二个问题是,进不去中断。中断有问题(这里只讲造成我的失败的原因)有可能是因为这里是因为初始化顺序的问题。
将中断初始化放在LCD前面就可以解决这个问题了。
在这里插入图片描述
至于为什么我也还没有搞明白,可能是LCD里有些东西影响了中断,因为原子的LCD初始化程序内容很多,我们其实是不太清楚他到底用了哪些东西的,所以很容易出问题。类似因为初始化顺序造成的问题可参考一下文章:
https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=622385
【总结】
在要用LCD时一定要顺带初始化串口;
初始化的时候,尽量把LCD放在后面;
调试时候,尽量避免用LCD,能不用就不用,很容易出bug,然后又找不到问题。

3、以上问题解决后,我发现我的程序还是不能让两个单片机顺利通信,后面发现,是因为在正点原子的精英板上需要将485的接口用跳线帽将A2 A3和485的R\T接起来,因为我第二个板子是借的学弟的,所以就默认板子接好了,忽视了这个问题。
4、还有一点就是485发送接收虽然是依靠串口,但是不能忽略它还有接收发送使能端。接受收端低有效,发送端高有效。只有按规定使能,A\B线上的信号才和接收发送端R\D的信号相关,不然就是高阻态没法通信。具体参考下面的真值表:在这里插入图片描述在这里插入图片描述
在这里插入图片描述
所以在send-byte前后一定注意使能。
在这里插入图片描述
为了节省端口,也可以把两个使能端接到一起。如下图:

在这里插入图片描述
【总结】
不要因为写软件而忽视了硬件问题。后期也要注意485电路中的上下拉电阻和终端匹配电阻的选择使用。
5、第五个问题就是两个单片机通信时,主机用按键直接发送固定指令进行测试,但是第一次按下总是没法通信,第二次之后都能顺利通信,很奇怪。而且用串口看主机发送数据,每一次的数据都是一样的,但是用示波器就会发现,第一次的数据是缺失的,缺了一部分信号。不知道为什么。然后我再在main函数里加上了一句标志位清零,或者是正式发送数据前提前发送一个字节的数据,就可以解决这个问题。但是我目前还不知道是为什么。搞懂了再更新。在这里插入图片描述
--------------------------------------------------------------------、
更新:
针对问题5更新、
先发送一个字节或者是先清零TC标志位可以参考以下两个文章

https://blog.csdn.net/zyboy2000/article/details/7566647?spm=1001.2014.3001.5506

https://blog.csdn.net/Mr__Song/article/details/105799846?spm=1001.2014.3001.5506
关于TXE和TC这两个重要标志位可以参考stm32中文参考手册或如下链接:
https://blog.csdn.net/buhuidage/article/details/117171693?ops_request_misc=&request_id=&biz_id=102&utm_term=stm32%E4%B8%B2%E5%8F%A3TC%E6%A0%87%E5%BF%97%E4%BD%8D&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-117171693.142v9pc_search_result_control_group,157v4control&spm=1018.2226.3001.4187

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值