电子芯 发表于 2024-1-15 14:20:27

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

屏蔽前面的内容,只测试串口PrintString1("STC32G系列四轴飞控程序!\r\n");       
根本接收不到数据,有测试过的没有,指点一下。





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) && (MODBUS_CRC16(RxBuf,20)==0))        i = 0;        //增加CRC校验
//                }
//        }

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

//        RxBuf = 128;
//        RxBuf = 128;
//        RxBuf = 128;
//        RxBuf = 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发送一个字符串
//==============================================


梁工 发表于 2024-1-15 15:04:19

因为RF没有收到解锁信号,所以一直在等待解锁信号:
        while(i)
        {
                delay_ms(1);
                if(P_24L01_IRQ == 0)
                {
                        nRF24L01_RxPacket(RxBuf);
                        if((RxBuf>0) && (MODBUS_CRC16(RxBuf,20)==0))        i = 0;        //增加CRC校验
                }
        }

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

电子芯 发表于 2024-1-16 12:52:43

梁工 发表于 2024-1-15 15:04
因为RF没有收到解锁信号,所以一直在等待解锁信号:
        while(i)
        {


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

wangxiangtan 发表于 2024-1-16 15:11:06

串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口用到中断的要开对应的中断使能;
一种串口初始化程序不行的,可以在STC-ISP的串口波特率计算里面多试几种;

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

电子芯 发表于 2024-4-26 14:13:40

梁工 发表于 2024-1-15 15:04
因为RF没有收到解锁信号,所以一直在等待解锁信号:
        while(i)
        {


那一段是在初始化里,而且是24L01之前

电子芯 发表于 2024-4-26 14:14:01

wangxiangtan 发表于 2024-1-16 15:11
串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口 ...

这方面都尝试过了

梁工 发表于 2024-4-26 16:09:47

电子芯 发表于 2024-4-26 14:14
这方面都尝试过了

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

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


在下面的位置插入程序即可收到发送的数据:



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



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


页: [1]
查看完整版本: 官方STC32飞控代码,初始化中的串口数据接收不到。