野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13262|回复: 4

裸机读18b20可以,但是ucos读18b20不行。

[复制链接]
发表于 2017-3-4 13:51:19 | 显示全部楼层 |阅读模式
在一个ucos工程中,刚刚板级初始化之后,读18b20温度,串口打印是可以读到温度的,如下。
  1. void BSP_Init(void)
  2. {
  3.   
  4.   
  5.         USART1_Config();
  6.         printf("USART1初始化完毕\r\n");
  7.         USART2_Config();
  8.         printf("USART2初始化完毕\r\n");
  9.   LED_GPIO_Config();  
  10.         printf("LED初始化完毕\r\n");
  11.         NVIC_Configuration();
  12.         printf("NVIC初始化完毕\r\n");
  13.         TIM2_Configuration();
  14.         printf("Timer2初始化完毕\r\n");
  15.        
  16.         if(DS18B20_Init()==0)
  17.                 printf("DS18B20初始化完毕\r\n");
  18.         else
  19.                 printf("DS18B20初始化失败\r\n");

  20.         printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp());       
  21.         SysTick_init();
  22.        
  23. }
复制代码
之后启动ucos,OSStart(&err);  将printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp());        这句话放在某个任务中,打印出来的就一直是0。该任务如下
  1. void Task_LED1(void *p_arg)
  2. {
  3.         CPU_SR_ALLOC();
  4.   OS_ERR err;
  5.   (void)p_arg;                       

  6.   while (1)
  7.   {
  8.                 OS_CRITICAL_ENTER();//进入临界区                       
  9.     printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp());       
  10.                 OS_CRITICAL_EXIT();        //退出临界区         

  11.                 OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);

  12.   }
  13. }
复制代码
18b20驱动中,延时是采用定时器的,中断函数如下
  1. void TIM2_IRQHandler(void)
  2. {
  3.         if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
  4.         {               
  5.                 OSIntEnter();          //用于统计中断的嵌套层数,对嵌套层数+1
  6.                 Timer2_count++;
  7.                 TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);                   
  8.                 OSIntExit();           //对嵌套层数减1,在退出中断前启动任务调度

  9.         }                        
  10. }
复制代码
在没挂OS之前是可以正常打印出温度,但是挂完OS之后,打印放在任务中,就读到的是0.
回复

使用道具 举报

 楼主| 发表于 2017-3-4 13:51:47 | 显示全部楼层
ucos不太常用,大神请指点
回复 支持 反对

使用道具 举报

发表于 2017-3-4 13:55:03 | 显示全部楼层
18b20的延时要用精确的延时
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-4 13:57:53 | 显示全部楼层
flyleaf 发表于 2017-3-4 13:55
18b20的延时要用精确的延时

我在没启动OS之前是可以的,启动之后,把读取温度放在任务中就不行了。延时绝对是没问题的。
回复 支持 反对

使用道具 举报

发表于 2017-3-6 09:26:18 | 显示全部楼层
贴 你的代码看看,可能你的读写时序被其他任务打断了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 07:40 , Processed in 0.033016 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表