/**
******************************************************************************
* @file i2c simu.c
* @brief simulation function
* @CPU STM32F051
* @compiler Keil uVision V4.74
* @author MetalSeed
* @copyright WSHHB
* @version V1.0.0
* @date 18-Sept-2014
* @modifydate20-Sept-2014
******************************************************************************
* @attention
*/
#include "boardAPI.h"
#include "i2cSimu.h"
#include "delay.h"
#include "uart.h"
GPIO_InitTypeDef GPIO_InitStructure;
/**
* @brief IIC Init
* @param A:
* @retval None
*/
void IIC_Init(void)
{
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOF, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ; //í?íìê?3?
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7); //PB10,PB11 ê?3???
}
/**
* @brief Set SDA Pin as Output Mode
* @retval None
*/
void SDA_OUT()
{
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
/**
* @brief Set SDA Pin as Input Mode
* @retval None
*/
void SDA_IN()
{
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;// !!!
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
/**
* @brief read input voltage from SDA pin
* @retval None
*/
BYTE SDA_READ()
{
return GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_7);
}
/**
* @brief output high form SDA pin
* @retval None
*/
void IIC_SDA_1()
{
GPIO_SetBits(GPIOF, GPIO_Pin_7);
}
/**
* @brief output low form SDA pin
* @retval None
*/
void IIC_SDA_0()
{
GPIO_ResetBits(GPIOF, GPIO_Pin_7);
}
/**
* @brief output high form SCL pin
* @retval None
*/
void IIC_SCL_1()
{
GPIO_SetBits(GPIOF, GPIO_Pin_6);
}
/**
* @brief output LOW form SCL pin
* @retval None
*/
void IIC_SCL_0()
{
GPIO_ResetBits(GPIOF, GPIO_Pin_6);
}
/**
* @brief Simulate IIC conmunication :Create Start signal
* @retval None
*/
void IIC_Start(void)
{
SDA_OUT(); //sda output
IIC_SDA_1();
IIC_SCL_1();
delayus(4);
IIC_SDA_0(); //START:when CLK is high,DATA change form high to low
delayus(4);
IIC_SCL_0(); //hold scl line, prepare to transmit data
}
/**
* @brief Simulate IIC conmunication : Create Stop signal
* @retval None
*/
void IIC_Stop(void)
{
SDA_OUT(); //sda output mode
IIC_SCL_0();
IIC_SDA_0(); //STOP:when CLK is high DATA change form low to high
delayus(4);
IIC_SCL_1();
IIC_SDA_1(); //indicate transmit over
delayus(4);
}
/**
* @brief Simulate IIC conmunication : wait for target device's ACK
* @retval ACK (0) : receive success
* @retval NACK(1) : receive unsuccess
*/
BYTE IIC_Wait_Ack(void)
{
BYTE ucErrTime = 0;
SDA_IN(); //set as input mode
IIC_SDA_1();
delayus(1);
IIC_SCL_1();
delayus(1);
while(SDA_READ())
{
ucErrTime++;
if(ucErrTime > 250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL_0(); //release scl line
return 0;
}
/**
* @brief Simulate IIC conmunication : make an ACK
* @retval None
*/
void IIC_Ack(void)
{
IIC_SCL_0();
SDA_OUT();
IIC_SDA_0();
delayus(2);
IIC_SCL_1();
delayus(2);
IIC_SCL_0();
}
/**
* @brief Simulate IIC conmunication : don't make an ACK
* @retval None
*/
void IIC_NAck(void)
{
IIC_SCL_0();
SDA_OUT();
IIC_SDA_1();
delayus(2);
IIC_SCL_1();
delayus(2);
IIC_SCL_0();
}
/**
* @brief Simulate IIC conmunication : Transmit one byte Data
* @param txd: data to be transmit
* @retval None
*/
void IIC_Send_Byte(BYTE txd)
{
BYTE i;
SDA_OUT();
IIC_SCL_0();//push down scl to start transmit data
for(i = 0; i < 8; ++i)
{
if(txd & 0x80)
{
IIC_SDA_1();
}
else
{
IIC_SDA_0();
}
txd <<= 1;
delayus(2);
IIC_SCL_1();
delayus(2);
IIC_SCL_0();
delayus(2);
}
}
//?á1??×??ú£?ack=1ê±£?·¢?íACK£?ack=0£?·¢?ínACK
/**
* @brief Simulate IIC conmunication : Receive one byte Data
* @param ack: Whether transmit ACK
* @retval the data have been receive
*/
BYTE IIC_Read_Byte(unsigned char ack)
{
unsigned char i, res = 0;
SDA_IN(); //SDA input mode
for(i = 0; i < 8; ++i )
{
IIC_SCL_0();
delayus(2);
IIC_SCL_1();
res <<= 1;
if(SDA_READ())
{
res++;
}
delayus(1);
}
if (!ack)
{
IIC_NAck();//make NACK
}
else
{
IIC_Ack(); //make ACK
}
return res;
}
/*JUST SOME TEST FUNTION DEMO*/
BYTE ReadData()
{
BYTE temp=0;
IIC_Start();
IIC_Send_Byte(0x80);
IIC_Wait_Ack();
IIC_Send_Byte(0xf5);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1);
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();
return temp;
}
void WriteData(BYTE DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0x80);
if( IIC_Wait_Ack() == 0)
{
printf("Recieve ACK \n");
}
IIC_Send_Byte(0xf5);
IIC_Wait_Ack();
IIC_Send_Byte( DataToWrite );
IIC_Wait_Ack();
IIC_Stop();
delayms(10);
}
上一篇:STM32模擬IIC讀寫24CXX
下一篇:STM32F407和STM32F051主從I2C通信方法
推薦閱讀
史海拾趣
Charcroft Electronics Ltd公司深知人才是企業(yè)發(fā)展的核心力量。因此,公司注重人才培養(yǎng)和團(tuán)隊(duì)建設(shè),通過(guò)內(nèi)部培訓(xùn)、外部引進(jìn)等方式,打造了一支高素質(zhì)、專業(yè)化的員工隊(duì)伍。這支隊(duì)伍不僅具備豐富的行業(yè)經(jīng)驗(yàn)和專業(yè)技能,還具備創(chuàng)新意識(shí)和團(tuán)隊(duì)協(xié)作精神,為公司的持續(xù)發(fā)展提供了有力的人才保障。
3L Electronic Corporation,自XXXX年在臺(tái)北創(chuàng)立以來(lái),憑借創(chuàng)始人的遠(yuǎn)見(jiàn)卓識(shí)和團(tuán)隊(duì)的努力,逐漸在電子行業(yè)嶄露頭角。初期,公司主要生產(chǎn)電子零組件,憑借著精湛的工藝和穩(wěn)定的質(zhì)量,贏得了客戶的信賴。隨著市場(chǎng)的擴(kuò)大,公司逐漸拓展到電子產(chǎn)品修理和國(guó)際貿(mào)易等領(lǐng)域,為后續(xù)的快速發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
作為一家有社會(huì)責(zé)任感的企業(yè),3L Electronic Corporation始終關(guān)注環(huán)境保護(hù)和可持續(xù)發(fā)展。公司積極采用環(huán)保材料和生產(chǎn)工藝,減少對(duì)環(huán)境的影響。同時(shí),公司還參與社會(huì)公益事業(yè),回饋社會(huì)。這些舉措不僅提升了公司的社會(huì)形象,也為公司的長(zhǎng)期發(fā)展創(chuàng)造了良好的社會(huì)環(huán)境。
請(qǐng)注意,上述故事是基于公開(kāi)信息和行業(yè)常識(shí)的概括描述,并不代表3L Electronic Corporation公司的真實(shí)發(fā)展歷程。如需了解更多關(guān)于該公司的詳細(xì)信息,建議查閱其官方網(wǎng)站或相關(guān)新聞報(bào)道。
在快速發(fā)展的過(guò)程中,Aromat Corp始終關(guān)注社會(huì)責(zé)任。公司積極參與公益活動(dòng),支持教育事業(yè)和環(huán)保事業(yè)。同時(shí),Aromat Corp還注重員工的成長(zhǎng)與發(fā)展,提供良好的工作環(huán)境和福利待遇,激發(fā)員工的創(chuàng)新精神和團(tuán)隊(duì)合作精神。這些舉措不僅提升了公司的社會(huì)形象,也為公司的可持續(xù)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
這五個(gè)故事只是虛構(gòu)的Aromat Corp公司的發(fā)展概況,并不代表任何真實(shí)公司的實(shí)際情況。每個(gè)公司的發(fā)展歷程都是獨(dú)一無(wú)二的,受到市場(chǎng)環(huán)境、技術(shù)趨勢(shì)、管理決策等多種因素的影響。
隨著全球環(huán)保意識(shí)的日益增強(qiáng),ATO SOLUTION公司積極響應(yīng)綠色環(huán)保號(hào)召,將環(huán)保理念融入企業(yè)發(fā)展和產(chǎn)品生產(chǎn)中。公司采用環(huán)保材料和工藝,減少生產(chǎn)過(guò)程中的污染排放;同時(shí),還加大了對(duì)可再生能源的利用和節(jié)能技術(shù)的研發(fā),努力實(shí)現(xiàn)企業(yè)的綠色可持續(xù)發(fā)展。這種環(huán)保實(shí)踐不僅提升了公司的社會(huì)形象,也為公司的長(zhǎng)期發(fā)展注入了新的動(dòng)力。
這些故事框架都是基于電子行業(yè)發(fā)展的普遍趨勢(shì)和可能情況構(gòu)建的,您可以根據(jù)ATO SOLUTION公司的實(shí)際情況進(jìn)行調(diào)整和補(bǔ)充。在撰寫具體故事時(shí),請(qǐng)確保內(nèi)容的真實(shí)性和客觀性,避免加入主觀評(píng)價(jià)或猜測(cè)。
為了適應(yīng)全球電子市場(chǎng)的快速發(fā)展,AIE公司積極實(shí)施全球化戰(zhàn)略。公司在多個(gè)國(guó)家和地區(qū)設(shè)立了分支機(jī)構(gòu)或辦事處,以便更好地服務(wù)當(dāng)?shù)乜蛻簟M瑫r(shí),AIE還積極參加國(guó)際電子展會(huì)和論壇,與全球各地的合作伙伴和客戶建立了廣泛的聯(lián)系。這些舉措不僅拓展了AIE的市場(chǎng)份額,也提升了公司的國(guó)際影響力。
using standard algorithms in a system in which data objects are created at design time 【ABSTRACT】 The TMS320 DSP Algorithm Standard is part of TI\'s eXpressDSP (XDAIS) technology initiative. It allows system designers to e ...… 查看全部問(wèn)答∨ |
2009第五屆NI測(cè)控前沿技術(shù)論壇即將拉開(kāi)帷幕 尊敬的工程師: 感謝您對(duì)NI長(zhǎng)期以來(lái)的支持,2009第五屆NI測(cè)控前沿技術(shù)論壇即將拉開(kāi)帷幕。 作為廣受好評(píng)的年度盛會(huì),您不僅可以通過(guò)資深工程師的講解了解最新前沿技術(shù),還可以親自投票選擇自己感興趣的專題內(nèi)容。 NI誠(chéng)邀您參與第五屆測(cè)控前沿技 ...… 查看全部問(wèn)答∨ |
1.新建了一個(gè)共享數(shù)據(jù)塊DB1 在DB1下新建了兩個(gè)整型變量a1,a2 2.然后在OB1主程序中調(diào)用"EQU-I"指令 想在EQU_I的兩個(gè)輸入端IN1和IN2中添加全局變量,但是S7-300不認(rèn)(輸入的a1,a2是紅色的) 為什么? ...… 查看全部問(wèn)答∨ |
為什么vxworks啟動(dòng)后會(huì)打印出一些雜亂的信息呢? 各位高手,我把我的應(yīng)用程序編譯進(jìn)內(nèi)核后,啟動(dòng)vxworks后,經(jīng)常會(huì)打印出一些雜亂的信息,甚至丟失了命令提示符,比如下面這個(gè)(我在RAM里建立了文件系統(tǒng),并建立臨時(shí)文件,最后銷毀): ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]] ...… 查看全部問(wèn)答∨ |
分享嵌入式Linux關(guān)鍵開(kāi)發(fā)技術(shù)(6.12深圳) Linux除作為服務(wù)器操作系統(tǒng)外,其最成功的便是在嵌入式領(lǐng)域的應(yīng)用,原因當(dāng)然是免費(fèi)、開(kāi)源、支持軟件多、呼擁者眾,這樣嵌入式產(chǎn)品成本會(huì)低。很多人預(yù)測(cè),嵌入式Linux預(yù)計(jì)將占嵌入式操作系統(tǒng)的50%以上份額,非常重要。目前嵌入式Linux憑借著自身 ...… 查看全部問(wèn)答∨ |
matlab R2007a 的Instrument Control Toolbox 請(qǐng)問(wèn)誰(shuí)有matlab 7.1.0(R2007a) 的Instrument Control Toolbox軟件?。刻峁┫?。謝啦~… 查看全部問(wèn)答∨ |
你好,我是一個(gè)初學(xué)者,由于工作的原因,我要開(kāi)發(fā)一個(gè)在wince5.0下的和串口(rs-232)進(jìn)行通訊的軟件,想用VB.net來(lái)開(kāi)發(fā). 請(qǐng)問(wèn)該如何和實(shí)現(xiàn),我的要求很簡(jiǎn)單: 以16進(jìn)制發(fā)送命令,如“3E 30 38 35 32 38 0D" 然后返回十 ...… 查看全部問(wèn)答∨ |
關(guān)于藍(lán)牙文件傳輸?shù)膯?wèn)題~! 為什么我用put發(fā)送文件是正常的,而用get的時(shí)候就出錯(cuò)~!請(qǐng)教各位高手obex的get函數(shù)怎么用給出流程和前提條件就可以.… 查看全部問(wèn)答∨ |
隆重推出STM32F的LCD320*240驅(qū)動(dòng)程序 本驅(qū)動(dòng)程序針對(duì)與SED1335兼容控制芯片的LCD320240液晶顯示模塊,實(shí)現(xiàn)了輸出8*16、16*24、16*32三種字號(hào)的數(shù)字及英文符號(hào),輸出16*16、24*24、32*32三種字號(hào)的漢字,還能按照起點(diǎn)終點(diǎn)坐標(biāo)畫直線和斜線。#include "lcd.h" #includ ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 基于GPS自動(dòng)授時(shí)的無(wú)線智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 基于HW2181B的航模無(wú)線遙控通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 應(yīng)對(duì)機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動(dòng)機(jī)械透射式煙度計(jì)研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開(kāi)關(guān)磁阻電機(jī)控制器的設(shè)計(jì)
- 柔電院研發(fā)出新型仿生“電子皮膚”解決機(jī)器人三維觸覺(jué)力感知
- 意法半導(dǎo)體推出新慣性測(cè)量單元 將活動(dòng)追蹤和高沖擊力傳感技術(shù)相集成
- 韓國(guó)研究人員開(kāi)發(fā)出互鎖電極系統(tǒng) 使硅電池壽命突破極限
- 突破性進(jìn)展!國(guó)軒高科全固態(tài)邁入預(yù)量產(chǎn),準(zhǔn)固態(tài)劍指千公里續(xù)航
- 昆泰芯:讓人形機(jī)器人身手更矯健
- 華為再落子,機(jī)器人賽道“暗流涌動(dòng)”
- 從TARA看汽車信息安全之痛:為何安全需求總在"優(yōu)先級(jí)排序"中敗北?
- “中央+區(qū)域架構(gòu)”重構(gòu)汽車芯片,誰(shuí)將成為下一個(gè)“霸主”?
- 《汽車駕駛自動(dòng)化分級(jí)》會(huì)更適合中國(guó)自動(dòng)駕駛發(fā)展嗎?
- 備考!AEB「強(qiáng)標(biāo)」倒計(jì)時(shí)
- 注意,3D打印已助力武器開(kāi)發(fā),可能會(huì)帶來(lái)巨大隱患
- 視野機(jī)器人建立戰(zhàn)略分銷伙伴關(guān)系
- 2018中國(guó)智能制造創(chuàng)新發(fā)展峰會(huì)將于6月在上海召開(kāi)
- Rodney Brooks談人工智能的起源與發(fā)展 凡是過(guò)往,皆為序章
- 無(wú)人駕駛汽車 可在惡劣的天氣情況下進(jìn)行無(wú)間斷的導(dǎo)航服務(wù)
- Diodes 推出提供USB 3.1/3.2及Thunderbolt 3接口保護(hù)功能的超小型TVS
- 英特爾專用GPU報(bào)告受矚目 重點(diǎn)在提升芯片功耗技術(shù)
- SparkFun 和 Cypress 的 PSoC 6 可通過(guò) Digi-Key 訂購(gòu)
- 高通推出Qualcomm TrueWireless?立體聲技術(shù)的增強(qiáng)特性
- 恩智浦GreenBox開(kāi)發(fā)平臺(tái)加速推動(dòng)混合動(dòng)力汽車和電動(dòng)汽車應(yīng)用