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 也没有跑飞, 就是等待采集时候信号管脚始终采集不上来。
在裸机下相同的硬件 相同的采集程序 就没有问题,一直查找不到原因请教下各位?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
启动了,我设置的断点,而且仿真一步一步的调试,但是就是读数据时候没有进入
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}部分读不到数
一周热门 更多>