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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-10-01 12:44:17

17

主题

37

回帖

196

积分

注册会员

积分
196
发表于 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发送一个字符串
//==============================================


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 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校验
                }
        }

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-10-01 12:44:17

17

主题

37

回帖

196

积分

注册会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-02 07:32:37

21

主题

564

回帖

2678

积分

金牌会员

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-10-01 12:44:17

17

主题

37

回帖

196

积分

注册会员

积分
196
发表于 2024-4-26 14:13:40 | 显示全部楼层
梁*** 发表于 2024-1-15 15:04
因为RF没有收到解锁信号,所以一直在等待解锁信号:
        while(i)
        {

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-10-01 12:44:17

17

主题

37

回帖

196

积分

注册会员

积分
196
发表于 2024-4-26 14:14:01 | 显示全部楼层
wangxi*** 发表于 2024-1-16 15:11
串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口 ...

这方面都尝试过了

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-26 16:09:47 | 显示全部楼层
电*** 发表于 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, 2025-5-2 22:15 , Processed in 0.123814 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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