OpenEdv-开源电子网

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

求助大神,原子ds18b20例程,为啥把PA0改成PC4就采不到温度了,大神帮我看看是不是配置出了问题

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
发表于 2018-4-3 09:39:40 | 显示全部楼层 |阅读模式
4金钱
大神们,看看这个配置有没有错,还有什么打法需要修改
QPPK9D1)R83E6KWDG}`@%V7.png
JP1DQ]%O}S2JVAGGA%T1FF1.png

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 09:39:41 | 显示全部楼层
回复

使用道具 举报

0

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2018-3-14
在线时间
19 小时
发表于 2018-4-3 09:48:01 | 显示全部楼层
本帖最后由 qinlicn 于 2018-4-3 09:51 编辑

你硬件连接了PC4吗?原版PA0的代码也贴一下吧。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 09:56:31 | 显示全部楼层
本帖最后由 菜鸟求学者 于 2018-4-3 09:58 编辑
qinlicn 发表于 2018-4-3 09:48
你硬件连接了PC4吗?原版PA0的代码也贴一下吧。

硬件连接了哦,PA0程序在楼下,就改了管脚配置,还有就是方向了
G$[$PTUF{T2EUZL4{F(~YON.png
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-4-3 13:25:55 | 显示全部楼层
再换到其他口看看,如果还不行就好好检查代码。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 14:42:01 | 显示全部楼层
HXYDJ 发表于 2018-4-3 13:25
再换到其他口看看,如果还不行就好好检查代码。

用PA的所有管脚都可以用,PC和PB就不行了,大神给解答一下
回复

使用道具 举报

0

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2018-3-14
在线时间
19 小时
发表于 2018-4-3 15:52:56 | 显示全部楼层
菜鸟求学者 发表于 2018-4-3 09:56
硬件连接了哦,PA0程序在楼下,就改了管脚配置,还有就是方向了

代码给齐全一些吧
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 16:23:10 | 显示全部楼层
qinlicn 发表于 2018-4-3 15:52
代码给齐全一些吧

就是原子的例程30
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 16:24:14 | 显示全部楼层
本帖最后由 菜鸟求学者 于 2018-4-3 16:27 编辑

#include "ds18b20.h"
#include "delay.h"        



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
}

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;
}


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;
}


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;
}


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
}

           
u8 DS18B20_Init(void)
{
         GPIO_InitTypeDef  GPIO_InitStructure;
         
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //ê1&#196;üPORTG&#191;úê±&#214;ó
        
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                //PORTG.11 í&#198;íìê&#228;3&#246;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOC, &GPIO_InitStructure);

         GPIO_SetBits(GPIOC,GPIO_Pin_4);    //ê&#228;3&#246;1

        DS18B20_Rst();

        return DS18B20_Check();
}  


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  
                     
    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;   
}


回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 16:24:34 | 显示全部楼层
菜鸟求学者 发表于 2018-4-3 16:24
#include "ds18b20.h"
#include "delay.h"       
/////////////////////////////////////////////////////// ...

这个是.c文件
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 16:25:53 | 显示全部楼层
菜鸟求学者 发表于 2018-4-3 16:24
#include "ds18b20.h"
#include "delay.h"       
/////////////////////////////////////////////////////// ...

#ifndef __DS18B20_H
#define __DS18B20_H
#include "sys.h"   



#define DS18B20_IO_IN()  {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=8<<16;}
#define DS18B20_IO_OUT() {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=3<<16;}
                                                                                  
#define        DS18B20_DQ_OUT PCout(4)
#define        DS18B20_DQ_IN  PCin(4)
          
u8 DS18B20_Init(void);
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);
void DS18B20_Rst(void);   
#endif
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-3
在线时间
4 小时
 楼主| 发表于 2018-4-3 16:26:10 | 显示全部楼层
菜鸟求学者 发表于 2018-4-3 16:25
#ifndef __DS18B20_H
#define __DS18B20_H
#include "sys.h"   

这是.h文件
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
发表于 2018-8-31 10:52:46 | 显示全部楼层

我和你出现了同样的问题,就是PA口的都可以,其他不可能,请问你解决了吗
回复

使用道具 举报

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2019-3-27
在线时间
21 小时
发表于 2019-4-2 22:44:55 | 显示全部楼层
我也遇到了同样的问题。求问最后怎么解决了
回复

使用道具 举报

4

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
471
金钱
471
注册时间
2019-4-12
在线时间
92 小时
发表于 2019-5-4 00:22:52 | 显示全部楼层
只有PA口有ADC通道
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-10-23
在线时间
11 小时
发表于 2019-11-14 01:01:21 来自手机 | 显示全部楼层
方小哥 发表于 2019-5-4 00:22
只有PA口有ADC通道

大佬,请问ds18b20不是数字信号?为什么要用有adc引脚才可以正常运行?
回复

使用道具 举报

3

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2019-5-17
在线时间
47 小时
发表于 2019-11-16 19:16:23 | 显示全部楼层
方小哥 发表于 2019-5-4 00:22
只有PA口有ADC通道

我寻思ds18b20也不需要adc 而且ADC的通道可不止PA口有
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-9-3
在线时间
3 小时
发表于 2020-3-31 15:00:40 | 显示全部楼层
请问怎么解决的,我碰到同样的问题
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-9-25
在线时间
21 小时
发表于 2020-4-6 15:48:25 | 显示全部楼层
想咨询为什么PA的移位移动0位   PC的移位移动16位呢
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2023-3-28
在线时间
31 小时
发表于 2023-10-10 21:53:38 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2023-3-28
在线时间
31 小时
发表于 2023-10-10 21:55:31 | 显示全部楼层
你的问题解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 15:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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