如題,最近在調(diào)試STM32的硬件IIC,從中發(fā)現(xiàn)了很多問題,經(jīng)過網(wǎng)上查找資料總結(jié)和實際測試,總結(jié)出如下步驟來檢測硬件IIC。
測試環(huán)境如下:
STM32F407開發(fā)板;
STM32Cube固件庫F4 1.6.0
IIC設(shè)備 AT24C02
IIC配置如下:
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
1.檢查STM32Cube時鐘項配置是否正確(主要看所接入的時鐘源是否與實際時鐘源一致)
2.檢查在完成IIC初始化后,SDA、SCL引腳是否為高電平,不是的話,要采用軟件的方式實現(xiàn),在IIC初始化代碼增加如下步驟:
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(i2cHandle->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */
/**I2C1 GPIO Configuration
PB8 ------> I2C1_SCL
PB9 ------> I2C1_SDA
*/
//增加代碼部分Start
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
hi2c1.Instance->CR1=I2C_CR1_SWRST;
hi2c1.Instance->CR1=0;
//增加代碼部分End
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
......
}
若此方式還是無法解決,就可能是硬件問題了;
3.驗證硬件IIC單字節(jié)讀取是否成功,測試代碼如下:
#define ADDR_24LCxx_Write 0xA0
#define ADDR_24LCxx_Read 0xA1
uint8_t val=0;
HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,0x5A,1,0xff);
HAL_Delay(5);
HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,&val,1,0xff);
4..驗證硬件IIC多字節(jié)字節(jié)讀取是否成功,測試代碼如下:
#define BufferSize 0x100
uint8_t WriteBuffer[BufferSize],ReadBuffer[BufferSize];
uint16_t i;
printf("\r\n***************I2C Example*******************************\r\n");
printf("WriteBuffer\r\n");
for(i=0; i<256; i++)
{
WriteBuffer[i]=256-i; /* WriteBuffer init */
printf("0x%02X ",WriteBuffer[i]);
}
/* wrinte date to EEPROM */
for(i=0;i { HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, i, I2C_MEMADD_SIZE_8BIT,&WriteBuffer[i],1,0xff);//使用I2C塊讀,出錯。因此采用此種方式,逐個單字節(jié)寫入 HAL_Delay(5);//此處延時必加,與AT24C02寫時序有關(guān) } printf("\r\n EEPROM 24C02 Write Test OK \r\n"); HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize,0xff); for(i=0; i<256; i++) printf("0x%02X ",ReadBuffer[i]); if(memcmp(WriteBuffer,ReadBuffer,BufferSize) == 0 ) /* check date */ printf("\r\n EEPROM 24C02 Read Test OK\r\n"); else printf("\r\n EEPROM 24C02 Read Test False\r\n"); AT24C02寫時序如下: 至此,硬件IIC的使用完成;不管硬件IIC采用何種形式(DMA,IT),都要確保兩次寫入的間隔大于5ms;
其中twr為兩次寫入的時間間隔,其間隔最大為5ms;
上一篇:關(guān)于STM32的HAL庫硬件I2C簡單調(diào)試
下一篇:stm32 hal i2c 庫讀寫sd3088時鐘
推薦閱讀
史海拾趣
在國內(nèi)市場取得一定成績后,Barry Industries Inc開始積極拓展國際市場。公司參加了多個國際電子展會,與國際知名企業(yè)建立了合作關(guān)系,成功將產(chǎn)品打入國際市場。同時,Barry還積極尋求與國際先進技術(shù)的交流與合作,不斷提升自身的技術(shù)水平和產(chǎn)品質(zhì)量。
在快速發(fā)展的同時,Aptina注重技術(shù)研發(fā)與專利布局。公司投入大量資源用于研發(fā),不斷推出具有創(chuàng)新性的圖像傳感器產(chǎn)品。這些產(chǎn)品不僅提升了公司的市場競爭力,還為Aptina積累了大量的技術(shù)專利。這些專利成為了公司寶貴的資產(chǎn),為公司的長期發(fā)展奠定了堅實基礎(chǔ)。
隨著全球?qū)Νh(huán)境保護意識的增強,Heimann Optoelectronics Gmbh積極響應(yīng),將綠色環(huán)保理念融入產(chǎn)品設(shè)計和生產(chǎn)中。公司投入大量資源研發(fā)出低功耗、長壽命的光電傳感器,這些產(chǎn)品在使用過程中能夠顯著減少能源消耗和廢棄物產(chǎn)生。此外,公司還采用環(huán)保材料進行包裝,確保從生產(chǎn)到廢棄的整個生命周期都符合環(huán)保標(biāo)準(zhǔn)。這一舉措不僅贏得了市場的廣泛贊譽,還為公司樹立了良好的企業(yè)形象。
隨著業(yè)務(wù)的不斷發(fā)展,CCS公司意識到市場拓展的重要性。公司積極尋求與國內(nèi)外知名企業(yè)的合作,通過戰(zhàn)略合作的方式共同開拓市場。通過與這些企業(yè)的合作,CCS公司不僅獲得了更多的業(yè)務(wù)機會,還提高了自身的品牌知名度和市場影響力。同時,CCS公司還積極參加各類行業(yè)展會和交流活動,與同行建立廣泛的聯(lián)系和合作關(guān)系,為公司的長遠(yuǎn)發(fā)展奠定了堅實的基礎(chǔ)。
進入21世紀(jì),隨著LED技術(shù)的快速發(fā)展,ERG看到了固態(tài)照明市場的巨大潛力。2008年,公司決定成立一個新的部門——ERG Lighting,專注于為固態(tài)照明市場設(shè)計、制造和分銷LED驅(qū)動器和其他照明配件。這一舉措極大地拓展了公司的業(yè)務(wù)范圍,并使其在市場上占據(jù)了有利地位。ERG Lighting的成立,不僅為公司帶來了新的增長點,還進一步鞏固了其在電源轉(zhuǎn)換產(chǎn)品領(lǐng)域的領(lǐng)先地位。
為了進一步拓展全球業(yè)務(wù),Cooper Industries在2007年收購了韓國防爆電力設(shè)備制造商Hyundai Explosion-Proof Electric Co.。這一收購使公司能夠更好地進入韓國市場,并充分利用韓國在造船業(yè)以及國內(nèi)能源與石化基礎(chǔ)設(shè)施方面的優(yōu)勢。通過這次收購,Cooper Industries不僅提升了在韓國市場的競爭力,也為其在全球防爆電力設(shè)備市場的地位打下了堅實基礎(chǔ)。這一舉措再次展現(xiàn)了Cooper Industries在全球化戰(zhàn)略中的遠(yuǎn)見卓識和果斷行動。
這五個故事只是Cooper Industries發(fā)展歷程中的一部分,但它們足以展現(xiàn)出公司在電子行業(yè)中的卓越地位和不斷創(chuàng)新的精神。通過全球擴張、收購整合、技術(shù)創(chuàng)新和市場拓展等方式,Cooper Industries不斷壯大自身實力,為行業(yè)的發(fā)展做出了積極貢獻。
移動醫(yī)療服務(wù)系統(tǒng)中的前置放大器設(shè)計與實現(xiàn) 各種生物信號都屬于低頻的微弱自然信號,為了高精度,高速度地檢測出背景噪聲覆蓋的微弱生物信號,高質(zhì)量的前置放大器中一般都使用了低噪聲運放。由于低噪聲運放性能有別于普通運放,因而必須依據(jù)有關(guān)的噪聲理論對低噪聲運放進行分析和討論,才能達(dá)到預(yù) ...… 查看全部問答∨ |
|
基于LabVIEW 的數(shù)據(jù)采集與處理軟件編程技巧 基于LabVIEW 的數(shù)據(jù)采集與處理軟件編程技巧(石家莊鐵道學(xué)院)燕延 馬增強 楊明 摘要: 針對基于LabVIEW 平臺的數(shù)據(jù)采集和數(shù)據(jù)處理程序設(shè)計中.常遇到的典型應(yīng)用中的問題如:基于TCP的網(wǎng)絡(luò)傳輸、軟件濾波、數(shù)組組合、波形振幅統(tǒng)計、超限報警等問題 ...… 查看全部問答∨ |
|
半球攝像機組成如下圖:主電路板、鏡頭及鏡頭輔件、安裝支架、護罩及外殼; 第一步:將鏡頭組件安裝到主板上,用鏍絲固定;(注意,這個鏡頭組件還可以拆開分為支架和鏡頭) 第二步:安裝支架,固定主板;安裝鏡頭上的橡皮圈(圖一中有橡皮圈 ...… 查看全部問答∨ |
s3c2440(s3c2410 s3c2443等也一樣) 中斷控制里有個INT_USBD中斷 正常情況下,USB插入后會產(chǎn)生這個中斷,這個中斷是判斷什么而產(chǎn)生的呢? 看了一下 文檔里沒有寫的很詳細(xì)的,有了解的人嗎? … 查看全部問答∨ |
初學(xué)ARM 要做一個汽車安全系統(tǒng) 大家 給點建議 初學(xué)ARM 現(xiàn)在學(xué)的 不明不白 本人 已大三 電子專業(yè) 大一大二 渾渾噩噩,沒學(xué)什么東西,對單片機也很馬虎,毫無基礎(chǔ)可言,今年參加了一個比賽 自己想了好久的題目 也沒想出來,指導(dǎo)老師幫著想了一個, ...… 查看全部問答∨ |
從網(wǎng)上找了一段格式化SD卡的sourcecode,可是執(zhí)行到DismountPartition的時候總是會失敗,這句的作用是什么,英文看的不是很明白… 查看全部問答∨ |
Quartues 2 仿真teshbench竟然出現(xiàn)了問題 在QUARYUS2 ->TOOL->RUN EDA SIMULATION TOOL 后 運行ModelSim 6.5出現(xiàn)如下報錯。希望高手指教。Q385157936For example, ModelSim may display the following error message:# ** Error: (vsim-19) Failed to access library \'work\ ...… 查看全部問答∨ |
初學(xué)求教OSTimeDly(1);關(guān)于延時方面的問題 初學(xué)ucos,一直摸不到門道,不知道如何學(xué)好,學(xué)習(xí)了一周了一直沒有什么進展,盡管也理解了一些東西,但是一直不明白ucos是怎樣來調(diào)度任務(wù),就拿我剛下載的一個移植程序來說吧,一直不懂任務(wù)怎么跑的,還請萬能的論壇能幫幫我,有那位朋友有ucos群的 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計
- 小型傾轉(zhuǎn)旋翼機的無刷直流電機驅(qū)動器設(shè)計
- 超高速攝影機電控系統(tǒng)設(shè)計
- 基于GPS自動授時的無線智能控制器的設(shè)計
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機載穩(wěn)定云臺控制系統(tǒng)的設(shè)計
- 匠芯創(chuàng)推出面向具身智能高性能實時處理器M7000
- 宇稱電子發(fā)布8通道多閾值A(chǔ)SIC芯片:重構(gòu)激光雷達(dá)產(chǎn)業(yè)格局,開啟“ASIC平權(quán)”時代
- 三星SDI與LGES將在美國設(shè)置磷酸鐵鋰電池生產(chǎn)線
- 福特汽車公司申請新專利 或?qū)⒋钶d車輛噪音控制系統(tǒng)
- 福特汽車申請新專利 福特Pro Power Onboard或新增安全模式
- 華為乾崑如何驅(qū)動中國智能汽車產(chǎn)業(yè)共創(chuàng)?
- 激光雷達(dá)VS純視覺,小米小鵬隔空交鋒
- 機器人實現(xiàn)空中變形 飛行與地面行駛模式無縫切換
- -35℃直充技術(shù)顛覆革新,邢東鋰電引領(lǐng)低溫電池進入“直充時代”!
- 硬核解讀:人形機器人跑“半馬”映射出哪些產(chǎn)業(yè)問題
- V2X 連接器產(chǎn)品綜述
- 定時器中斷為什么主函數(shù)去掉while(1),燈就不閃爍了
- WINCE下用PB做成的NK。NB0和NK。BIN有32M??
- 求教個有關(guān)單片機的問題,請求高手解答
- 如何用Labview來對Ginkgo 2進行二次開發(fā)
- TI DLP®可不止投影顯示這么簡單?讀專題,了解TI DLP®技術(shù)!
- 一起玩樹莓派3 + 使用WiringPi控制樹莓派的I2C口讀取外部FRAM
- ADI最新中文大匯總
- 發(fā)一個雙D觸發(fā)器的應(yīng)用
- wince設(shè)備 usb 盤符的問題
- 【NUCLEO-L452RE測評】用STM32 Nucleo Power GUI tool快速評估各模式功耗狀況