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();
}
以下是打印的数据:
延时问题通过rebuild all解决了~启用硬件中断造成AD数据混乱还是没能解决,,, 结贴!! 问题并不是延迟~~而在于SPI2的时钟频率,,, Tobey_YF 发表于 2016-8-16 13:50
结贴!! 问题并不是延迟~~而在于SPI2的时钟频率,,,
感谢问题及时处理~
页:
[1]