用STM32F051的I2C從模式做某模塊的控制接口,通過主機(jī)讀狀態(tài)和寫控制命令。
Eclips 環(huán)境,gcc編譯器,相關(guān)源碼如下:
#ifdef DEBUG_I2C_EN
#define DEBUG_I2C(...) printf(__VA_ARGS__)
#else
#define DEBUG_I2C(...)
#endif
void I2C_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
// I2C port
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_1);
// I2C config
I2C_InitStructure.I2C_Timing = 0x00731012;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x00;
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_OwnAddress1 = DEV_SLAVE_ADDR;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Cmd(I2C1, ENABLE);
I2C_StretchClockCmd(I2C1, DISABLE);
NVIC_InitStructure.NVIC_IRQChannel = I2C1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 2; // Low Medium Hight VeryHigh: 0 - 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
uint32_t temp = I2C_IT_STOPI |
I2C_IT_ADDRI |
I2C_IT_RXI |
I2C_IT_TXI;
I2C_ITConfig(I2C1, temp, ENABLE);
}
static uint8_t Instruct = 0;
static uint8_t Offset = 0;
static uint8_t MaxBytes = 0;
uint8_t *TxBuff;
uint8_t RxBuff[40];
void I2C1_IRQHandler(void)
{
uint8_t temp;
uint32_t status = I2C1->ISR;
DEBUG_I2C("I2C1->ISR: %08Xnr", status);
if(status & I2C_ISR_ADDR)
{ // I2C1 Address match event occurs
I2C_ClearITPendingBit(I2C1, I2C_ISR_ADDR);
if(status & I2C_ISR_DIR)
{ // I2C1: slave enters transmitter mode.
;
}
else
{ // I2C1: slave enters receiver mode.
Instruct = 1;
}
Offset = 0;
}
else if(status & I2C_ISR_RXNE)
{
I2C1->ISR |= I2C_ISR_TXE;
temp = I2C_ReceiveData(I2C1);
if(Instruct)
{ // Host Instruct
switch(temp)
{
case 0x00: // Get DevInfo
TxBuff = (uint8_t *)&DevInfo; // 24 bytes
MaxBytes = sizeof(DevInfo);
break;
case 0x18: // Get DevStatus
TxBuff = (uint8_t *)&DevStatus; // 8 bytes
MaxBytes = sizeof(DevStatus);
break;
default: break;
}
Instruct = 0;
}
RxBuff[Offset++] = temp;
}
else if(status & I2C_ISR_TXIS)
{
I2C1->ISR |= I2C_ISR_TXE;
if(Offset < MaxBytes)
{
I2C_SendData(I2C1, TxBuff[Offset++]);
}
else
{
I2C_SendData(I2C1, 0xFF);
}
}
else if(status & I2C_ISR_STOPF)
{
I2C_ClearITPendingBit(I2C1, I2C_ISR_STOPF);
DEBUG_I2C("I2C1 Host stop, Bytes: %dnr", Offset);
; // 指令解析
;
}
else
{
I2C_ClearITPendingBit(I2C1, 0x00003F38);
printf("I2C1 Unknown event occurs!nr");
}
}
上一篇:STM32學(xué)習(xí)——uCGUI移植
下一篇:【STM32CUBEMX】HAL 庫的 Timeout=1 異常分析
推薦閱讀
史海拾趣
進(jìn)入21世紀(jì),Cree在功率器件領(lǐng)域取得了重大突破。2004年,Cree開始大范圍采用氮化鎵(GaN)材料,并成功將其應(yīng)用于大功率RF器件產(chǎn)品設(shè)計(jì)。這些GaN射頻器件主要服務(wù)于美國軍工領(lǐng)域,如“薩德”導(dǎo)彈防御系統(tǒng),其超寬的頻率覆蓋和大功率射頻功率技術(shù)無人能及。這一技術(shù)的成功應(yīng)用,不僅提升了Cree的技術(shù)實(shí)力,也為其打開了新的市場空間。
為了滿足市場需求和降低成本,東晶電子不斷進(jìn)行產(chǎn)能擴(kuò)張和自動化升級。公司引進(jìn)了國際先進(jìn)的生產(chǎn)設(shè)備和技術(shù),提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。同時(shí),公司還加大了對自動化設(shè)備的投入,減少了人力成本,提高了生產(chǎn)效率。這些措施不僅提升了公司的競爭力,也為公司的長遠(yuǎn)發(fā)展奠定了基礎(chǔ)。
在電子產(chǎn)品同質(zhì)化日益嚴(yán)重的今天,Elpac公司始終堅(jiān)持品質(zhì)至上的原則。公司嚴(yán)格把控產(chǎn)品質(zhì)量,從原材料采購到生產(chǎn)流程再到售后服務(wù),每一個(gè)環(huán)節(jié)都力求做到最好。正是這種對品質(zhì)的執(zhí)著追求,讓Elpac公司的產(chǎn)品在市場上脫穎而出。許多客戶在體驗(yàn)過Elpac公司的產(chǎn)品后,都對其贊不絕口,成為了公司的忠實(shí)用戶。
Antenna Factor公司最初由幾位熱衷于無線通信技術(shù)的工程師創(chuàng)立。創(chuàng)業(yè)初期,他們面臨著資金短缺、技術(shù)難題和市場認(rèn)可度低等多重挑戰(zhàn)。然而,他們憑借著對技術(shù)的執(zhí)著和不懈的努力,成功開發(fā)出了一款具有高性價(jià)比的天線產(chǎn)品,并獲得了市場的初步認(rèn)可。這一突破性的產(chǎn)品為公司的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
隨著市場的不斷變化和技術(shù)的不斷進(jìn)步,Cygnal意識到需要持續(xù)創(chuàng)新以保持競爭力。因此,公司投入大量資源進(jìn)行研發(fā),成功開發(fā)出了基于32位架構(gòu)的新型微控制器。這款微控制器不僅性能強(qiáng)大,而且功耗極低,非常適合用于便攜式設(shè)備和物聯(lián)網(wǎng)應(yīng)用。這一技術(shù)突破使Cygnal在行業(yè)中獲得了領(lǐng)先地位。
隨著國內(nèi)市場的逐步飽和,Big-Sun Electronics Co Ltd公司開始將目光投向國際市場。公司積極參與國際電子展會,與海外客戶建立起了良好的合作關(guān)系。同時(shí),Big-Sun還與國際知名電子企業(yè)開展技術(shù)合作,共同研發(fā)新產(chǎn)品,進(jìn)一步提升了公司的國際競爭力。
中心議題: 以三相電路瞬時(shí)無功功率理論為基礎(chǔ),建立有源濾波器模型應(yīng)用MATLAB對其在某煤礦主提升機(jī)諧波治理方面的應(yīng)用進(jìn)行仿真驗(yàn)證 解決方案: 采用有源濾波器,可根據(jù)每個(gè)設(shè)備負(fù)載無功的變化進(jìn)行動態(tài)補(bǔ)償諧波源模塊是根據(jù)主提升機(jī)房實(shí)際諧波測 ...… 查看全部問答∨ |
|
vs2005開發(fā)PDA,調(diào)試程序時(shí),用模擬器實(shí)驗(yàn),連數(shù)據(jù)庫IP地址設(shè)置為127.0.0.1用戶sa密碼為空,為什么連接不上,請指點(diǎn)?!? 查看全部問答∨ |
|
基于LaunchPad的【低功耗時(shí)鐘】我的DIY~~~~【【技術(shù)討論帖】】 東西的視頻照片在這個(gè)帖子里:https://bbs.eeworld.com.cn/viewthread.php?tid=309715&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D66 這次DIY其實(shí)已經(jīng)計(jì)劃了好長時(shí)間了,自從買了LaunchPad就一直想做點(diǎn)什么。后來論壇里 ...… 查看全部問答∨ |
有沒有關(guān)于MSP430F5438對AD轉(zhuǎn)換這方面的資料? 畢業(yè)論文需要用MSP430F5438來完成AD轉(zhuǎn)換。之前對MSP430F5438一竅不通,我知道MSP430F5438能完成很多功能,我只需要一些關(guān)于AD轉(zhuǎn)換的資料。有沒有人有?。抗蚕硪幌挛? [ 本帖最后由 adam136 于 2012-2-18 22:12 編輯 ]… 查看全部問答∨ |
1.5V干電池升壓到3.6V/6A,請問如何做擴(kuò)流電路?謝謝 用干電池,1.5V和3V輸入,升壓到3.6V,電流最大到6A,請問應(yīng)該如何做?希望有朋友可以指點(diǎn)一下,謝謝 我是想,不知下邊兩種方法是否可行: 如圖1,就是加大電感和場效應(yīng)管的電流通量, 或者如下圖,用達(dá)林頓管放大電流 … 查看全部問答∨ |
一開始發(fā)送30ms的高電平,然后再發(fā)送15ms一周期的脈沖波,占空比是2/3,假設(shè)時(shí)鐘是1kHz。困擾我很長時(shí)間了,希望各位大俠能給我指點(diǎn)一二萬分感謝??!… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 中國研究人員發(fā)明全新動作好奇心算法 增強(qiáng)不確定環(huán)境下的自主導(dǎo)航
- 技術(shù)解析|沃爾沃XC70超級混動有什么亮點(diǎn)?
- 小米汽車:磁吸物理按鍵已接入米家,可通過APP操控
- 專家專論 | 顧劍民:L2級輔助駕駛激光雷達(dá)“價(jià)格歸零”
- 近一個(gè)月投資五家!京東密集落子具身智能機(jī)器人賽道
- 海外動力電池裝車量TOP10:3家落榜 一新上榜中企暴增逾10倍
- 吉利汽車:全域AI守護(hù)輔助駕駛安全
- 松下汽車系統(tǒng)與VicOne深化合作 共拓新一代智能座艙系統(tǒng)安全創(chuàng)新
- 汽車MCU的“芯”浪潮
- 具身智能如何大規(guī)模推廣?丨具身智能機(jī)器人高質(zhì)量發(fā)展
- 我與BeagleBone 有個(gè)約會!
- 直播已結(jié)束【使用 TI 低成本 MSPM0 MCU 快速開發(fā) – 生態(tài)詳解系列之二】(9:45開始入場)
- 來聊聊你與MP3的情緣吧!——MP3播放板等你拿
- 你吐槽 我送書
- 了解設(shè)計(jì)完整AC-DC系統(tǒng)的快速低風(fēng)險(xiǎn)方法,輕松答題贏好禮
- 注冊有禮|看安富利人工智能云會展,贏京東卡啦!
- 2017 EEWORLD爆款直播回放云集,寫評論搶樓贏禮!
- 兆易創(chuàng)新GD32F350創(chuàng)新設(shè)計(jì)大賽
- Silicon Labs BG22-EK4108A 開發(fā)套件 用科技連接未來 申請進(jìn)行時(shí)!
- 游戲玩家的福利,NVIDIA新一代GTX顯卡將改頭換面
- 世強(qiáng)推出全新高集成度微電機(jī)驅(qū)動方案
- 長江存儲全球首創(chuàng)三維閃存研發(fā)技術(shù)
- 飛騰:未來會持續(xù)增加芯片研發(fā)投入
- 邁向AIoT時(shí)代,2018研華嵌入式設(shè)計(jì)論壇順利結(jié)束
- 基于51單片機(jī)的1602+ADC0832煙霧報(bào)警系統(tǒng)
- 汽車電子化方案優(yōu)化,安森美半導(dǎo)體向未來給出滿意答卷
- 基于MSP430單片機(jī)的SVS(電源電壓監(jiān)控器)模塊設(shè)計(jì)
- 安裝在擋風(fēng)玻璃后的激光雷達(dá),為自動駕駛車供實(shí)時(shí)3D地圖
- ZigBee實(shí)現(xiàn)多用戶智能電表
- 集成顯卡2012年被淘汰 嵌入式取而代之?會嗎?
- C# Mobile 為什么Cursor.Current = Cursors.WaitCursor;調(diào)不出WaitCursor???
- 百度連接不上,
- 我的25年嵌入式生涯
- Simulation of a Microstrip Patch Antenna for 2.4 GHz Applications with Radiat...
- 單片機(jī)C語言編程該怎么學(xué)?
- 一直對整流橋的這些參數(shù)模糊
- 圣誕座駕LED發(fā)光自行車
- 請問申請的套件有配燒錄器或者調(diào)試器之類的嗎
- 1.ModelSim中進(jìn)行時(shí)序仿真建立波形圖的方法