前言
最近移植了FreeRTOS, 这里记录下FreeRTOS下温度传感器的简单驱动, 顺便试试看rom验证
硬件定义, 接口较为简单只需要一个GPIO, 根据硬件手册配置
//定义DS18B20引脚信息
#define DS18B20_PIN GPIO_Pin_11
//输入和输出的位带操作
#define DS18B20_DQ_OUT PGout(11)
#define DS18B20_DQ_IN PGin(11)
初始化逻辑
//定义GPIOG11为推挽输出
void DS18B20_IO_OUT(void) {
GPIO_InitTypeDef GPIO_Config;
GPIO_Config.GPIO_Pin = DS18B20_PIN;
GPIO_Config.GPIO_Mode = GPIO_Mode_Out_PP; //推挽
GPIO_Config.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_Config);
}
//定义GPIOG11为上拉输入
void DS18B20_IO_IN(void) {
GPIO_InitTypeDef GPIO_Config;
GPIO_Config.GPIO_Pin = DS18B20_PIN;
GPIO_Config.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOG, &GPIO_Config);
}
//使能 GPIOG 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
//默认推挽输出
DS18B20_IO_OUT();
读写入字节核心驱动
//读1字节数据函数
u8 DS18B20_Read_Byte(void) {
u8 i;
u8 data = 0;
for(i = 0; i < 8; i++) {
taskENTER_CRITICAL();
DS18B20_IO_OUT(); //配为输出
DS18B20_DQ_OUT = 0; //清零
delay_us(2);
DS18B20_IO_IN(); //配为输入
delay_us(8);
data