ercircle 发表于 2025-5-15 11:29:42

小熊熊 发表于 2025-5-15 11:21
好像还是不行

还有你这个B_TX2_Busy 连个类型都没声明噢,居然可以编译通过我也服了。。。。
加了类型声明和volatile关键字汇编里没死循环了

ercircle 发表于 2025-5-15 11:42:12

小熊熊 发表于 2025-5-15 11:21
好像还是不行


不加类型声明,编译器默认是当16位数处理,不过也能执行下去



小熊熊 发表于 2025-5-15 11:52:36

ercircle 发表于 2025-5-15 11:42
不加类型声明,编译器默认是当16位数处理,不过也能执行下去

大哥你的也是AICUBE生成的吗 我的还是不行用串口波特率计算器里面的可以啊

小熊熊 发表于 2025-5-15 12:07:13

ercircle 发表于 2025-5-15 11:42
不加类型声明,编译器默认是当16位数处理,不过也能执行下去

谢谢大哥了

ercircle 发表于 2025-5-15 13:31:12

小熊熊 发表于 2025-5-15 11:52
大哥你的也是AICUBE生成的吗 我的还是不行用串口波特率计算器里面的可以啊 ...


是AiCube生成的,V6.95N支持打开AiCube工程了,可以对比下差异

小熊熊 发表于 2025-5-15 14:16:31

小熊熊 发表于 2025-5-15 11:52
大哥你的也是AICUBE生成的吗 我的还是不行用串口波特率计算器里面的可以啊 ...

大哥能发一个完整程序帮忙看看吗我看看有什么区别    我的也是那个版本我都弄了好几天了因为买了一个串口屏 想玩玩 直接玩自闭了

小熊熊 发表于 2025-5-15 14:17:22

小熊熊 发表于 2025-5-15 14:16
大哥能发一个完整程序帮忙看看吗我看看有什么区别    我的也是那个版本我都弄了好几天了因为买了一 ...

谢谢了刚刚没注意看   

小熊熊 发表于 2025-5-15 14:18:44

ercircle 发表于 2025-5-15 13:31
是AiCube生成的,V6.95N支持打开AiCube工程了,可以对比下差异

多谢大哥下班回去看看

小熊熊 发表于 2025-5-15 23:23:47

ercircle 发表于 2025-5-15 13:31
是AiCube生成的,V6.95N支持打开AiCube工程了,可以对比下差异

//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息
// 文件名称: uart.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-05-13) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"
#define u8 unsigned char
u8 Rec_Dat;                //接收缓冲区
u8 Rec_Num = 0;                //接收计数
volatile u8 B_TX2_Busy = 0;
BOOL fPrintfBusy;

//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
//<<AICUBE_USER_GLOBAL_DEFINE_END>>



////////////////////////////////////////
// 串口2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_ISR(void) interrupt UART2_VECTOR
{
    //<<AICUBE_USER_UART2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    if (UART2_CheckTxFlag())            //判断串口发送中断
    {
      UART2_ClearTxFlag();                 //清除串口发送中断标志
                  fPrintfBusy = 0;   
                B_TX2_Busy = 0;
    }

    if (UART2_CheckRxFlag())            //判断串口接收中断
    {
      UART2_ClearRxFlag();                 //清除串口接收中断标志
                Rec_Dat = S2BUF;
    }
    //<<AICUBE_USER_UART2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 串口2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_Init(void)
{
       
#ifdef BAUDRATE
#undef BAUDRATE
#endif
#define BAUDRATE      (9600)
#define T2_RELOAD       (65536 - (SYSCLK / BAUDRATE + 2) / 4)

    UART2_SwitchP4243();                //设置串口数据端口: RxD2 (P4.2), TxD2 (P4.3)

//UART2_Timer2BRT();                  //串口2固定选择定时器2作为波特率发生器
    TIMER2_TimerMode();               //设置定时器2为定时模式
    TIMER2_1TMode();                  //设置定时器2为1T模式
    TIMER2_SetPrescale(0);            //设置定时器2的8位预分频
    TIMER2_SetReload16(T2_RELOAD);      //设置定时器2的16位重载值
    TIMER2_Run();                     //定时器2开始运行

    UART2_EnableRx();                   //使能串口2接收数据
    UART2_Mode1();                      //设置串口2为模式1 (8位数据可变波特率)
    UART2_SetIntPriority(0);            //设置中断为最低优先级
    UART2_EnableInt();        //使能串口2中断
          fPrintfBusy = 0;                  //清除发送数据忙标志
    Rec_Num = 0;
        B_TX2_Busy = 0;
    //<<AICUBE_USER_UART2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_UART2_INITIAL_END>>
}
char putchar (char dat)               //将串口2和printf函数绑定
{
    while (fPrintfBusy);
    UART2_SendData(dat);
    fPrintfBusy = 1;

    return dat;
}
void Uart2_SendStr( u8 *puts )                //串口数据发送函数
{
    for (; *puts != 0;puts++)   //遇到停止符0结束
    {
      S2BUF = *puts;
    B_TX2_Busy = 1;
    while(B_TX2_Busy);
    }       
}
void Usart2_RunTask(void)
{
        if( Rec_Num >= 6 )                //是否接收到了6位以上的数据
        {
                if(( Rec_Dat == 0x02 ) && ( Rec_Dat == 0x02 ) )        //末尾判断
                {
                        if( ( Rec_Dat == 0x05 ) && ( Rec_Dat == 0x04 ) && ( Rec_Dat == 0x03 ) && ( Rec_Dat == 0x01 ))
                        {
                                P40 = 0;
                                P00 = 0;
                                Uart2_SendStr( "打开成功!\r\n" );
                        }
                        else if( ( Rec_Dat == 0x01) && ( Rec_Dat == 0x02 ) && ( Rec_Dat == 0x03 ) && ( Rec_Dat == 0x04 ) && ( Rec_Dat == 0x05 ))
                        {
                                P40 = 1;
                                P00 = 1;
                                Uart2_SendStr( "关闭成功!\r\n" );
                        }
                        Rec_Num = 0;
                }
        }
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>

哈哈一样的代码 你的可以 我的就不行

ercircle 发表于 2025-5-16 08:24:20

小熊熊 发表于 2025-5-15 23:23


代码一样那就排查别的问题了,
哪一步不行,
之前用过串口没,线接对着没,
用的什么硬件,硬件好着没
串口软件用的哪个,发的报文是hex还是字符串。
等等,信息提供详细点。
再不行就是串口线上逻辑分析仪抓包呗。
页: 1 [2] 3 4
查看完整版本: 串口问题 我在AIcube里面创建了1个串口发现永不了大哥们看看