串口ISPHUB制作

举报
tsinghuazhuoqing 发表于 2021/12/26 00:48:49 2021/12/26
【摘要】 ■ 前言 为了能够使得基于STC单片机所组成的功能块可以集成在一起完成实验,通过串口进行信息交换。 本文给出了一个一对四的串口通讯HUB设计,可以使用一个具有双UART端口的单片机与另外四个基于S...

■ 前言


为了能够使得基于STC单片机所组成的功能块可以集成在一起完成实验,通过串口进行信息交换。

本文给出了一个一对四的串口通讯HUB设计,可以使用一个具有双UART端口的单片机与另外四个基于STC的ISP端口的单片机进行信息交换。

 

01实验电路设计制作


1. AltumDesign 工程1

▲ 实验板的原理图

▲ 实验板的原理图

▲ 电路板的PCB图640

▲ 电路板的PCB图640

▲ 焊接后的电路板

▲ 焊接后的电路板

2. 管脚定义

  • 分支端口功能定义:
管脚 符号 功能
1 +5V 工作电源
2 TXD 连接MCU UART TXD
3 RXD 连接MCU UART RXD
  • 总端口功能定义:
管脚 符号 功能
1 +5V 工作电源
2 GND 底线
3 RXD0 连接MCU的TXD
4 TXD0 连接MCU的RXD
5 SEL1 通道选择1
6 SEL2 通道选择2

3.版本2:总线版本2

总线版本不用线选,所有的开发板都能够接收到命令。只有接收到正确命令的版本才返回信息。

▲ 总线版本原理图

▲ 总线版本原理图

▲ 总线版本的PCB

▲ 总线版本的PCB

▲ 焊接后的实验电路板

▲ 焊接后的实验电路板

 

02功能测试


1.设计测试功能的STC8G1K083

▲ 测试电路的原理图

▲ 测试电路的原理图

▲ 焊接之后PCB

▲ 焊接之后PCB

单片机的UART2组成对外测试端口:

管脚 符号 功能
1 +5V 工作电源
2 GND 底线
3 TXD2 连接MCU的TXD2
4 RXD2 连接MCU的RXD2

2.测试功能板的单片机软件4

  • 单片机时钟35MHz,ISPUART 波特率:460800;

○ 调试LS138的译码

在SEL1,SEL产生二进制方波,观察LS138的选通波形如下:

四路的LS138的选通波形都是一样的。

▲ LS138的选通波形

▲ LS138的选通波形

○ 串口波形发送

▲ 在四个端口可以测量得到与MCU发送相同的波形

▲ 在四个端口可以测量得到与MCU发送相同的波形

3.测量两个功能板

○ 功能板定义

测试功能板为 HCTL-2020正交码读写芯片 测试板。在它的SERIAL服务程序中增加命令:

} else IFARG0("sampleb") {
    nNumber = HCTL2020Read();
    SendChar((unsigned char)(nNumber >> 8));
    SendChar((unsigned char)nNumber);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

发送命令“sampleb”,则获得两个字节的数据。

▲ 测试两块正交角度编码器模块

▲ 测试两块正交角度编码器模块

○ 修改main程序

在通常情况下,处理串口的消息都是在void main(void)中,每1ms处理接收到字符。这样处理完命令所需要的时间就与命令的长度相同。为了提高处理命令的速度,需要对程序处理串口命令做如下调整:

  • 提高main的loop频率

将main程序中的 WaitTime(1),去掉。

    for(;;) {
        if(++nCount & 0x8000) ON(LED);        
        else OFF(LED);
//        WaitTime(1);
        //----------------------------------------------------------------------
        if(++nShowCount >= 500) {
            nShowCount = 0;
        }
        //----------------------------------------------------------------------
#if SERIALTXT_EN
        ConsoleDebug();
#endif //  SERIALTXT_NE
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 在ConsoleDebug() 处理完所有接收到的命令
void ConsoleDebug(void) {
#if UART1_EN
    unsigned char ucChar;
//    if(!UART1_CANRECE)	return;
    while(UART1_CANRECE) {
        ReceChar(&ucChar);
        SDPC(ucChar);
    }
#endif //
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

 

※ 结论


注意:在使用轮训的时候,需要将主程序能够及时响应命令,加快命令处理循环。
▲ 实验平台测量过程

▲ 实验平台测量过程


  1. AD工程文件:AD\Test\2020\Tools\ISPHUB.PcbDoc * ↩︎

  2. 总线版本的AD工程文件:AD\Test\2020\Tools\ISPHUBALL.SchDoc ↩︎

  3. 测试AD工程文件:AD\Test\2020\Tools\TestISPHUBSTC8G.SchDoc * ↩︎

  4. 测试功能版STC8G1K08的C51程序:C51\STC\Test\2020\Tools\TestISPHUBSTC8G\TestISPHUBSTC8G.uvproj ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107178714

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。