完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
例程下载:
资料包括程序、相关说明资料以及软件使用截图 百度云链接:http://pan.baidu.com/s/1i574oPv 密码:r3s3 (硬石YS-F1Pro开发板HAL库例程持续更新2. 软件设计之高级裸机例程(HAL库版本)YSF1_HAL-103. OneWire_DS18B20温度传感器) /** ****************************************************************************** * 硬石YS-F1Pro开发板例程功能说明 * * 例程名称: YSF1_HAL-103. OneWire_DS18B20温度传感器 * ****************************************************************************** * 说明: * 本例程配套硬石STM32开发板YS-F1Pro使用。 * * 淘宝: * 论坛:硬石电子社区 * 版权归硬石嵌入式开发团队所有,请勿商用。 ****************************************************************************** */ 【1】例程简介 DS18B20温度传感器 【2】跳线帽情况 ******* 为保证例程正常运行,必须插入以下跳线帽 ********** 丝印编号 IO端口 目标功能引脚 出厂默认设置 JP1 PA10 TXD(CH340G) 已接入 JP2 PA9 RXD(CH340G) 已接入 JP6 PD3 AM2303/DS18B20 已接入 |
|
相关推荐
|
|
【3】操作及现象
使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安 装驱动),在电脑端打开串口调试助手工具,设置参数为115200 8-N-1。下载完程序之后,在串 口调试助手窗口可接收到信息。 |
|
|
|
|
|
[size=0.83em]CubeMX_2.jpg (168.35 KB, 下载次数: 0)
下载附件 [color=rgb(153, 153, 153) !important]3 小时前 上传 |
|
|
|
|
|
[size=0.83em]CubeMX_2.jpg (168.35 KB, 下载次数: 0)
下载附件 [color=rgb(153, 153, 153) !important]3 小时前 上传 |
|
|
|
|
|
bsp_DS18B20.c文件内容
/** ****************************************************************************** * 文件名程: bsp_DS18B20.c * 作 者: 硬石嵌入式开发团队 * 版 本: V1.0 * 编写日期: 2015-10-04 * 功 能: DS18B20温度传感器底层驱动程序 ****************************************************************************** * 说明: * 本例程配套硬石stm32开发板YS-F1Pro使用。 * * 淘宝: * 论坛:http://www.ing10bbs.com * 版权归硬石嵌入式开发团队所有,请勿商用。 ****************************************************************************** */ /* 包含头文件 ----------------------------------------------------------------*/ #include "DS18B20/bsp_DS18B20.h" /* 私有类型定义 --------------------------------------------------------------*/ /* 私有宏定义 ----------------------------------------------------------------*/ #define Delay_ms(x) HAL_Delay(x) /* 私有变量 ------------------------------------------------------------------*/ /* 扩展变量 ------------------------------------------------------------------*/ /* 私有函数原形 --------------------------------------------------------------*/ static void DS18B20_Mode_IPU(void); static void DS18B20_Mode_Out_PP(void); static void DS18B20_Rst(void); static uint8_t DS18B20_Presence(void); static uint8_t DS18B20_ReadBit(void); static uint8_t DS18B20_ReadByte(void); static void DS18B20_WriteByte(uint8_t dat); static void DS18B20_SkipRom(void); static void DS18B20_MatchRom(void); /* 函数体 --------------------------------------------------------------------*/ /** * 函数功能: * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_Delay(uint16_t time) { uint8_t i; while(time) { for (i = 0; i < 10; i++) { } time--; } } /** * 函数功能: DS18B20 初始化函数 * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ uint8_t DS18B20_Init(void) { DS18B20_Dout_GPIO_CLK_ENABLE(); DS18B20_Mode_Out_PP(); DS18B20_Dout_HIGH(); DS18B20_Rst(); return DS18B20_Presence (); } /** * 函数功能: 使DS18B20-DATA引脚变为上拉输入模式 * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_Mode_IPU(void) { GPIO_InitTypeDef GPIO_InitStruct; /* 串口外设功能GPIO配置 */ GPIO_InitStruct.Pin = DS18B20_Dout_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(DS18B20_Dout_PORT, &GPIO_InitStruct); } /** * 函数功能: 使DS18B20-DATA引脚变为推挽输出模式 * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_Mode_Out_PP(void) { GPIO_InitTypeDef GPIO_InitStruct; /* 串口外设功能GPIO配置 */ GPIO_InitStruct.Pin = DS18B20_Dout_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DS18B20_Dout_PORT, &GPIO_InitStruct); } /** * 函数功能: 主机给从机发送复位脉冲 * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_Rst(void) { /* 主机设置为推挽输出 */ DS18B20_Mode_Out_PP(); DS18B20_Dout_LOW(); /* 主机至少产生480us的低电平复位信号 */ DS18B20_Delay(750); /* 主机在产生复位信号后,需将总线拉高 */ DS18B20_Dout_HIGH(); /*从机接收到主机的复位信号后,会在15~60us后给主机发一个存在脉冲*/ DS18B20_Delay(15); } /** * 函数功能: 检测从机给主机返回的存在脉冲 * 输入参数: 无 * 返 回 值: 0:成功,1:失败 * 说 明:无 */ static uint8_t DS18B20_Presence(void) { uint8_t pulse_time = 0; /* 主机设置为上拉输入 */ DS18B20_Mode_IPU(); /* 等待存在脉冲的到来,存在脉冲为一个60~240us的低电平信号 * 如果存在脉冲没有来则做超时处理,从机接收到主机的复位信号后,会在15~60us后给主机发一个存在脉冲 */ while( DS18B20_Data_IN() && pulse_time<100 ) { pulse_time++; DS18B20_Delay(1); } /* 经过100us后,存在脉冲都还没有到来*/ if( pulse_time >=100 ) return 1; else pulse_time = 0; /* 存在脉冲到来,且存在的时间不能超过240us */ while( !DS18B20_Data_IN() && pulse_time<240 ) { pulse_time++; DS18B20_Delay(1); } if( pulse_time >=240 ) return 1; else return 0; } /** * 函数功能: 从DS18B20读取一个bit * 输入参数: 无 * 返 回 值: 读取到的数据 * 说 明:无 */ static uint8_t DS18B20_ReadBit(void) { uint8_t dat; /* 读0和读1的时间至少要大于60us */ DS18B20_Mode_Out_PP(); /* 读时间的起始:必须由主机产生 >1us <15us 的低电平信号 */ DS18B20_Dout_LOW(); DS18B20_Delay(10); /* 设置成输入,释放总线,由外部上拉电阻将总线拉高 */ DS18B20_Mode_IPU(); //Delay_us(2); if( DS18B20_Data_IN() == SET ) dat = 1; else dat = 0; /* 这个延时参数请参考时序图 */ DS18B20_Delay(45); return dat; } /** * 函数功能: 从DS18B20读一个字节,低位先行 * 输入参数: 无 * 返 回 值: 读到的数据 * 说 明:无 */ static uint8_t DS18B20_ReadByte(void) { uint8_t i, j, dat = 0; for(i=0; i<8; i++) { j = DS18B20_ReadBit(); dat = (dat) | (j< } return dat; } /** * 函数功能: 写一个字节到DS18B20,低位先行 * 输入参数: dat:待写入数据 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_WriteByte(uint8_t dat) { uint8_t i, testb; DS18B20_Mode_Out_PP(); for( i=0; i<8; i++ ) { testb = dat&0x01; dat = dat>>1; /* 写0和写1的时间至少要大于60us */ if (testb) { DS18B20_Dout_LOW(); /* 1us < 这个延时 < 15us */ DS18B20_Delay(8); DS18B20_Dout_HIGH(); DS18B20_Delay(58); } else { DS18B20_Dout_LOW(); /* 60us < Tx 0 < 120us */ DS18B20_Delay(70); DS18B20_Dout_HIGH(); /* 1us < Trec(恢复时间) < 无穷大*/ DS18B20_Delay(2); } } } /** * 函数功能: 跳过匹配 DS18B20 ROM * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_SkipRom ( void ) { DS18B20_Rst(); DS18B20_Presence(); DS18B20_WriteByte(0XCC); /* 跳过 ROM */ } /** * 函数功能: 执行匹配 DS18B20 ROM * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ static void DS18B20_MatchRom ( void ) { DS18B20_Rst(); DS18B20_Presence(); DS18B20_WriteByte(0X55); /* 匹配 ROM */ } /* * 存储的温度是16 位的带符号扩展的二进制补码形式 * 当工作在12位分辨率时,其中5个符号位,7个整数位,4个小数位 * * |---------整数----------|-----小数 分辨率 1/(2^4)=0.0625----| * 低字节 | 2^3 | 2^2 | 2^1 | 2^0 | 2^(-1) | 2^(-2) | 2^(-3) | 2^(-4) | * * * |-----符号位:0->正 1->负-------|-----------整数-----------| * 高字节 | s | s | s | s | s | 2^6 | 2^5 | 2^4 | * * * 温度 = 符号位 + 整数 + 小数*0.0625 */ /** * 函数功能: 在跳过匹配 ROM 情况下获取 DS18B20 温度值 * 输入参数: 无 * 返 回 值: 温度值 * 说 明:无 */ float DS18B20_GetTemp_SkipRom ( void ) { uint8_t tpm***, tpl***; short s_tem; float f_tem; DS18B20_SkipRom (); DS18B20_WriteByte(0X44); /* 开始转换 */ DS18B20_SkipRom (); DS18B20_WriteByte(0XBE); /* 读温度值 */ tpl*** = DS18B20_ReadByte(); tpm*** = DS18B20_ReadByte(); s_tem = tpm***<<8; s_tem = s_tem | tpl***; if( s_tem < 0 ) /* 负温度 */ f_tem = (~s_tem+1) * 0.0625; else f_tem = s_tem * 0.0625; return f_tem; } /** * 函数功能: 在匹配 ROM 情况下获取 DS18B20 温度值 * 输入参数: ds18b20_id:用于存放 DS18B20 序列号的数组的首地址 * 返 回 值: 无 * 说 明:无 */ void DS18B20_ReadId ( uint8_t * ds18b20_id ) { uint8_t uc; DS18B20_WriteByte(0x33); //读取序列号 for ( uc = 0; uc < 8; uc ++ ) ds18b20_id [ uc ] = DS18B20_ReadByte(); } /** * 函数功能: 在匹配 ROM 情况下获取 DS18B20 温度值 * 输入参数: ds18b20_id:存放 DS18B20 序列号的数组的首地址 * 返 回 值: 温度值 * 说 明:无 */ float DS18B20_GetTemp_MatchRom ( uint8_t * ds18b20_id ) { uint8_t tpm***, tpl***, i; short s_tem; float f_tem; DS18B20_MatchRom (); //匹配ROM for(i=0;i<8;i++) DS18B20_WriteByte ( ds18b20_id [ i ] ); DS18B20_WriteByte(0X44); /* 开始转换 */ DS18B20_MatchRom (); //匹配ROM for(i=0;i<8;i++) DS18B20_WriteByte ( ds18b20_id [ i ] ); DS18B20_WriteByte(0XBE); /* 读温度值 */ tpl*** = DS18B20_ReadByte(); tpm*** = DS18B20_ReadByte(); s_tem = tpm***<<8; s_tem = s_tem | tpl***; if( s_tem < 0 ) /* 负温度 */ f_tem = (~s_tem+1) * 0.0625; else f_tem = s_tem * 0.0625; return f_tem; } /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/ |
|
|
|
|
|
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11794 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 12:01 , Processed in 0.733309 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号