为了加深对于底层驱动开发的认识和理解,楼主决定自撸常见模块,传感器的驱动程序。-------立贴为证。
DS18B20是一款单总线可编程分辨率的数字温度计,详细内容可见中英文datasheet,笔者不在赘述。
很早就接触到的温度传感器,也相信每一个曾学习过嵌入式开发的人都用过,笔者在STM32F4上自码DS18B20驱动,有些小小心得:
1.初始化时序要注意,笔者亲测,在MCU控制单总线为低电平240us即可(数据手册上要求至少480us)释放总线,等待60us后即可检测到到DS18B20返回的拉低单总线信号,此处,需注意至少应在此等待120us,否则可能会导致温度传感器无法正常工作。
2.初学者需注意时序,对于DS18B20的操作都必需经过三步:初始化,ROM命令(多为跳过指令0xCC),DS18B20功能命令。再次强调对其的每一个操作必须经过这三步,可阅读code加深理解。
3.在读取DS18B20时,注意顺序,DS18B20先发送低位,在字节读取时应当注意。
4.初学者应尝试实现对于DS18B20内部ROM的8位系列号(28H),和48位唯一序列号进行读取,以及修改温度传感器内部EEPROM的过温、低温报警值。(可参考笔者code)
废话不多说,上码:
#include <ds18b20.h>
#include "delay.h"
#include "usart.h"
//ds18b20初始化
void init_ds18b20( void )
{
init_onewire_out();
GPIO_ResetBits(GPIOG,GPIO_Pin_9);
delay_us(480);
init_onewir