野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13465|回复: 3

加上定时器后DS18B20无法初始化的问题

[复制链接]
发表于 2017-5-4 14:36:02 | 显示全部楼层 |阅读模式
我们用两块32板子做一个消防控制系统,两块之间通过串口发送指令,一块负责发送,一块负责动作。现在问题出在发送的那块板子
连上一个烟感和一个DS18B20,打算先检测烟感,烟感触发后发送指令使电机启动和定时停止,之后跳出烟感扫描,进入18b20扫描,此时无法检测到18b20...求助

#include "stm32f10x.h"
#include "led.h"
#include "bsp_key.h"
#include "bsp_usart.h"
#include "bsp_TiMbase.h"
#include "bsp_ds18b20.h"
#include "bsp_SysTick.h"

volatile uint32_t time =0;

const float BAOJING = 32;

int main(void)
{

发送程序.rar

4.93 MB, 下载次数: 39

回复

使用道具 举报

 楼主| 发表于 2017-5-4 14:37:17 | 显示全部楼层
int main(void)
{
        uint8_t uc, ucDs18b20Id [ 8 ];
       
        SysTick_Init();
       
        LED_GPIO_config();
        MQ2_GPIO_config();
        USARTx_Config(); //初始化串口1
        BASIC_TIM_Init();

          
while(1)
        {  
                if(PCIN(4)==0) //扫描烟雾报警器状态,如果为低电平执行下列操作
                {       
               
                                        PBout(0)=1;
                                        PBout(5)=0;
                        if(time==10)
                        {
                         Usart_SendByte( macUSARTx, 1);                //烟感触发,串口发送指令1使电机运转
                        }
                                if(time==10000)      
                                {
                                                        Usart_SendByte( macUSARTx, 2);                //延时结束,发送指令2使电机停止
                                           break;  //跳出烟雾检测的循环
                                }
                        }
               
                else  
                {
                        PBout(0)=0;
                        PBout(5)=1;
                        time=0;
                }
        }
       
        //开始温度检测
        printf("\r\n 温度检测开始 \r\n");
       
        while( DS18B20_Init() )       
                printf("\r\n no ds18b20 exit \r\n");
       
        printf("\r\n ds18b20 exit \r\n");
       
       
        DS18B20_ReadId ( ucDs18b20Id  );           // 读取 DS18B20 的序列号
       
        printf("\r\nDS18B20的序列号是: 0x");

        for ( uc = 0; uc < 8; uc ++ )             // 打印 DS18B20 的序列号
         printf ( "%.2x", ucDs18b20Id [ uc ] );
       
        for(;;)
        {       
                printf ( "\r\n获取该序列号器件的温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) );                // 打印通过 DS18B20 序列号获取的温度值       
               
                Delay_ms(1000);                /* 1s 读取一次温度值 */
       
                if(DS18B20_GetTemp_MatchRom ( ucDs18b20Id )>=BAOJING)  //温度大于报警值时,发送指令3启动电机
                {       
                  time=0;
                        if(time==10)
                        {
                         Usart_SendByte( macUSARTx, 3);               
                        }
                                if(time==10000)                       //延时结束发送指令使电机停止
                                {
                                                        Usart_SendByte( macUSARTx, 4);               
              break;
                                }
                        }
                }

}
回复 支持 反对

使用道具 举报

发表于 2017-5-4 16:03:19 | 显示全部楼层
检查下是不是卡死在一些中断函数里了,用硬件调试的方式debug
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-5-4 17:20:25 | 显示全部楼层
随风 发表于 2017-5-4 16:03
检查下是不是卡死在一些中断函数里了,用硬件调试的方式debug

感谢,已经改好了,确实是中断程序出了问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 04:55 , Processed in 0.038813 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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