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

標(biāo)題: STM32標(biāo)準(zhǔn)庫(kù)中的GPIO_Pin_N與GPIO_PinSourceN話題 [打印本頁(yè)]

作者: taoran    時(shí)間: 2015-12-8 03:17
標(biāo)題: STM32標(biāo)準(zhǔn)庫(kù)中的GPIO_Pin_N與GPIO_PinSourceN話題
整理: MilerShao

某日,有個(gè)工程師電話跟我交流,他在使用STM32F042芯片開(kāi)發(fā)產(chǎn)品,用到其中的硬件I2C。利用ST官方提供的標(biāo)準(zhǔn)固件庫(kù)開(kāi)發(fā)應(yīng)用軟件。他說(shuō)發(fā)現(xiàn)I2C功能基本不受控,尤其令他奇怪的是,I2C即使關(guān)閉了,卻發(fā)現(xiàn)I2C腳上還有脈沖出現(xiàn)。

他問(wèn)我是否STM32F0芯片在I2C這里做了什么特別的調(diào)整,因?yàn)樗坝眠^(guò)STM32F1系列的芯片。我心想,再怎么調(diào)整也不應(yīng)該調(diào)整出這個(gè)效果啊,我首先懷疑他代碼是否哪里有問(wèn)題,尤其I2C及相關(guān)GPIO的配置。建議其做與I2C有關(guān)的初始化配置代碼的檢查確認(rèn)。

后來(lái),他通過(guò)QQ留言反饋給我,說(shuō)找到原因了。原因就是將有關(guān)PA9,PA10的復(fù)用功能配置語(yǔ)句做了調(diào)整就OK。顯然,這里PA9,PA10是被復(fù)用為I2C通信腳。



調(diào)整前的代碼
GPIO_PinAFConfig(GPIOA,GPIO_Pin_9,GPIO_AF_4);
GPIO_PinAFConfig(GPIOA,GPIO_Pin_10,GPIO_AF_4);

調(diào)整后的代碼
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_4);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_4);


不難看出,該工程師調(diào)整的就是上面紅色參數(shù)部分。一個(gè)是GPIO_Pin_N,一個(gè)是GPIO_PinSourceN,其實(shí)這2個(gè)參數(shù)是不一樣的。

GPIO_Pin_n可以理解為某端口腳在整個(gè)端口的位置。比方某GPIO口的第6管腳位置編碼GPIO_Pin_6 被定義為 ((uint16_t)0x0040) ,對(duì)相應(yīng)GPIO管腳做基本屬性配置時(shí)會(huì)用到,如配置輸入輸出模式、模擬輸入模式的選擇等。有興趣的話,可以點(diǎn)擊GPIO_Init( )進(jìn)去看看。

GPIO_PinSourceN一般是在對(duì)某GPIO口相應(yīng)pin腳的復(fù)用功能進(jìn)行選擇配置才會(huì)用到。它是根據(jù)端口各腳位的位置按順序從0開(kāi)始依次遞增編號(hào),可以理解為該管腳在該端口的序號(hào)。比方某GPIO口的第6號(hào)復(fù)用功能腳的序號(hào)GPIO_PinSource6 被定義為 ((uint8_t)0x06)有興趣的話,也可以打開(kāi)GPIO_PinAFConfig( )函數(shù)看看。顯然,GPIO_PinSource6跟上面的GPIO_Pin_6的值相差甚遠(yuǎn)。


下面是ST官方庫(kù)代碼中有關(guān)GPIO_Pin_N的定義:

#define GPIO_Pin_0 ((uint16_t)0x0001)

#define GPIO_Pin_1 ((uint16_t)0x0002)

#define GPIO_Pin_2 ((uint16_t)0x0004)

#define GPIO_Pin_3 ((uint16_t)0x0008)

#define GPIO_Pin_4 ((uint16_t)0x0010)

#define GPIO_Pin_5 ((uint16_t)0x0020)

#define GPIO_Pin_6 ((uint16_t)0x0040)

#define GPIO_Pin_7 ((uint16_t)0x0080)

#define GPIO_Pin_8 ((uint16_t)0x0100)

#define GPIO_Pin_9 ((uint16_t)0x0200)

#define GPIO_Pin_10 ((uint16_t)0x0400)

。。。。。。

#define GPIO_Pin_15 ((uint16_t)0x8000)

#define GPIO_Pin_All ((uint16_t)0xFFFF)

下面是有關(guān)GPIO_PinSourceN的定義:

#define GPIO_PinSource0 ((uint8_t)0x00)

#define GPIO_PinSource1 ((uint8_t)0x01)

#define GPIO_PinSource2 ((uint8_t)0x02)

#define GPIO_PinSource3 ((uint8_t)0x03)

#define GPIO_PinSource4 ((uint8_t)0x04)

#define GPIO_PinSource5 ((uint8_t)0x05)

#define GPIO_PinSource6 ((uint8_t)0x06)

#define GPIO_PinSource7 ((uint8_t)0x07)

#define GPIO_PinSource8 ((uint8_t)0x08)

#define GPIO_PinSource9 ((uint8_t)0x09)

#define GPIO_PinSource10 ((uint8_t)0x0A)

。。。。。。

#define GPIO_PinSource15 ((uint8_t)0x0F)


小結(jié):上面的問(wèn)題只有基于STM32官方固件庫(kù)開(kāi)發(fā)時(shí)才會(huì)碰到。說(shuō)實(shí)在的,這兩個(gè)參數(shù)的確容易讓人誤解成一個(gè)東西或者弄混淆,尤其剛接觸的人。經(jīng)常有人在這個(gè)地方遇到麻煩,之前我在一篇文章中提到過(guò)。這里再特意提醒下。

不過(guò)ST官方后來(lái)推出的STM32CUBE庫(kù)在這個(gè)地方的代碼寫(xiě)法做了調(diào)整,不再定義GPIO_PinSourceN。當(dāng)然,因?yàn)楣苣_配置導(dǎo)致異常的問(wèn)題時(shí)有發(fā)生,建議使用ST官方推出的STM32CUBE配置環(huán)境及CUBE參考固件庫(kù)著手開(kāi)發(fā),這樣會(huì)省不少事。






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本三级视频在线观看 | 哦┅┅快┅┅用力啊┅aps | 激情综合网五月 | 一级片国产 | www.亚洲国产| 成人网页 | 少妇一级片 | 91午夜精品亚洲一区二区三区 | 日本在线一区二区三区 | 国产一级片免费观看 | 日韩欧美国产综合 | 日韩精品国产精品 | 日韩理论在线观看 | 午夜在线观看视频 | 日韩精品久久久久久久酒店 | 色婷婷国产精品综合在线观看 | 三年中文在线观看免费大全中国 | 久草资源站 | 五月天婷婷影院 | 午夜成人在线视频 | 欧美在线免费观看视频 | 成人小视频在线观看 | 亚洲精品国产一区 | 日本香蕉视频 | 黑人精品xxx一区一二区 | 91看片淫黄大片 | 日韩av在线一区二区 | 国产美女精品 | 羞羞的视频网站 | 国产日韩欧美精品 | 户外少妇对白啪啪野战 | 一区二区三区国产 | 人人爱av| 黄色午夜 | 18视频在线观看男男 | 高清久久久 | 国产女人高潮毛片 | 国产在线成人 | 一级黄色免费视频 | 麻豆chinese新婚xxx | 色婷婷一区|