OpenEdv-开源电子网

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

DS18B20采集到的温度通过串口显示,求助!谢谢

[复制链接]

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-4-11 12:43:40 | 显示全部楼层 |阅读模式
5金钱
DS18B20部分的程序是由原子哥的程序移植过来的。
现在我想通过串口显示出来。
那我就是:
USART_SendData(USART2,temperature);       
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
delay_ms(2);       

直接将采集到的温度这样发送出来可以吗?
串口这里需要什么协议吗??
不胜感激!!!!!!

最佳答案

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

您好,能详细解释下吗?放到哪里呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 12:43:41 | 显示全部楼层
cf1670974997 发表于 2016-4-11 14:56
if(USART_RX_STA&0X8000)  { printf()   }  USART_RX_STA=0;

您好,能详细解释下吗?放到哪里呢?
回复

使用道具 举报

7

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-3-1
在线时间
73 小时
发表于 2016-4-11 14:56:03 | 显示全部楼层
if(USART_RX_STA&0X8000)  { printf()   }  USART_RX_STA=0;
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 15:10:32 | 显示全部楼层
cf1670974997 发表于 2016-4-11 14:56
if(USART_RX_STA&0X8000)  { printf()   }  USART_RX_STA=0;

另外,我也没有用到中断。我就是写一个小函数。就是接收就发送。谢谢
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 15:39:48 | 显示全部楼层
我只能16进制显示,显示值是00  
我看原子哥的程序,是已经装换过的程序了吧
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2016-4-11 15:44:21 | 显示全部楼层
先写一个 int 转 10进制函数,然后存到buf数组中,然后发送。
或者直接printf
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2016-4-11 15:44:38 | 显示全部楼层
转16进制
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 15:52:01 | 显示全部楼层

没听明白,能详细点吗?我初学。谢谢!!!!
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2016-4-11 16:05:53 | 显示全部楼层
每次发送只能发送一个字节,你的,temperature是什么类型 几个字节,你这样直接发 我估计发的是,temperature的最高字节。
假如,temperature是 6   那么你实际要发的是  0x00 0x00 0x00 0x06  这下懂了把
回复

使用道具 举报

7

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-3-1
在线时间
73 小时
发表于 2016-4-11 16:18:32 | 显示全部楼层
滴丶滴 发表于 2016-4-11 15:08
您好,能详细解释下吗?放到哪里呢?

就放在while(1)大循環裏面阿,將你讀出來的數據用printf打印出來,串口輸出asc
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 16:31:25 | 显示全部楼层
cf1670974997 发表于 2016-4-11 16:18
就放在while(1)大循環裏面阿,將你讀出來的數據用printf打印出來,串口輸出asc

int main(void)
{       
delay_init()         ;
LED_Init();
RS485_Init();
                                    
             

        while(DS18B20_Init())        //DS18B203õê¼»ˉ       
       
        while(1)
       
        {         

                u8 t=0;  
        u8 temperature;     
                if(t%10==0)//ÿ100ms¶áè¡ò»′Î
                {                                                                          
                        temperature=DS18B20_Get_Temp();       
                       
                                 RS485=1;        //485·¢Ëíê1Äü       
                        delay_ms(2);
                       
                        USART_SendData(USART2,temperature);       
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
                delay_ms(2);               
                       
                }                                  
                 delay_ms(10);
                t++;
       
        }

}
我的主函数是这样的,不知道您具体说的是什么 谢谢,,,,
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 16:31:58 | 显示全部楼层
Sun_Fly 发表于 2016-4-11 16:05
每次发送只能发送一个字节,你的,temperature是什么类型 几个字节,你这样直接发 我估计发的是,temperature ...

