标题: STC8G1K08-SOP16单片机串口1通讯正常,串口2死活不出信号 [打印本页]

作者: JJJ2u    时间: 2023-12-12 00:33
标题: STC8G1K08-SOP16单片机串口1通讯正常,串口2死活不出信号
新手求助!使用STC8系列MCU,串口1 通讯正常!串口2死活不出信号,求助!
  1. #include "stc8g.h"
  2. #include "intrins.h"
  3. #include "stdio.h"

  4. void Uart2_Isr(void) interrupt 8
  5. {
  6.         if (S2CON & 0x02)        //检测串口2发送中断
  7.         {
  8.                 S2CON &= ~0x02;        //清除串口2发送中断请求位
  9.         }
  10.         if (S2CON & 0x01)        //检测串口2接收中断
  11.         {
  12.                 S2CON &= ~0x01;        //清除串口2接收中断请求位
  13.         }
  14. }

  15. void Uart2_Init(void)        //115200bps@22.1184MHz
  16. {
  17.         S2CON = 0x50;                //8位数据,可变波特率
  18.         AUXR &= 0xFB;                //定时器时钟12T模式
  19.         T2L = 0xFC;                        //设置定时初始值
  20.         T2H = 0xFF;                        //设置定时初始值
  21.         AUXR |= 0x10;                //定时器2开始计时
  22.         IE2 |= 0x01;                //使能串口2中断
  23. }




  24. void main()
  25. {
  26.     Uart2_Init();
  27.     ES = 1;
  28.     EA = 1;
  29.         while(1){
  30.                 printf("Uart Test !\r\n");
  31.         }
  32.    


  33. }
复制代码



作者: CQQ@123    时间: 2023-12-12 09:11
串口使能位为ES2
作者: STC新未来    时间: 2023-12-12 09:28
printf函数默认通过串口1输出,如果想通过串口2输出,需要改写putchar函数:
char putchar(char c)
{
        S2BUF  = c;
        while((S2CON & 2) == 0);
        S2CON &= ~2;    //Clear Tx flag
        return c;
}用上面写法需要将串口2中断关闭,或者删除中断函数里清除发送中断标志指令。

若楼主还有疑问可去STCAI官方咨询


作者: 老夫任我行    时间: 2023-12-12 09:44
寄存器有没有弄错?串口2的数据寄存器是S2BUF哦。另外配置串口2一般用S2CON=0x10
作者: JJJ2u    时间: 2023-12-12 10:54
老夫任我行 发表于 2023-12-12 09:44
寄存器有没有弄错?串口2的数据寄存器是S2BUF哦。另外配置串口2一般用S2CON=0x10

官方给出的示例寄存器是S2BUF哦!S2CON=0X50和0x10都试过了

作者: coody_sz    时间: 2023-12-12 11:30
不可以直接下载STC ISP返利程序里的例子测试吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1