浦江一水 发表于 2024-5-25 19:35:29

基于STC32G12K128实验箱V9.62_实验之USART2串口通信

本帖最后由 浦江一水 于 2024-5-26 12:41 编辑

基于STC32G12K128实验箱V9.62_实验之USART2串口通信



    本实验在《基于STC32G12K128实验箱V9.62_实验之数码管显示字符串》基础上,参照官方Demo实验11稍作改编,增加了USART2与PC机通讯实验。
有几点说明和实验体会:
    1,实验是有关USART2串口通讯的,根据实验箱硬件的实际条件,要学会如何将引脚切换到P4.6和P4.7引脚;
    2,实验箱的USART2是一个RS232电平的串口,与PC机串口通信,要理解和清楚通讯线的硬件连接。
      实验箱的USART2是DB9(母口),台式PC机的COM口是DB9(公口),硬件连接线需要一根直通线,即一头是公,另一头是母,2对2、3对3、5对5。(通常两头相同的三线制线是2与3交叉的。)
         现在笔记本都没有DB9接口,需要用USB转RS232的通讯线。
    3,实验内容之一是数码管显示模拟时钟走时,体现定时器中断动态扫描显示编程。
    4,实验内容之二是PC机与实验箱通信,返回来自PC机发送的字符串。
    5,在本实验中,学习使用库函数的方法,对官方库函数库消化理解整理积累,作为往后实战备用。
    6,利用USART2与PC机通信功能,将需要显示的信息,从串2输出,在PC机上显示,大大方便以后用实验箱在没有配显示屏的情况下,做各种实验。


主程序如下:
//********************************************************************************
// 名称: 实验8位数码管动态扫描显示 + USART2与PC机通信
// 基于: STC32G12K128 V9.62 实验箱
// 实验: STC32G工程创建/STC-USB-Link1D仿真器调试/GPIO基本输出控制/定时器x中断...
// 编程: 浦晓明(浦江一水) 2023-12-10
//********************************************************************************
#include "STC32G_SYS.H"
#include "STC32G_UART.H"
#include "LED8D.H"


/*************本地变量及函数声明    **************/
char S;                     //显示字符串缓存
unsigned char hour;      //时
unsigned char minute;//分
unsigned char second;//秒
/********************** RTC演示函数 ***********************/

void RTC(void)
{
if(++second >= 60)
{ second = 0;
    if(++minute >= 60)
    { minute = 0;
      if(++hour >= 24) hour = 0;
    }
}
sprintf(S,"%02d-%02d-%02d",hour,minute,second);//组织字符串
LED8D_Str(0,S);                                  //送显示段码缓存   
}
/******************** 主函数 **************************/
void main(void)
{ u16 i;
SYS_Init();   //系统初始化
UART2_Init(1,1,115200);//IO切换1,模式1,波特率115200

printf("STC32G UART2 Test Printf(x)...\r\n");      //测试printf()函数 经UART2发送一个字符串
UART2_SendStr("UART2_SendStr(x)...OK!\r\n");    //测试字符串发送函数:UART2_SendStr()...


LED8D_Init();         //8数码管初始化//并启动了定时器0
hour   = 11;            //时间初始化
minute = 59;
second = 58;
RTC();                     //模拟时钟运行...
//循环...
while(1)
{ if(SecOK)          //如果1s到达...
   { SecOK = 0;
   RTC();                  //时钟显示刷新
   }         
    if(RX2_Cnt > 0)                         //如果USART2有接收信息...   
    { for(i=0; i<RX2_Cnt; i++)         
      UART2_SendChar(RX2_Buf);    //返回接收的信息...
      RX2_Cnt=0;                            //接收计数清零....
    }                                              //接收到的数据原样返回
}
}



页: [1]
查看完整版本: 基于STC32G12K128实验箱V9.62_实验之USART2串口通信