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 
    

      好了,这样就没有问题了

  • 相关阅读:
    两人合作
    JUnit单元测试
    结对编程-——游戏五子棋
    使用Junit等工具进行单元测试
    软件工程
    两人项目---打飞机的游戏
    使用Junit等工具进行单元测试
    软件工程
    使用Junit等工具进行单元测试
    软件工程
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8250085.html
Copyright © 2011-2022 走看看