Tobey_YF 发表于 2016-8-14 21:54:59

stm32f103+RTX+ADS1248

   刚接触stm32~最近在裸奔情况下实现了基于stm32f103+ADS1248的ADC,将裸奔程序移植到RTX上后,将延迟修改为os_dly_wait()形式(原本是采用循环的形式),数据直接就不能用了,,,

    之后改回循环模式实现延迟,,,加上一个开关定时器的任务(用于实现开启电机),数据再一次崩了~~有时电机转的时候正常,当中断关闭(关闭电机)时,数据绝对出问题~~
网上找不到相关的资料~~恳请大神们赐教!!

延迟:
/**
* @brief延迟.
* @paramNone.
* @note   延迟时间度量
* @retval None
*/
void Delay(void)
{
//      os_dly_wait(3);                                                                                                                                                      // 延迟ms个滴答节拍
      uint16_t i,j;
      for(i=0;i<500;i++)
      {
               for(j=0;j<10;j++);
      };
}

ADC任务:
__task void adcTask (void) {
      ADS1248_Init(ADC_GAIN_16|ADC_SPS_20);             //初始化 AD1248
      int8_t chanel = 0;
for (;;) {
                int32_t Data;

                Data = ADS1248_Channel_Data(chanel);

                chanelDataArray = Data;
                chanel++;
                if(chanel==7)
                {
                        chanel=0;
                };      
                os_dly_wait(10);
}
}

电机任务:
__task void testTask (void) {
      BSP_STEP_MOTOR_Init();                        // 初始化电机引脚配置
for (;;) {
                if(STEP_MOTOR_Msg.Step > 0)
                {
                        tsk_lock(); //加了也没用~~
                        HAL_TIM_Base_Start_IT(&htim1);
                        tsk_unlock();
                }
                os_dly_wait(10);
}
}

初始化任务:
__task void initTask (void) {
      
//t_adc = os_tsk_create(adcTask,3);
      t_adc = os_tsk_create(adcTask,1);
      t_printf = os_tsk_create(printfTask,1);
      os_tsk_create(testTask,1);
      os_tsk_delete_self();
}

以下是打印的数据:







Tobey_YF 发表于 2016-8-15 20:03:58

延时问题通过rebuild all解决了~启用硬件中断造成AD数据混乱还是没能解决,,,

Tobey_YF 发表于 2016-8-16 13:50:50

结贴!! 问题并不是延迟~~而在于SPI2的时钟频率,,,

zero99 发表于 2016-8-17 08:47:37

Tobey_YF 发表于 2016-8-16 13:50
结贴!! 问题并不是延迟~~而在于SPI2的时钟频率,,,

感谢问题及时处理~
页: [1]
查看完整版本: stm32f103+RTX+ADS1248