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 
    

      好了,这样就没有问题了

  • 相关阅读:
    hibernate中many-to-one的not-found属性和@notfound注解
    使用excel中的数据快速生成sql语句
    maven的生命周期
    单点登录(sso)入门
    sql server生成随机id
    javascript时间戳与日期格式的相互转换
    前后端分离的概念
    idea中maven项目打jar包
    [na][win]AD域组策略wifi自动配置
    [na]mail收发过程
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8250085.html
Copyright © 2011-2022 走看看