之前在AVR单片机上用过DS18B20温度传感器,现在需要在STM32F103平台下使用,就直接在原先的代码基础上做了相应修改,调试时遇到的问题是测量值总是显示127.9375(读取的温度数据为0x7fff),用示波器看波形也没有发现问题,以为是18B20出问题了,又回到AVR下测试,结果正常。后来发现,不同之处在于供电:AVR用的5V,而STM32是3.3V。把18B20的供电电压换成5V就能正常工作了。又测试了18B20用3.3V供电,DQ脚5V上拉,测量数据还是不对,而且与上拉电阻值无关。数据手册上明明写的供电电压3~5.5V,难道是管子的问题?
总结一下STM32与AVR单片机在使用DS18B20的区别。
18B20使用一线值,单片机控制DQ引脚既需要输出电平,同时需要读取引脚电平。AVR单片机是通过设置DDRx寄存器来控制引脚的输入/输出状态。读引脚时,读取PIN,输出的时候写PORT。STM32的引脚可以配置为开漏输出模式,读输入数据寄存器就可得到引脚状态,省去来回切换输入输出模式,需要加上拉电阻。并且按照18B20数据手册,DQ引脚需要4.7k上拉电阻。
/*
*********************************************************************************************************
* 函 数 名: DS18B20_GPIOConfiguration
* 功能说明: 18b20端口配置为开漏输出
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void DS18B20_GPIOConfiguration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(DQ_GPIORCC, ENABLE);
DQ_1; // 需要先写输出寄存器为1,否则初始化后默认输出0
GPIO_InitStructure.GPIO_Pin = Pin18B20;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIO18B20, &GPIO_InitStructure);
}
uint8_t BUSY(void) //读温度传感器数据引脚
{
return GPIO_ReadInputDataBit(GPIO18B20, Pin18B20);
}
关键字:移植 ds18b20 stm32f103
引用地址:
移植ds18b20到stm32f103遇到的问题
推荐阅读最新更新时间:2024-03-16 15:13
嵌入式系统μC/OS-II在LPC2119上的移植方法和技巧
本文在分析实时嵌入式系统mC/OS-II和LPC2119芯片的基础上,对mC/OS-II向处理器上移植前需要了解的知识和需要做的前期准备工作进行了分析和讨论,最后给出了移植的具体工作。论文着重分析了mC/OS-II的移植。 μC/OS-II是一个完整的,可移植、可固化、可裁减的占先式实时多任务内核,它功能强大,支持56个用户任务,支持信号量、邮箱、消息队列等多种常用的进程间通信机制。公开源代码,程序可读性强、移植性好,同时可免费获得。 LPC2119是由PHILIPS生产的一款32位ARM7TDMI-S微处理器,其核心为高性能的32位RISC体系结构,并具有高密度的16位指令集和极低的功耗。具有零等待128K字节的片内FLAS
[单片机]
STM32F103VB的SD卡在应用编程设计
引言 对于大部分基于闪存的嵌入式系统来说,一项重要的需求就是当这些系统安装在终端产品上后,具有对固件更新的能力,这个能力称为在应用编程(In-Application Programming,IAP)。在应用编程方式允许用户在程序运行过程中对程序存储器的指定区域进行重新烧写,因此广泛应用于工业生产设备、智能仪器仪表、消费电子类产品的固件更新、软件维护和功能扩展上。 目前使用的在应用编程方案大多是通过嵌入式系统的串口或者网络接口并与PC机相连,再通过上位机软件或者网络完成对系统固件的更新,对硬件环境要求较高。考虑到目前工业设备、智能仪器和消费电子类产品多使用SD卡作为数据存储媒介,或者预留SD卡接口,在此拟采用SD卡作为固件更新
[单片机]
PPCBoot在MPC8250上的移植方法
摘要:The Bootloader(引导加载程序)是嵌入式系统CPU加电后即开始运行的第一段代码,它把Linux内核与硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要。PPCBoot是功能十分强大的Bootloader。深入研究了PPCBOOt的工作机理,详细分析了PPCBoot在基于MPC8250型处理器的嵌入式系统板上的移植方法、过程与移植要点。
关键词:Bootloader;PPCBoot;MPC8250;嵌入式系统
1 引言
Boodoader(引导加载程序)是CPU复位后和进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统
[嵌入式]
内核移植(2)arch/arm/mach-s3c2440/mach-smdk2440.c
对于s3c2410、s3c2440开发板,它们的CPU Id都是0x41129200,在arch/arm/mm/proc -arm920.S中的_ _arm920_proc_info结构中。 定义开发板参数在arch/arm/mach-s3c2440/mach-smdk2440.c中,如机器类型ID、起始I/O物理地址、Bootloader传入的参数的地址、中断初始化函数等。 arch/arm/kernel/head.S是内核执行的第一个文件。 S3c2440开发板上启动uImage时串口输出乱码的原因,开发板晶振的频率设置有问题。 1、在arch/arm/mach-s3c2440/mac
[单片机]
STM8S程序移植心得
大部分的STM8S芯片是可以兼容的 其中有很多是有共同之处,但是也有不同之处,比如有些芯片有串口1有些芯片没有串口1却又串口2;这一点仍然需要去认真的看看芯片数据手册; 两种芯片的共同拥有的io口或者其他硬件,完全可以进行程序移植,首先是在IAR上右键项目,选择option–》General Option,修改DEVICE,修改为移植后的芯片; 除此之外,还需要在STM8S.h的头文件中修改声明,选择使用的芯片
[单片机]
U-Boot在FL2440上移植(三)----支持NAND Flash
一 支持NAND Flash 1. 首先在配置文件 include/config/fl2440.h 的宏 CONFIG_COMMANDS 中增加 CFG_CMD_NAND, #define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | CFG_CMD_NAND | 2.在配置文件 include/configs/fl2440.h 中增加如下3个宏 #define CFG_NAND_BASE 0 //无实际意义:基地址,在board_nand_init中重新定义 #define CFG_MAX_NAND_DEVICE 1 //NAND Flash设备数目为1
[单片机]
u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)
本次移植跟以往的不同之处是采用了spl来引导u-boot,参考了博客 http://blog.csdn.net/fulinus/article/details/42738641 下载链接: http://pan.baidu.com/s/1bnlRKgn 使用方法: 1、 编译 make tq2440_defconfig make 2、 然后会在u-boot根目录下生成u-boot.bin,在spl目录下会生成u-boot-spl.bin,目前的分区是: u-boot-spl.bin (1M) u-boot.bin (1M) kernel (3M) rootfs (剩余) 自己可以改动,在arc
[单片机]
STM32F103环境搭建
1.1 STM32F103单片机概述 ARM公司在ARM11以后的产品改用Cortex命名,主要分为三种,Cortex-M系列,Cortex-R系列和Cortex-A系列,Cortex系列属于ARMv7架构,这是2010年为止ARM公司最新的指令集架构,其中Cortex-M主要用于低端的嵌入式控制系统中,Cortex-R主要用于实时系统中,Cortex-A系列则是用于操作系统,智能设备和移动电话等领域,比如常见的Cortex-A15(用于Android,Ubuntu等系统中)。 意法半导体(ST公司)开发的STM32就属于Cortex-M架构,该架构细分又可以分为M0,M0+,M3,H7等,以最常见的STM32F103为例,该
[单片机]