STC8G1K08的串口
请教下,用STC-ISP6.91里的范例程序生成串口2的代码,波特率115200,在while里发送0x5a,用ISP下载/编程,串口助手可以收到
但是将目标单片机设为仿真芯片,进入仿真状态,串口助手收不到数据了,也不能进入中断。
用论坛里下载的STC8G-STC8H-LIB-DEMO-CODE-20220509里的07-串口2中断模式与电脑收发测试进行测试,
切换端口为 UART2_SW_P10_P11;分别修改波特率为9600和115200测试,可以进入接收中断,也可以进入发送函数,
但是串口助手收不到数据,并且收到的数据不对,像是波特率不对。
怎么排查?或者哪里的操作不对?
程序里的设置
库函数版本程序里面IO口初始化程序被你屏蔽了,STC8系列单片机除了P3.0,P3.1外其它IO口默认是高阻输入模式,不进行初始化是无法输出信号的。
串口切换到P1.0,P1.1后,至少需要对P1.1口进行初始化,比如设置为准双向模式。
寄存器版本的程序,从仿真界面看你应该使用了软件模拟仿真,而不是硬件仿真。请确认仿真设置,只有硬件仿真才能输出数据。
https://www.stcaimcu.com/data/attachment/forum/202303/09/161941lr83uookuokpkedk.png
谢谢。修改程序,初始化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); //³õʼ»¯
}
收到的数据不对,像波特率不对
串口助手收到的数据也不是发送的
jindizhiwa 发表于 2023-3-9 17:37
谢谢。修改程序,初始化p1.0,p1.1
void GPIO_config(void)
我查了一下你的代码,发现串口2的发送函数被修改了,只要改回原来的 TX2_Buffer = dat; 就正常了。
用下面超级完善的测试程序测试
【新提醒】求STC8H/STC8G系列 4个串口同时通信的演示程序,Modbus 演示程序 - 串行口,DMA支持的4组串口 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
谢谢。调试的时候发现没发出数据,所以参照寄存器改的。再请教下,S2BUF = dat;在寄存器程序里可以,为嘛在库函数里不行了? 谢谢,uart2可以收发了。另再请教下,Uart3.hex烧入芯片后没有反应,我用的P1.6和P1.7做串口3,程序里要怎么设置?看程序里用的P0.0 P0.1,或者P5.0 P5.1. 看了手册,STC8G只有串口1和2,应该用串口1测试
官网的串口助手也是非常好用的,可以测试看看
jindizhiwa 发表于 2023-3-10 08:41
谢谢。调试的时候发现没发出数据,所以参照寄存器改的。再请教下,S2BUF = dat;在寄存器程序里可以,为嘛在 ...
如果直接往S2BUF写入发送数据的话,需要等待发送完成后才能再写入第二个要发送的数据,不然没发完就写入新的数据就会把上一个数据覆盖掉。
库函数使用的是缓冲区队列的方法,将需要发送的数据先装入缓冲区里,然后在发送中断里一个个进行发送。
页:
[1]