找回密码
 立即注册
查看: 4963|回复: 9

STC8G1K08的串口

[复制链接]

11

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2023-3-9 16:39:01 | 显示全部楼层 |阅读模式
请教下,用STC-ISP6.91里的范例程序生成串口2的代码,波特率115200,在while里发送0x5a,用ISP下载/编程,

ISP下载/编程

ISP下载/编程

串口助手可以收到

下载/编程后收到数据

下载/编程后收到数据

但是将目标单片机设为仿真芯片,进入仿真状态,串口助手收不到数据了,也不能进入中断。
用论坛里下载的STC8G-STC8H-LIB-DEMO-CODE-20220509里的07-串口2中断模式与电脑收发测试进行测试,

论坛里的demo

论坛里的demo

切换端口为 UART2_SW_P10_P11;分别修改波特率为9600和115200测试,可以进入接收中断,也可以进入发送函数,

进入发送函数

进入发送函数

发送的数据

发送的数据

但是串口助手收不到数据,并且收到的数据不对,像是波特率不对。

收到数据不对

收到数据不对

怎么排查?或者哪里的操作不对?


程序里的设置


仿真收不到数据

仿真收不到数据

不能进中断

不能进中断

U口初始化

U口初始化

main函数

main函数

发送函数

发送函数

07-串口2中断模式与电脑收发测试.zip

269.93 KB, 下载次数: 150

STC8G_Uart2.zip

23.82 KB, 下载次数: 157

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2059

回帖

7077

积分

论坛元老

积分
7077
发表于 2023-3-9 17:15:43 | 显示全部楼层
库函数版本程序里面IO口初始化程序被你屏蔽了,STC8系列单片机除了P3.0,P3.1外其它IO口默认是高阻输入模式,不进行初始化是无法输出信号的。
1.png

串口切换到P1.0,P1.1后,至少需要对P1.1口进行初始化,比如设置为准双向模式。




寄存器版本的程序,从仿真界面看你应该使用了软件模拟仿真,而不是硬件仿真。请确认仿真设置,只有硬件仿真才能输出数据。

11

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2023-3-9 17:37:12 | 显示全部楼层
谢谢。修改程序,初始化p1.0,p1.1

void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                //½á¹¹¶¨Òå

        GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;                //Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7
        GPIO_InitStructure.Mode = GPIO_OUT_OD;//GPIO_PullUp;        //Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //³õʼ»¯
}
收到的数据不对,像波特率不对
12.png
串口助手收到的数据也不是发送的
13.png

07-串口2中断模式与电脑收发测试.rar

182.51 KB, 下载次数: 163

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2059

回帖

7077

积分

论坛元老

积分
7077
发表于 2023-3-9 18:20:42 | 显示全部楼层
jindi*** 发表于 2023-3-9 17:37
谢谢。修改程序,初始化p1.0,p1.1

void        GPIO_config(void)



我查了一下你的代码,发现串口2的发送函数被修改了,只要改回原来的 TX2_Buffer[COM2.TX_write] = dat; 就正常了。
1.png
  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2023-3-9 18:24:05 | 显示全部楼层

11

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2023-3-10 08:41:41 | 显示全部楼层
谢谢。调试的时候发现没发出数据,所以参照寄存器改的。再请教下,S2BUF = dat;在寄存器程序里可以,为嘛在库函数里不行了?

11

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2023-3-10 09:11:38 | 显示全部楼层
谢谢,uart2可以收发了。另再请教下,Uart3.hex烧入芯片后没有反应,我用的P1.6和P1.7做串口3,程序里要怎么设置?看程序里用的P0.0 P0.1,  或者P5.0 P5.1.

电路图

电路图

11

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2023-3-10 09:18:33 | 显示全部楼层
看了手册,STC8G只有串口1和2,应该用串口1测试

1.png
2.png
  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-06-17 08:53:27

25

主题

408

回帖

2533

积分

超级版主

积分
2533
发表于 2023-3-10 15:39:36 | 显示全部楼层
官网的串口助手也是非常好用的,可以测试看看
串口助手1.png
串口助手2.png
串口助手3.png
串口助手4.png

电话:0513-55012946 QQ:2195591714  微信:  19952583740
  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2059

回帖

7077

积分

论坛元老

积分
7077
发表于 2023-3-10 17:06:03 | 显示全部楼层
jindi*** 发表于 2023-3-10 08:41
谢谢。调试的时候发现没发出数据,所以参照寄存器改的。再请教下,S2BUF = dat;在寄存器程序里可以,为嘛在 ...

如果直接往S2BUF写入发送数据的话,需要等待发送完成后才能再写入第二个要发送的数据,不然没发完就写入新的数据就会把上一个数据覆盖掉。
库函数使用的是缓冲区队列的方法,将需要发送的数据先装入缓冲区里,然后在发送中断里一个个进行发送。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 14:04 , Processed in 0.127699 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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