stm32 在ucosiii采集AM2305传感器 数据上不来问题请教?

2019-12-18 18:48发布

stm32 在一个工程中 移植ucosiii 建立个任务采集AM2305温湿度传感器,可是数据一直没有采集上来
任务如下
static  void  AppTaskAM2305 ( void * p_arg )
{
          OS_ERR      err;
       while (DEF_TRUE) {  
         
                 OSSchedLock(&err);//进入临界区
              if( DHT11_Read_TempAndHumidity ( & DHT11_Data ) == SUCCESS)
                {
                 }

                 OSSchedUnlock(&err);        //退出临界区
               OSTimeDly ( 50, OS_OPT_TIME_DLY, & err );  
       }
   
}

温湿度采集中的延时使用原子delay函数, 时间延时是的时候禁止任务的切换和调度 所以这块应该没有问题
而且仿真的时候单歩调试,delay 也没有跑飞, 就是等待采集时候信号管脚始终采集不上来。
在裸机下相同的硬件 相同的采集程序 就没有问题,一直查找不到原因请教下各位?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
阿豪博士
1楼-- · 2019-12-18 20:03
是不是任务 没有启动起来啊?
jiangzhimin
2楼-- · 2019-12-19 01:28
阿豪博士 发表于 2018-9-19 13:28
是不是任务 没有启动起来啊?

启动了,我设置的断点,而且仿真一步一步的调试,但是就是读数据时候没有进入
jiangzhimin
3楼-- · 2019-12-19 06:35
AM2305                 程序参考野火的
uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef *DHT11_Data)
{  
        /*输出模式*/
        DHT11_Mode_Out_PP();
        /*主机拉低*/
        macDHT11_Dout_0;
        /*延时18ms*/
        Delay_ms(18);

        /*总线拉高 主机延时30us*/
        macDHT11_Dout_1;

        Delay_us(30);   //延时30us

        /*主机设为输入 判断从机响应信号*/
        DHT11_Mode_IPU();

        /*判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行*/   
        if(macDHT11_Dout_IN()==Bit_RESET)     

        {
                /*轮询直到从机发出 的80us 低电平 响应信号结束*/  
                while(macDHT11_Dout_IN()==Bit_RESET);

                /*轮询直到从机发出的 80us 高电平 标置信号结束*/
                while(macDHT11_Dout_IN()==Bit_SET);

                /*开始接收数据*/   
                DHT11_Data->humi_int= DHT11_ReadByte();

                DHT11_Data->humi_deci= DHT11_ReadByte();

                DHT11_Data->temp_int= DHT11_ReadByte();

                DHT11_Data->temp_deci= DHT11_ReadByte();

                DHT11_Data->check_sum= DHT11_ReadByte();


                /*读取结束,引脚改为输出模式*/
                DHT11_Mode_Out_PP();
                /*主机拉高*/
                macDHT11_Dout_1;

                /*检查读取的数据是否正确*/
                if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci)
                        return SUCCESS;
                else
                        return ERROR;
        }
       
        else
                return ERROR;
       
}
就是红 {MOD}部分读不到数

一周热门 更多>