官方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发送一个字符串
//==============================================
因为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-15 15:04
因为RF没有收到解锁信号,所以一直在等待解锁信号:
while(i)
{
我已经把这段代码屏蔽了,初始化的时候只留下了,串口的部分
感谢梁工的回复,谢谢您 串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口用到中断的要开对应的中断使能;
一种串口初始化程序不行的,可以在STC-ISP的串口波特率计算里面多试几种;
你这看不到主控型号、看不到串口初始化代码、看不到电路图、看不到硬件接线,不好猜原因 梁工 发表于 2024-1-15 15:04
因为RF没有收到解锁信号,所以一直在等待解锁信号:
while(i)
{
那一段是在初始化里,而且是24L01之前 wangxiangtan 发表于 2024-1-16 15:11
串口通讯:程序中的频率、波特率设置要和实际的单片机的一致;单片机的波特率要和上位机的波特率一致;串口 ...
这方面都尝试过了 电子芯 发表于 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]