找回密码
 立即注册
查看: 240|回复: 6

官方STC32飞控代码,初始化中的串口数据接收不到。

[复制链接]
  • TA的每日心情
    奋斗
    2024-1-16 12:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    31

    回帖

    151

    积分

    注册会员

    积分
    151
    发表于 2024-1-15 14:20:27 | 显示全部楼层 |阅读模式
    屏蔽前面的内容,只测试串口PrintString1("STC32G系列四轴飞控程序!\r\n");       
    根本接收不到数据,有测试过的没有,指点一下。

    截图202401151418213003.jpg



    void main(void)
    {
            u8 i=0x55;
            WTST = 0;

            //所有I/O口全设为准双向,弱上拉模式
            P0M0=0x00;        P0M1=0x00;
            P1M0=0x00;        P1M1=0x00;
            P2M0=0x00;        P2M1=0x00;
            P3M0=0x00;        P3M1=0x00;
            P4M0=0x00;        P4M1=0x00;
            P5M0=0x00;        P5M1=0x00;
            P6M0=0x00;        P6M1=0x00;
            P7M0=0x00;        P7M1=0x00;

    //        P_Light  = 0;
    //        P_BUZZER = 0;
    //        LightBuzzerSet();        //设置航灯控制IO、蜂鸣器控制IO为推挽输出

    //        PWMA_config();

    //        init_NRF24L01();//初始化无线模块
    //         ADC_Config();
    //        SetRX_Mode();

    //        while(i)
    //        {
    //                delay_ms(1);
    //                if(P_24L01_IRQ == 0)
    //                {
    //                        nRF24L01_RxPacket(RxBuf);
    //                        if((RxBuf[0]>0) && (MODBUS_CRC16(RxBuf,20)==0))        i = 0;        //增加CRC校验
    //                }
    //        }

    //        IAPRead();                //读取陀螺仪静差
    //        InitMPU6050();        //初始化MPU-6050
    //        delay_ms(100);

    //        RxBuf[1] = 128;
    //        RxBuf[2] = 128;
    //        RxBuf[3] = 128;
    //        RxBuf[4] = 0;
    //       
    //        PWMA_SR1 = 0;        //清除中断标志
    //        PWMA_SR2 = 0;        //清除中断标志
    //        PWMA_ISR_En|= 0x01;                // 使能更新中断
    //        PWMA_IER    = PWMA_ISR_En;        //设置允许通道1~4中断处理
            EA = 1;        //允许总中断
    //       
    //        SetBuzzer(5,1,1);

    //==============================================
            UART1_config();        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
            PrintString1("STC32G系列四轴飞控程序!\r\n");        //SUART1发送一个字符串
    //==============================================


    回复 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2024-1-15 15:04:19 | 显示全部楼层
    因为RF没有收到解锁信号,所以一直在等待解锁信号:
            while(i)
            {
                    delay_ms(1);
                    if(P_24L01_IRQ == 0)
                    {
                            nRF24L01_RxPacket(RxBuf);
                            if((RxBuf[0]>0) && (MODBUS_CRC16(RxBuf,20)==0))        i = 0;        //增加CRC校验
                    }
            }

    因此,还没有运行到串口初始化那里。
    解锁是为了安全的。没有解锁直接启动四轴是非常危险的。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-1-16 12:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    31

    回帖

    151

    积分

    注册会员

    积分
    151
     楼主| 发表于 2024-1-16 12:52:43 | 显示全部楼层
    梁工 发表于 2024-1-15 15:04
    因为RF没有收到解锁信号,所以一直在等待解锁信号:
            while(i)
            {

    我已经把这段代码屏蔽了,初始化的时候只留下了,串口的部分
    感谢梁工的回复,谢谢您
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 07:44
  • 签到天数: 155 天

    [LV.7]常住居民III

    12

    主题

    338

    回帖

    1054

    积分

    金牌会员

    积分
    1054
    发表于 2024-1-16 15:11:06 | 显示全部楼层
    串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口用到中断的要开对应的中断使能;
    一种串口初始化程序不行的,可以在STC-ISP的串口波特率计算里面多试几种;

    你这看不到主控型号、看不到串口初始化代码、看不到电路图、看不到硬件接线,不好猜原因
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-1-16 12:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    31

    回帖

    151

    积分

    注册会员

    积分
    151
     楼主| 发表于 3 天前 | 显示全部楼层
    梁工 发表于 2024-1-15 15:04
    因为RF没有收到解锁信号,所以一直在等待解锁信号:
            while(i)
            {

    那一段是在初始化里,而且是24L01之前
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-1-16 12:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    31

    回帖

    151

    积分

    注册会员

    积分
    151
     楼主| 发表于 3 天前 | 显示全部楼层
    wangxiangtan 发表于 2024-1-16 15:11
    串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口 ...

    这方面都尝试过了

    点评

    我重新看了下程序,我的程序中,为了串口监控几乎不占用CPU时间,所以我在主循环装载发送的,你要在前面就能发出,要增加几句,拷贝在后面。 main函数主循坏最后才将发送缓冲的内容发送出去: [attachimg]42381[/at  详情 回复 发表于 3 天前
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 3 天前 | 显示全部楼层
    电子芯 发表于 2024-4-26 14:14
    这方面都尝试过了

    我重新看了下程序,我的程序中,为了串口监控几乎不占用CPU时间,所以我在主循环装载发送的,你要在前面就能发出,要增加几句,拷贝在后面。

    main函数主循坏最后才将发送缓冲的内容发送出去:
    截图202404261607545374.jpg

    在下面的位置插入程序即可收到发送的数据:
    截图202404261609155175.jpg


    插入的程序拷贝如下:
            EA = 1;        //允许总中断



    //==============================================
            UART1_config();        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
            PrintString1("STC32G系列四轴飞控程序!\r\n");        //SUART1发送一个字符串
    //==============================================
            while(TX1_Read != TX1_Write) //有数据要发送
            {
                    if(!B_TX1_Busy)        //发送空闲
                    {
                            SBUF = TX1_Buffer[TX1_Read];
                            B_TX1_Busy = 1;
                            if(++TX1_Read >= TX1_LENGTH)        TX1_Read = 0;
                    }
            }


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 07:00 , Processed in 0.065806 second(s), 57 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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