zoukankan      html  css  js  c++  java
  • stm32移植ds18b20时出现的问题

    给帮同学调试ds18b20,使用的是正点原子的程序。按道理只要移植IO口的管脚就没问题了。但是还是不行,所以去看了一下发现:

    这是他原来的程序

    //IO方向设置
    #define DS18B20_IO_IN()  {GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=8<<0;}
    #define DS18B20_IO_OUT() {GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=3<<0;}
    ////IO操作函数											   
    #define	DS18B20_DQ_OUT PAout(8) //数据端口	PA0
    #define	DS18B20_DQ_IN  PAin(8)  //数据端口	PA0 
    

     现在我使用PA11,应该只要改一点点:比如

    //IO方向设置
    #define DS18B20_IO_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<3;}
    #define DS18B20_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<3;}
    ////IO操作函数											   
    #define	DS18B20_DQ_OUT PAout(8) //数据端口	PA0
    #define	DS18B20_DQ_IN  PAin(8)  //数据端口	PA0 
    

      其实问题就出在这个想当然把左移当成3位,其实他移动一个16进制就应该移动4位,所以我应该移动12位

    //IO方向设置
    #define DS18B20_IO_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
    #define DS18B20_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
    ////IO操作函数											   
    #define	DS18B20_DQ_OUT PAout(8) //数据端口	PA0
    #define	DS18B20_DQ_IN  PAin(8)  //数据端口	PA0 
    

      或者这样写简单易懂

    //IO方向设置
    #define DS18B20_IO_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=0x00008000;}
    #define DS18B20_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=0x00003000;}
    ////IO操作函数											   
    #define	DS18B20_DQ_OUT PAout(11) //数据端口	PA11
    #define	DS18B20_DQ_IN  PAin(11)  //数据端口	PA11 
    

      好了,这样就没有问题了

  • 相关阅读:
    SQL Server 备份方案
    Azure 学习笔记
    SEO – 大杂烩
    Asp.net core 学习笔记之 Tag Helper
    读取注册表
    DOM学习历程-3
    inno setup给控制的那边加图标
    C++生成exe安装到别人那边无法使用缺少dll
    inno setup 最后
    inno setup
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8250085.html
Copyright © 2011-2022 走看看