找回密码
 立即注册
查看: 2968|回复: 8

新手,第1次使用STC8H1K08跑官方串口demo的问题

[复制链接]

1

主题

2

回帖

9

积分

新手上路

积分
9
发表于 2024-2-23 10:28:59 | 显示全部楼层 |阅读模式
本帖最后由 qqqqliujin 于 2024-2-23 10:28 编辑

第1次正式使用stc的主控,有些技术问题,麻烦各位大佬看一下。

问题:可烧录程序,无法使用STC8H1K08的uart1跑通官方demo--06-串口1中断模式与电脑收发测试,demo中开机有个打印字符串,PC端也无法收到该字符串。
硬件连接:使用单片机的下载烧录口P3.0 P3.1和PC进行串口通讯,直接使用STC-USB Link1D 工具作为串口-usb转换工具,单片机连接至STC-USB Link1D的swdclk和swddat,相当于下载烧录口就是串口通讯口。
PC串口工具:使用STC-ISP的串口调试功能,打开STC-USB Link1D(CDC1)端口。同时也使用其它调试助手也测试过。
编译器:使用keil3,新建一个工程,将demo中的库文件直接复制过来的,编译没问题。
电路:未使用外部时钟。

怀疑:是否是时钟树未配置正确,导致波特率并未按照预期配置。我将config.h中的时钟配置修改为这样也不行:#define MAIN_Fosc                20000000L        //定义主时钟

主函数如下:

#include "config.h"
#include        "STC8G_H_GPIO.h"
#include        "STC8G_H_UART.h"
#include        "STC8G_H_Delay.h"
#include        "STC8G_H_NVIC.h"
#include        "STC8G_H_Switch.h"

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_PullUp;        //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
}

void UART_config(void)
{
        COMx_InitDefine                COMx_InitStructure;                                        //结构定义

        COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;                //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
        COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;                        //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
        COMx_InitStructure.UART_BaudRate  = 9600ul;                        //波特率, 一般 110 ~ 115200
        COMx_InitStructure.UART_RxEnable  = ENABLE;                                //接收允许,   ENABLE或DISABLE
        COMx_InitStructure.BaudRateDouble = DISABLE;                        //波特率加倍, ENABLE或DISABLE
        UART_Configuration(UART1, &COMx_InitStructure);                        //初始化串口1 UART1,UART2,UART3,UART4
        NVIC_UART1_Init(ENABLE,Priority_1);                                                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

        UART1_SW(UART1_SW_P30_P31);                                                                //UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
}


void main(void)
{
        u8 i;          

        EAXSFR();
        GPIO_config();
        UART_config();
        EA = 1;

        printf("STC8H8K64U UART1 Test Programme!\r\n");        //UART1发送一个字符串
//        PrintString1("STC8H8K64U UART1 Test Programme!\r\n");        //UART1发送一个字符串

        while (1)
        {
                delay_ms(100);
                printf("STC8H8K64U UART1 Test Programme!\r\n");
                if(COM1.RX_TimeOut > 0)                //超时计数
                {
                        if(--COM1.RX_TimeOut == 0)
                        {
                                if(COM1.RX_Cnt > 0)
                                {
                                        for(i=0; i<COM1.RX_Cnt; i++)        TX1_write2buff(RX1_Buffer);        //收到的数据原样返回
                                }
                                COM1.RX_Cnt = 0;
                        }
                }
        }
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-2-23 10:36:05 | 显示全部楼层
可烧录程序,无法使用STC8H1K08的uart1跑通官方demo--06-串口1中断模式与电脑收发测试,demo中开机有个打印字符串,PC端也无法收到该字符串。  -----这个无法接受到字符串是什么数据都没有呢?还是有数据,但是是乱码?(切换到hex模式下能否接受到奇奇怪怪的数据?)

情况1.如果能有乱码的数据,检查下你下载的时候主频选对没(这里的时钟要和程序里的#define MAIN_Fosc  后面的数值一致,不一致就会乱码)

截图202402231034139772.jpg

情况2:乱码的数据都没接受到的话检查下你的串口助手设置是不是有问题,串口是否打开,串口号是否选错等等








回复 支持 反对

使用道具 举报 送花

1

主题

2

回帖

9

积分

新手上路

积分
9
发表于 2024-2-23 10:49:27 | 显示全部楼层
电子DI*** 发表于 2024-2-23 10:36
可烧录程序,无法使用STC8H1K08的uart1跑通官方demo--06-串口1中断模式与电脑收发测试,demo中开机有个打印 ...

我用多个调试助手都测试过,一点数据都没有。我是单片机P3.0 P3.1直连swddat和swdclk,我选的是cdc1端口。

点评

[attachimg]35800[/attachimg] 选择这个时钟,直接点那个下载按钮试一下呢?  详情 回复 发表于 2024-2-23 10:55
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-2-23 10:55:22 | 显示全部楼层
qqqql*** 发表于 2024-2-23 10:49
我用多个调试助手都测试过,一点数据都没有。我是单片机P3.0 P3.1直连swddat和swdclk,我选的是cdc1端口 ...

截图202402231054541015.jpg

找到示例代码里的这个例子,选择这个时钟,直接点那个下载按钮试一下呢?
回复 支持 反对

使用道具 举报 送花

1

主题

2

回帖

9

积分

新手上路

积分
9
发表于 2024-2-23 11:02:52 | 显示全部楼层
电子DI*** 发表于 2024-2-23 10:55
找到示例代码里的这个例子,选择这个时钟,直接点那个下载按钮试一下呢?
...

用这个范例可以了,这是怎么回事

点评

你用库函数的实例代码是不是改过什么了,改坏了吗  详情 回复 发表于 2024-2-23 11:06
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-2-23 11:06:01 | 显示全部楼层
qqqql*** 发表于 2024-2-23 11:02
用这个范例可以了,这是怎么回事

你用库函数的实例代码是不是改过什么了,改坏了吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-2-23 11:59:58 | 显示全部楼层
qqqql*** 发表于 2024-2-23 11:02
用这个范例可以了,这是怎么回事

这说明物理连接包括Link1D 都没有问题,再检查代码吧(如果时钟频率有问题会接收到乱码)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-2-23 13:07:25 | 显示全部楼层
你可以把修改main文件中while(1)中语句为以下内容,测试是否可以收到"STC8H8K64U UART1 Test Programme!":

while (1)
        {
                delay_ms(1000);
                printf("STC8H8K64U UART1 Test Programme!\r\n");
         }

如果能接收到,说明串口参数配置正确,再修正串口接收原样返回功能:
1、改成1ms延迟:delay_ms(1)
2、下一句printf删除
3、for中的语句错了,RX1_Buffer要加
for(i=0; i<COM1.RX_Cnt; i++)        TX1_write2buff(RX1_Buffer);        //收到的数据原样返回
回复 支持 反对

使用道具 举报 送花

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-9-30 16:17:12 | 显示全部楼层
电子DI*** 发表于 2024-2-23 10:55
找到示例代码里的这个例子,选择这个时钟,直接点那个下载按钮试一下呢?
...

我这边也有这个问题,我的这个工具为什么找不到STC8H这个系列
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:37 , Processed in 0.118603 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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