找回密码
 立即注册
查看: 655|回复: 10

AI8051U使用UART3和spi后无法发送数据(已解决)

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 21:55:11 | 显示全部楼层 |阅读模式

image.png

image.png

UART3利用的是timer3作为波特率发生器,并且口设置为p5.0 AND P5.1,只运行uart3初始化可以正常打印。
但是打开TFTinit或者MT6701init函数后,uart3只能打印一个问号。
下面为MT6701init函数,注释了spiconfig就可以正常打印。(其脚位并没有冲突)
image.png

image.png

请问这是为什么呢

image.png不正常状态

image.png正常状态

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 22:16:37 | 显示全部楼层

刚刚使用仿真工具,发现其卡在发送的while(B_TX3_Busy);

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 22:33:02 | 显示全部楼层

image.png
这个中断函数进不去,因此B_TX3_Busy进不去
刚刚把spiconfig的函数注释了,这个地方就进的去,很奇怪

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 22:44:20 | 显示全部楼层

求救,解决不了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:483
  • 最近打卡:2025-07-01 00:06:00
已绑定手机

81

主题

5235

回帖

9363

积分

超级版主

DebugLab

积分
9363
发表于 2024-12-7 22:45:10 | 显示全部楼层
B_TX3_Busy何时被置1了?
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 22:51:24 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=127748&ptid=12511][color=#999999]DebugLab 发表于 2024-12-7 22:45[/color][/url][/size] B_TX3_Busy何时被置1了?[/quote]

image.png
这只是历程中,设置标记中断的一个位,在发生数据后被置为1

点评

如果确定程序是停在“while (B_TX3_Busy);”这里 可以试着将PrintfString3函数中的 S3BUF = *puts;和B_TX3_Busy = 1;两个语句交换一下位置 改为 B_TX3_Busy = 1; S3BUF = *puts; 以防止B_TX3_Busy = 1;执行前,提前  详情 回复 发表于 2024-12-8 14:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 22:52:50 | 显示全部楼层
dem*** 发表于 2024-12-7 22:33
这个中断函数进不去,因此B_TX3_Busy进不去
刚刚把spiconfig的函数注释了,这个地方就进的去,很奇怪
...

这里是串口中断,当发送完就重新设置为0,就可以结束while进行下一步了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-7 23:15:48 | 显示全部楼层

求助,尚未解决

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-06-29 22:35:00

26

主题

1051

回帖

4040

积分

超级版主

积分
4040
发表于 2024-12-8 14:22:34 | 显示全部楼层
dem*** 发表于 2024-12-7 22:51
这只是历程中,设置标记中断的一个位,在发生数据后被置为1

如果确定程序是停在“while (B_TX3_Busy);”这里
可以试着将PrintfString3函数中的
S3BUF = *puts;和B_TX3_Busy = 1;两个语句交换一下位置
改为
B_TX3_Busy = 1;
S3BUF = *puts;

以防止B_TX3_Busy = 1;执行前,提前进入了串口3的中断
虽然可能性较小,但也不是不可能
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

184

积分

注册会员

积分
184
发表于 2024-12-8 14:47:02 | 显示全部楼层
zh*** 发表于 2024-12-8 14:22
如果确定程序是停在“while (B_TX3_Busy);”这里
可以试着将PrintfString3函数中的
S3BUF = *puts;和B_TX ...

修改了,没有用
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-1 10:00 , Processed in 0.132560 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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