完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我把例程22温度传感器扩展到2个,一个是焊在开发板上,就用了例程里的设定,另一个我准备接在PC4口,但不知道为什么第二个温度传感器总是不能初始化。。。
已经把第二个传感器接在PA0口验证过电路没有问题,哪位高手能帮忙看看工程里什么出了问题,是哪里没有使能吗?? //Mini STM32开发板范例代码22 //红外遥控 实验 //发烧友@ALIENTEK //2010.6.17 int main(void) { short temp; short temp2; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口1初始化 LCD_Init(); //初始化液晶 LED_Init(); //LED初始化 OINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,"Mini STM32"); LCD_ShowString(60,70,"DS18B20 TEST"); LCD_ShowString(60,90,"ATOM@ALIENTEK"); LCD_ShowString(60,110,"2010/6/17"); while(DS18B20_Init())//初始化DS18B20,兼检测18B20 { LCD_ShowString(60,130,"DS18B20 Check Failed!"); delay_ms(500); LCD_ShowString(60,130,"Please Check! "); delay_ms(500); LED0=!LED0;//DS0闪烁 } LCD_ShowString(60,130,"DS18B20 Ready! "); OINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,150, "Temperate: . C"); while(DS18B20_2_Init())//初始化DS18B20_2,兼检测18B20_2 { LCD_ShowString(60,180,"DS18B20_2 Check Failed!"); delay_ms(500); LCD_ShowString(60,200,"Please Check! "); delay_ms(500); LED1=!LED1;//DS1闪烁 } LCD_ShowString(60,180,"DS18B20_2 Ready! "); POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,200, "Temperate: . C"); while(1) { temp=DS18B20_Get_Temp(); if(temp<0) { temp=-temp; LCD_ShowChar(140,150,'-',16,0);//显示负号 } LCD_ShowNum(148,150,temp/10,2,16);//显示温度值 LCD_ShowNum(172,150,temp%10,1,16);//显示温度值 //printf("t1:%dn",temp); delay_ms(200); LED0=!LED0; temp2=DS18B20_2_Get_Temp(); if(temp2<0) { temp2=-temp2; LCD_ShowChar(140,200,'-',16,0);//显示负号 } LCD_ShowNum(148,200,temp2/10,2,16);//显示温度值 LCD_ShowNum(172,200,temp2%10,1,16);//显示温度值 //printf("t1:%dn",temp); delay_ms(200); LED1=!LED1; } } #include "ds18b20_2.h" #include "delay.h" //Mini STM32开发板 //DS18B20_2 驱动函数 //发烧友@ALIENTEK //2010/6/17 //复位DS18B20_2 void DS18B20_2_Rst(void) { DS18B20_2_IO_OUT(); //SET PC4 OUTPUT DS18B20_2_DQ_OUT=0; //拉低DQ delay_us(750); //拉低750us DS18B20_2_DQ_OUT=1; //DQ=1 delay_us(15); //15US } //等待DS18B20_2的回应 //返回1:未检测到DS18B20_2的存在 //返回0:存在 u8 DS18B20_2_Check(void) { u8 retry=0; DS18B20_2_IO_IN();//SET PC4 INPUT while (DS18B20_2_DQ_IN&&retry<200) { retry++; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_2_DQ_IN&&retry<240) { retry++; delay_us(1); }; if(retry>=240)return 1; return 0; } //从DS18B20_2读取一个位 //返回值:1/0 u8 DS18B20_2_Read_Bit(void) // read one bit { u8 data; DS18B20_2_IO_OUT();//SET PC4 OUTPUT DS18B20_2_DQ_OUT=0; delay_us(2); DS18B20_2_DQ_OUT=1; DS18B20_2_IO_IN();//SET PV4 INPUT delay_us(12); if(DS18B20_2_DQ_IN)data=1; else data=0; delay_us(50); return data; } //从DS18B20_2读取一个字节 //返回值:读到的数据 u8 DS18B20_2_Read_Byte(void) // read one byte { u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_2_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } //写一个字节到DS18B20_2 //dat:要写入的字节 void DS18B20_2_Write_Byte(u8 dat) { u8 j; u8 testb; DS18B20_2_IO_OUT();//SET PC4 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_2_DQ_OUT=0;// Write 1 delay_us(2); DS18B20_2_DQ_OUT=1; delay_us(60); } else { DS18B20_2_DQ_OUT=0;// Write 0 delay_us(60); DS18B20_2_DQ_OUT=1; delay_us(2); } } } //开始温度转换 void DS18B20_2_Start(void)// ds1820 start convert { DS18B20_2_Rst(); DS18B20_2_Check(); DS18B20_2_Write_Byte(0xcc);// skip rom DS18B20_2_Write_Byte(0x44);// convert } //初始化DS18B20_2的IO口 DQ 同时检测DS的存在 //返回1:不存在 //返回0:存在 u8 DS18B20_2_Init(void) { RCC->APB2ENR|=1<<4; //使能PORTC口时钟 GPIOC->CRL&=0XFFF0FFFF;//PORTC.4 推挽输出 GPIOC->CRL|=0X00030000; GPIOC->ODR|=1<<4; //输出1 DS18B20_2_Rst(); return DS18B20_2_Check(); } //从ds18b20_2得到温度值 //精度:0.1C //返回值:温度值 (-550~1250) short DS18B20_2_Get_Temp(void) { u8 temp; u8 TL,TH; short tem; DS18B20_2_Start (); // ds1820 start convert DS18B20_2_Rst(); DS18B20_2_Check(); DS18B20_2_Write_Byte(0xcc);// skip rom DS18B20_2_Write_Byte(0xbe);// convert TL=DS18B20_2_Read_Byte(); // LSB TH=DS18B20_2_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; } #ifndef __DS18B20_2_H #define __DS18B20_2_H #include "sys.h" //Mini STM32开发板 //DS18B20 驱动函数 //发烧友@ALIENTEK //2010/6/17 //IO方向设置 #define DS18B20_2_IO_IN() {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=8<<4;} #define DS18B20_2_IO_OUT() {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=3<<4;} ////IO操作函数 #define DS18B20_2_DQ_OUT PCout(4) //数据端口 C4 #define DS18B20_2_DQ_IN PCin(4) //数据端口 C4 u8 DS18B20_2_Init(void);//初始化DS18B20_2 short DS18B20_2_Get_Temp(void);//获取温度 void DS18B20_2_Start(void);//开始温度转换 void DS18B20_2_Write_Byte(u8 dat);//写入一个字节 u8 DS18B20_2_Read_Byte(void);//读出一个字节 u8 DS18B20_2_Read_Bit(void);//读出一个位 u8 DS18B20_2_Check(void);//检测是否存在DS18B20_2 void DS18B20_2_Rst(void);//复位DS18B20_2 #endif 温度传感器.rar (1.99 MB ) |
|
相关推荐
7个回答
|
|
#define DS18B20_2_IO_IN() {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=8<<4;}
#define DS18B20_2_IO_OUT() {GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=3<<4;} 这两句不对.都是后半部分不对. 提示:每个IO口占4个位. |
|
|
|
|
|
|
|
我也遇到,PA0改PA14时初始化不通过,每个IO口占4个位是什么意思,具体怎么改?
|
|
|
|
这个你看看 STM32参考手册,GPIO的描述部分吧.
|
|
|
|
看了还是不知道,
JTAG_Set(JTAG_SWD_DISABLE); //IO方向设置 #define DS18B20_IO_IN() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=8<<14;} #define DS18B20_IO_OUT() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=3<<14;} ////IO操作函数 #defineDS18B20_DQ_OUT Aout(14) //数据端口PA0 #defineDS18B20_DQ_IN  Ain(14) //数据端口PA0 RCC->APB2ENR|=1<<2; //使能PORTA口时钟 GPIOA->CRH&=0XF0FFFFFF;//PORTA.0 推挽输出 GPIOA->CRH|=0X03000000; GPIOA->ODR|=1<<14; //输出1 |
|
|
|
关键你要理解一个IO口的模式是由4个bit控制的就可以了.
|
|
|
|
谢谢,好了
//IO方向设置 #define DS18B20_IO_IN() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=0x08000000;} #define DS18B20_IO_OUT() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=0x03000000;} |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
646浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:47 , Processed in 0.905248 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号