新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 移植ds18b20到stm32f103遇到的問題

        移植ds18b20到stm32f103遇到的問題

        作者: 時間:2016-12-02 來源:網絡 收藏
        之前在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);
        }


        關鍵詞: 移植ds18b20stm32f10

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 崇阳县| 西林县| 保定市| 鱼台县| 独山县| 横峰县| 朝阳区| 泰兴市| 百色市| 类乌齐县| 兴义市| 正宁县| 昌黎县| 亚东县| 湟源县| 图片| 深水埗区| 准格尔旗| 高青县| 黑山县| 通辽市| 图片| 六盘水市| 广昌县| 霍州市| 阳山县| 偃师市| 隆化县| 台山市| 潞城市| 渝中区| 新昌县| 灵山县| 新和县| 余姚市| 天等县| 穆棱市| 鄄城县| 浦北县| 贵州省| 蓬安县|