int main(void)
{       
delay_init()         ;
LED_Init();
RS485_Init();
                                    
             

        while(DS18B20_Init())        //DS18B203õê¼»ˉ       
       
        while(1)
       
        {         

                u8 t=0;  
        u8 temperature;     
                if(t%10==0)//ÿ100ms¶áè¡ò»′Î
                {                                                                          
                        temperature=DS18B20_Get_Temp();       
                       
                                 RS485=1;        //485·¢Ëíê1Äü       
                        delay_ms(2);
                       
                        USART_SendData(USART2,temperature);       
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
                delay_ms(2);               
                       
                }                                  
                 delay_ms(10);
                t++;
       
        }

}
这是我的主函数 谢谢,,,
回复

使用道具 举报

7

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-3-1
在线时间
73 小时
发表于 2016-4-11 16:44:03 | 显示全部楼层
int main(void)
{        
delay_init()         ;
LED_Init();
uart_init(9600);                                          

        while(DS18B20_Init())        //DS18B203õê¼»ˉ        
        
        while(1)
        
        {         

                u8 t=0;  
            u8 temperature;     
                if(t%10==0)//ÿ100ms¶áè¡ò»′Î
                {                                                                          
                        temperature=DS18B20_Get_Temp();        
                           delay_ms(2);
                 }   
                if(USART_RX_STA&0X8000)
                            { printf("%d",temperture);   
                        USART_RX_STA=0;         }  
                                
                 delay_ms(10);
                t++;
        
        }

}
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 17:00:12 | 显示全部楼层
cf1670974997 发表于 2016-4-11 16:44
int main(void)
{        
delay_init()         ;

一点反应都没了。。。
我是用串口调试助手接收数据的 。
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-11 17:06:11 | 显示全部楼层
滴丶滴 发表于 2016-4-11 17:00
一点反应都没了。。。
我是用串口调试助手接收数据的 。

我是485转232再接到串口吊事助手的。
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2016-4-11 18:08:13 | 显示全部楼层
变成16进制之后  是4个字节,存储在buf[4]中   你要用for发送4次  
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-5-1
在线时间
40 小时
发表于 2016-4-11 19:56:53 | 显示全部楼层
推荐直接使用printf函数,支持字符串打印输出。可以使用sprintf将你的数据转换成你需要现实的样式,也可以直接%4.1这样的形式输出。
回复

使用道具 举报

7

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-3-1
在线时间
73 小时
发表于 2016-4-12 08:22:43 | 显示全部楼层
滴丶滴 发表于 2016-4-11 17:00
一点反应都没了。。。
我是用串口调试助手接收数据的 。

點發送不就有數據了么,我剛試過了可以的
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-12 09:11:36 | 显示全部楼层
cf1670974997 发表于 2016-4-12 08:22
點發送不就有數據了么,我剛試過了可以的

我是18b20采集温度通过485转232发送到串口。我点发送??我发送什么?
应该是自动发送的吧?
您是怎么试的?您在发送里边写的什么?空的?
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-4-12 09:13:00 | 显示全部楼层
滴丶滴 发表于 2016-4-12 09:11
我是18b20采集温度通过485转232发送到串口。我点发送??我发送什么?
应该是自动发送的吧?
您是怎么 ...

而且您给我这个程序,连485发送使能都没打开。就能发送接收?
回复

使用道具 举报

108

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2016-6-29
在线时间
165 小时
发表于 2016-6-29 13:39:39 | 显示全部楼层
cf1670974997 发表于 2016-4-11 14:56
if(USART_RX_STA&0X8000)  { printf()   }  USART_RX_STA=0;

老大 我把引脚改为PB4了[mw_shl_code=c,true]u8 DS18B20_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);  
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;            
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
GPIO_Init(GPIOB, &GPIO_InitStructure);            
GPIO_SetBits(GPIOB,GPIO_Pin_4);               


        DS18B20_Rst();

        return DS18B20_Check();
} [/mw_shl_code]
这两句咋改啊[mw_shl_code=c,true]#define DS18B20_IO_IN()  {GPIOB->CRL&=0XFFFF0FFF;GPIOB->CRL|=8<<2;}
#define DS18B20_IO_OUT() {GPIOB->CRL&=0XFFFF0FFF;GPIOB->CRL|=3<<2;} [/mw_shl_code]
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 03:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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