OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5618|回复: 4

ds18B20换了一个IO口原来原子哥的程序就不管用了(要改的配置都改了)

[复制链接]

12

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-4-11
在线时间
0 小时
发表于 2014-8-13 19:27:19 | 显示全部楼层 |阅读模式
5金钱
ds18B20换了一个IO口原来原子哥的程序就不管用了(要改的配置都改了)
这是为什么???
头文件里把PA0改成了PA1
//IO·??ò?è??
#define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<1;}
#define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<1;}
////IO??×÷????                                               
#define    DS18B20_DQ_OUT PAout(1) //????????    A0
#define    DS18B20_DQ_IN  PAin(1)  //????????    A0

.c文件里也改了 
u8 DS18B20_Init(void)
{
    RCC->APB2ENR|=1<<2;    //????PORTA???±??
    GPIOA->CRL&=0XFFFFFF0F;//PORTA.0 ???ì????
    GPIOA->CRL|=0X00000030;
    GPIOA->ODR|=1<<1;      //????1
    DS18B20_Rst();
    return DS18B20_Check();



其他都没改为什么不行啊;
#include "ds18b20.h"
#include "delay.h"    
#include "usart.h"    
//////////////////////////////////////////////////////////////////////////////////    
//±????ò???©?§?°??????????×÷???í???????????????ü????????
//Mini STM32??·?°?
//DS18B20 ?????ú??           
//??????×?@ALIENTEK
//????????:www.openedv.com
//????????:2010/6/17
//°?±???V1.0
//°??¨?ù??????°?±?????
//Copyright(C) ??????×? 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////    
 

//????DS18B20
void DS18B20_Rst(void)       
{                 
    DS18B20_IO_OUT(); //SET PA0 OUTPUT
    DS18B20_DQ_OUT=0; //????DQ
    delay_us(750);    //????750us
    DS18B20_DQ_OUT=1; //DQ=1
    delay_us(15);     //15US
}
//????DS18B20??????
//·???1:???ì????DS18B20??????
//·???0:????
u8 DS18B20_Check(void)        
{   
    u8 retry=0;
    DS18B20_IO_IN();//SET PA0 INPUT    
    while (DS18B20_DQ_IN&&retry<200)
    {
        retry++;
        delay_us(1);
    };    
    if(retry>=200)return 1;
    else retry=0;
    while (!DS18B20_DQ_IN&&retry<240)
    {
        retry++;
        delay_us(1);
    };
    if(retry>=240)return 1;        
    return 0;
}
//??DS18B20??????????
//·???????1/0
u8 DS18B20_Read_Bit(void)              // read one bit
{
    u8 data;
    DS18B20_IO_OUT();//SET PA0 OUTPUT
    DS18B20_DQ_OUT=0;
    delay_us(2);
    DS18B20_DQ_OUT=1;
    DS18B20_IO_IN();//SET PA0 INPUT
    delay_us(12);
    if(DS18B20_DQ_IN)data=1;
    else data=0;    
    delay_us(50);           
    return data;
}
//??DS18B20????????×???
//·?????????????????
u8 DS18B20_Read_Byte(void)    // read one byte
{        
    u8 i,j,dat;
    dat=0;
    for (i=1;i<=8;i++)
    {
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }                            
    return dat;
}
//??????×?????DS18B20
//dat??????????×???
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
    DS18B20_IO_OUT();//SET PA0 OUTPUT;
    for (j=1;j<=8;j++)
    {
        testb=dat&0x01;
        dat=dat>>1;
        if (testb)
        {
            DS18B20_DQ_OUT=0;// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else
        {
            DS18B20_DQ_OUT=0;// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}
//????????×???
void DS18B20_Start(void)// ds1820 start convert
{                                          
    DS18B20_Rst();       
    DS18B20_Check();    
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0x44);// convert
}
//??????DS18B20??IO?? DQ ???±?ì??DS??????
//·???1:??????
//·???0:????        
u8 DS18B20_Init(void)
{
    RCC->APB2ENR|=1<<2;    //????PORTA???±??
    GPIOA->CRL&=0XFFFFFF0F;//PORTA.0 ???ì????
    GPIOA->CRL|=0X00000030;
    GPIOA->ODR|=1<<1;      //????1
    DS18B20_Rst();
    return DS18B20_Check();
}  
//??ds18b20??????????
//??????0.1C
//·????????????? ?¨-550~1250?©
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
    short tem;
    DS18B20_Start ();                    // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();    
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert        
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB  
//             printf("\nTH:%d\n",TH);
//         printf("\nTL:%d\n",TL);       
    if(TH>7)
    {
        TH=~TH;
        TL=~TL;
        temp=0;//????????  
    }else temp=1;//????????            
    tem=TH; //??????°???
    tem<<=8;    
    tem+=TL;//?????×°???
    tem=(float)tem*0.625;//×???     
    if(temp)return tem; //·?????????
    else return -tem;    
}


头文件
#ifndef __DS18B20_H
#define __DS18B20_H
#include "sys.h"   
//////////////////////////////////////////////////////////////////////////////////    
//±????ò???©?§?°??????????×÷???í???????????????ü????????
//Mini STM32??·?°?
//DS18B20 ?????ú??           
//??????×?@ALIENTEK
//????????:www.openedv.com
//????????:2010/6/17
//°?±???V1.0
//°??¨?ù??????°?±?????
//Copyright(C) ??????×? 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////    


//IO·??ò?è??
#define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<1;}
#define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<1;}
////IO??×÷????                                               
#define    DS18B20_DQ_OUT PAout(1) //????????    A0
#define    DS18B20_DQ_IN  PAin(1)  //????????    A0
       
u8 DS18B20_Init(void);//??????DS18B20
short DS18B20_Get_Temp(void);//????????
void DS18B20_Start(void);//????????×???
void DS18B20_Write_Byte(u8 dat);//????????×???
u8 DS18B20_Read_Byte(void);//????????×???
u8 DS18B20_Read_Bit(void);//??????????
u8 DS18B20_Check(void);//?ì????·?????DS18B20
void DS18B20_Rst(void);//????DS18B20    
#endif




最佳答案

查看完整内容[请看2#楼]

#define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<1;} #define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<1;} 改为: #define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<4;} #define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<4;}
成功
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-13 19:27:20 | 显示全部楼层
#define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<1;}
#define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<1;}
改为:
#define DS18B20_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<4;}
#define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<4;}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-8-13 20:46:42 | 显示全部楼层
DS18B20要外接上拉电阻的。你有没有在那个IO口上接上拉电阻
开往春天的手扶拖拉机
回复

使用道具 举报

12

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-4-11
在线时间
0 小时
 楼主| 发表于 2014-8-13 23:09:43 | 显示全部楼层
回复【3楼】正点原子回复【3楼】正点原子:
---------------------------------
的确如此,想通了
成功
回复

使用道具 举报

19

主题

234

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-8
在线时间
10 小时
发表于 2014-8-14 08:50:13 | 显示全部楼层
請問一下, 這個讀溫柔準嗎? 約莫多準?  需要校正嗎?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-3 22:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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