天线|RF射频
直播中

蔡表胤

7年用户 154经验值
私信 关注
[问答]

NRF24L01发射数据后STATUS寄存器数值不正确

网上的教程说 发射数据成功后  STATUS数值 应该反馈 0x2E(46)

但是我发射成功后 有的时候反馈0x2F 有的时候反馈0x3E 偶尔反馈0x2E

这是什么情况

另外接收方 能接收(STATUS&0x40)有效 但是数值接收不正确


回帖(2)

张倩

2020-4-17 10:06:11
帮顶....
举报

王秀华

2020-4-17 10:19:35

原子哥 原子哥  我最近在写四轴飞行器

我的程序 启动4个电机后 程序就死了 完全不动需要重启



别人的程序 启动电机没问题



同样的板子(都是改变PWM 占空比) 这事什么问题嘞





void Motor_Init(void ){

        GPIO_InitTypeDef                 GPIO_InitStructure;                        //IO口配置参数

        TIM_TimeBaseInitTypeDef         TIM_TimeBaseInitStructure;        //定时器配置参数

        TIM_OCInitTypeDef                 TIM_OCInitStructure;                //

       

       

        //使能时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); 

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

       

        //设置电机使用到得管脚

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ; 

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 

        GPIO_Init(GPIOA, &GPIO_InitStructure);

       

        TIM_TimeBaseInitStructure.TIM_Period = eriod_Max;

        TIM_TimeBaseInitStructure.TIM_Prescaler = 2;

        TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;

        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

       

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

       

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

        TIM_OCInitStructure.TIM_Pulse = 0;

        TIM_OC1Init(TIM2,&TIM_OCInitStructure);

        TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);

       

       

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

        TIM_OCInitStructure.TIM_Pulse = 0;

        TIM_OC2Init(TIM2,&TIM_OCInitStructure);

        TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);

       

       

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

        TIM_OCInitStructure.TIM_Pulse = 0;

        TIM_OC3Init(TIM2,&TIM_OCInitStructure);

        TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

       

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

        TIM_OCInitStructure.TIM_Pulse = 0;

        TIM_OC4Init(TIM2,&TIM_OCInitStructure);

        TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);

       

        TIM_ARRPreloadConfig(TIM2, ENABLE);

        TIM_Cmd(TIM2,ENABLE);

       

       

}





void Motor_Working(uint16_t DutyC1,uint16_t DutyC2,uint16_t DutyC3,uint16_t DutyC4){

        static uint16_t lastDuty1=0,lastDuty2=0,lastDuty3=0,lastDuty4=0;

        //DutyC1 = DutyC1>eriod_Max?Period_MaxutyC1;

        //DutyC2 = DutyC2>eriod_Max?Period_MaxutyC2;

        //DutyC3 = DutyC3>eriod_Max?Period_MaxutyC3;

        //DutyC4 = DutyC4>eriod_Max?Period_MaxutyC4;                //校正

       

       

        if(lastDuty1!=DutyC1){TIM2->CCR2 = DutyC1;lastDuty1=DutyC1;}

        if(lastDuty2!=DutyC2){TIM2->CCR1 = DutyC2;lastDuty2=DutyC2;}

        if(lastDuty3!=DutyC3){TIM2->CCR3 = DutyC3;lastDuty3=DutyC3;}

        if(lastDuty4!=DutyC4){TIM2->CCR4 = DutyC4;lastDuty4=DutyC4;}//更新占空比

}



这事程序
举报

更多回帖

发帖
×
20
完善资料,
赚取积分