久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2857|回復: 5
打印 上一主題 下一主題
收起左側

MPU6050移植正點原子指南和寄存器操作端口模式#define SDA_IN() /#define SDA_OU...

[復制鏈接]
跳轉到指定樓層
樓主
  寫在前面
  最進要做個平衡車,要用到MPU6050模塊,畫板子時SCL與SDA引腳選到了PB8與PB9引腳,想白 嫖原子哥程序,發現引腳不對,本來以為很簡單的改下引腳一下就行,結果搞了半天,最后發現PB9引腳方向設置錯了。。。。尷尬

   正文
一:IO方向設置
  1. //IO方向設置
  2. #define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
  3. #define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;};
復制代碼
二:IO操作函數
  1. //IO操作函數         
  2. #define MPU_IIC_SCL    PBout(10)                 //SCL
  3. #define MPU_IIC_SDA    PBout(11)                 //SDA         
  4. #define MPU_READ_SDA   PBin(11)                 //輸入SDA
復制代碼
三:初始化初始化IIC函數
  1. //初始化IIC
  2. void MPU_IIC_Init(void)
  3. {                                             
  4.   GPIO_InitTypeDef  GPIO_InitStructure;
  5.        
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外設IO PORTB時鐘
  7.                
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;         // 端口配置
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  10.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  11.   GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據設定參數初始化GPIO
  12.        
  13.   GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);                                                 //PB10,PB11 輸出高       

  14. }
復制代碼

其中這三點中第二和第三是比較簡單的,但是IO方向修改則稍微要了解一下寄存器設置。以我為例,我要把PB10,PB11改成PB8,PB9引腳。

第一修改IO操作函數
  1. //IO操作函數     
  2. #define MPU_IIC_SCL    PBout(8)         //SCL  修改成了PB8
  3. #define MPU_IIC_SDA    PBout(9)         //SDA   修改成了PB9     
  4. #define MPU_READ_SDA   PBin(9)         //輸入SDA   修改成了PB9
復制代碼



第二修改初始化初始化IIC函數
  1. //初始化IIC
  2. void MPU_IIC_Init(void)
  3. {                        
  4.   GPIO_InitTypeDef  GPIO_InitStructure;
  5.    
  6.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外設IO PORTB時鐘
  7.       
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;     // 端口配置 修改為PB8,9
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽輸出
  10.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度為50MHz
  11.   GPIO_Init(GPIOB, &GPIO_InitStructure);                     //根據設定參數初始化GPIO
  12.    
  13.   GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9);                         //輸出高 修改為PB8,9

  14. }
復制代碼


第三修改IO方向設置
  1. //IO方向設置
  2. #define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}
  3. #define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;};
復制代碼


ok,到現排除一些極端情況,做完這些MPU6050應該就能正常讀取工作了。
接下來我要詳細說明一下是如何修改IO方向的,因為PB9引腳即作為數據輸入引腳也作為數據輸出引腳,輸出輸入要配置好,這其中牽扯一些寄存器的知識。

解釋一下輸入配置:#define MPU_SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}
等價于下面的運算:
1. GPIOB->CRH&=0XFFFFFF0F;
2. GPIOB->CRH|=(u32)8<<4;

1.將CRH第二個低4位清零,其他位保持不變;
2.將“8”即“0b1000”左移4位即與原來的四位進行或運算;

這里我們要思考了,為什么是CRH不是CRL,這就牽扯到我們選的引腳是PB9,我們知道GPIOB對應著16個管腳,其中第PB0~7對應著IO口的低寄存器即CRL,而PB9顯然對應著IO口的高寄存器即CRH。
好,到現在為止,我們懂得了如何根據引腳來找到相應的寄存器,接下來我們就要把PB9引腳配置成輸入引腳。我們根據手冊可知要把MODE9配置成00輸入模式,CNF9配置成10上下拉輸入模式如下圖所示:

為什么配置成上下拉模式,是因為數據是通過上拉把數據輸入進單片機的,我們可看到下圖外部加了上拉電阻。這部分我理解不是很深刻,歡迎大家來評論區討論.

結束說明:具體制作步驟可去下面地址觀看:https://www.bilibili.com/video/BV1yU4y177BV?share_source=copy_web


評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:616009 發表于 2021-8-18 21:04 | 只看該作者
牛牛牛,好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:752225 發表于 2021-8-19 01:05 來自手機 | 只看該作者
無忍 發表于 2021-8-18 21:04
牛牛牛,好資料,51黑有你更精彩!!!

嘿嘿,小破站捧個場點點關注唄
回復

使用道具 舉報

地板
ID:655518 發表于 2021-8-19 08:42 | 只看該作者
I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級必須是漏極開路,都通過上拉電阻連接到電源,這樣才能夠實現“線與”功能。當總線空閑時,這兩條線路都是高電平。

為了保證空閑時為高電平,通常阻值選擇4.7k,阻值的選擇需要根據負載情況和iic的通信速率選擇。
回復

使用道具 舉報

5#
ID:655518 發表于 2021-8-19 08:42 | 只看該作者
I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級必須是漏極開路,都通過上拉電阻連接到電源,這樣才能夠實現“線與”功能。當總線空閑時,這兩條線路都是高電平。

為了保證空閑時為高電平,通常阻值選擇4.7k,阻值的選擇需要根據負載情況和iic的通信速率選擇。
回復

使用道具 舉報

6#
ID:752225 發表于 2021-8-19 17:22 | 只看該作者
qiezi12318 發表于 2021-8-19 08:42
I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級必須是漏極開路,都通過上拉電阻連接到電源,這樣才 ...

嗯,我懂了!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产真实精品久久二三区 | 日韩午夜影院 | 欧美日韩一区二区三区四区五区 | 狠狠干网站 | 免费成人午夜 | 免费观看av | 欧美精品成人影院 | 欧美久久天堂 | 亚洲精品乱码久久久久久按摩观 | 日本理论片好看理论片 | 国产精品久久久爽爽爽麻豆色哟哟 | 欧美aⅴ片| 欧美在线小视频 | 欧美国产一区二区 | 人人亚洲 | 97视频人人澡人人爽 | 亚洲精品视频播放 | 91久久看片| 日韩精品在线观看视频 | 99视频在线 | 亚洲三级在线观看 | 欧美精品乱码久久久久久按摩 | 成人日批视频 | 日韩一区三区 | 草久久久| 欧美乱码精品一区二区三区 | 日韩在线精品强乱中文字幕 | 久久高清| 中文字幕亚洲一区二区三区 | 免费在线性爱视频 | 久久精品一区二区三区四区 | 久久久国产精品一区 | 国产精品免费在线 | 日本免费一区二区三区四区 | 国产精品一区二区久久精品爱微奶 | 久久久久久国产精品免费免费 | 中文字幕日韩欧美一区二区三区 | 韩国成人在线视频 | 丁香婷婷综合激情五月色 | 91精品国产高清久久久久久久久 | 国产小u女发育末成年 |