久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM8S003F3關(guān)于IIC的STVD例子
[打印本頁]
作者:
youxi297
時(shí)間:
2018-3-3 18:35
標(biāo)題:
STM8S003F3關(guān)于IIC的STVD例子
STM8S003的IIC總是令人頭大。現(xiàn)在附上一個(gè)STVD的例子。驗(yàn)證可以通過的
對于stm8,用庫函數(shù)操作,上手容易,但是有好也有壞。這次手頭上用到的是8S003這個(gè)芯片,如果上庫函數(shù),8M的內(nèi)存很快就會被消耗殆盡,所以只能上寄存器操作,其實(shí)自己本人是比較喜歡直接操作寄存器的,對于stm8來說,寄存器也不是特別的多,一個(gè)一個(gè)來配置也不是特別麻煩,對于底層,也能有一個(gè)較好的了解,而除了前邊所說的內(nèi)存優(yōu)勢,執(zhí)行效率也是有所差別。 stm8的iic,網(wǎng)上可謂是罵聲一片啊,哈哈,這次調(diào)試之后發(fā)現(xiàn)確實(shí)是不夠優(yōu)秀,操作繁瑣,而最重要的一點(diǎn)便是通訊速度的控制,通過對時(shí)鐘寄存器的操作,來選擇通訊速度,可是卻和通過手冊公式所計(jì)算出來的有很大差別,而最要命的一點(diǎn)是時(shí)鐘上升沿時(shí)間,在寄存器中有一控制上升時(shí)間的寄存器,可是實(shí)際中通過示波器觀察波形發(fā)現(xiàn)卻是沒有多大效果,或者說是沒有效果(我的電路連接是iic引腳掛載一個(gè)24C02從設(shè)備,上拉電阻4K7)。
實(shí)際測試中,上升時(shí)間非常慢,對于100K的速度來說,這個(gè)上升時(shí)間太長了,再加上干擾或其他因素,極有可能大大降低通訊的可靠性。測試了一下,100K的速度,能正常驅(qū)動24C02(未長時(shí)間大數(shù)據(jù)量測試),而上400K的速度,通訊失敗是常有的事。而手冊中卻是說著支持100K和400K的速度,且還有寄存器位專門來設(shè)置400K速度下的配置,正常來說是應(yīng)該能上400K的速度才對。不知是否是我理解有誤,配置的不好...!
誰弄過這個(gè)iic的,交流一下...!
上傳我的工程文件,STVD,程序中各種while()的等待均沒有設(shè)置超時(shí)退出。
程序是通過運(yùn)行后在仿真窗口中觀察變量來確認(rèn)對24C02的讀寫。
單片機(jī)源程序如下:
/*
STM8硬件IIC,不用庫的例子。
有空想試試STM8的硬件IIC讀寫24C02,結(jié)果不像軟件模擬那么簡單。。
為了一步一步驗(yàn)證讀寫程序,先用編程器把數(shù)據(jù)寫到EEPROM內(nèi)。然后就調(diào)試讀的程序。。。
漫漫長的一天。。。終于成功。
*/
//記得配置選項(xiàng)字。
//SDA,SCL要上拉4.7K-10K的電阻。。
//相應(yīng)端口要配置成默認(rèn)的浮動輸入。。。一定要。。
void IIC_Init(void)
{
//I2C_FREQR和I2C_CCRL,CCRH ,I2C_TRISER要對應(yīng)fMASTER頻率計(jì)算。。但測試的效果來看好像又沒什么影響。
I2C_FREQR |= 0x0c; //輸入外設(shè)時(shí)鐘頻率為11.0592MHz
I2C_CR1 = 0x00; //禁止I2C外設(shè)
I2C_TRISER = 0x0c;
I2C_CCRL = 0x37;
I2C_CCRH = 0x00;
I2C_CR1 |= 0x01; //開啟I2C外設(shè)
I2C_CR2 |= 0x04; //應(yīng)答使能
I2C_OARL = 0xfe; //自身地址
I2C_OARH = 0x40;
}
//讀寫之間插入3.5ms以上的延時(shí),24C02寫的時(shí)候不能應(yīng)答。
//寫24c02,參數(shù):地址,長度1-16,數(shù)據(jù)緩沖
void Write_24c02(unsigned char address,unsigned char number,unsigned char *data)
{
unsigned char temp,i;
I2C_CR2 &=~ 0x04; //不返回應(yīng)答
while(I2C_SR3 & 0x02); //等待總線空閑
I2C_CR2 |= 0x01; //產(chǎn)生起始位
while(!(I2C_SR1 & 0x01)); //等待START發(fā)送完
I2C_DR = 0xa0; //發(fā)24c02器件地址
while(!(I2C_SR1 & 0x02)); //等特7位器件地址發(fā)送完
temp = I2C_SR1;
temp = I2C_SR3;
I2C_DR = address;
while(!(I2C_SR1 & 0x04));
for(i=0;i<number;i++)
{
I2C_DR = *(data+i);
while(!(I2C_SR1 & 0x04));
}
I2C_CR2 |= 0x02; //產(chǎn)生停止位
I2C_CR2 |= 0x04; //返回應(yīng)答
}
//讀24C02,參數(shù):返回的字節(jié)緩沖,開始地址,要讀的字節(jié)數(shù)。
void Read_24c02(unsigned char *pBuffer,unsigned char address,unsigned char Number)
{
unsigned char temp,r_data;
while(I2C_SR3 & 0x02); //等待總線空閑
I2C_CR2 |= 0x01; //產(chǎn)生起始位
while(!(I2C_SR1 & 0x01)); //等待START發(fā)送完
I2C_DR = 0xa0; //發(fā)24c02器件地址
while(!(I2C_SR1 & 0x02)); //等特7位器件地址發(fā)送完
temp = I2C_SR1;
temp = I2C_SR3;
I2C_DR = address;
while(!(I2C_SR1 & 0x84));
I2C_CR2 |= 0x01; //產(chǎn)生重復(fù)起始位
while(!(I2C_SR1 & 0x01)); //等待START發(fā)送完
I2C_DR = 0xa1; //讀
while(!(I2C_SR1 & 0x02)); //等特7位器件地址發(fā)送完
temp = I2C_SR1;
temp = I2C_SR3;
while(Number) //要讀幾個(gè)字節(jié)
{
if(Number== 1)
{
I2C_CR2 &= ~0x04; //不返回應(yīng)答
I2C_CR2 |= 0x02; //產(chǎn)生停止位
}
if(I2C_SR1 & 0x40)
{
temp = I2C_SR1;
*pBuffer = I2C_DR;
pBuffer++;
Number--;
}
}
I2C_CR2 |= 0x04;
I2C_CR2 &= ~0x08;
}
/////
IIC_Init();
Read_24c02(buffer,0x0f,5);
for(i=0;i<5;i++)
{
while(!(UART2_SR&0x80)); //檢測發(fā)送寄存器為空
UART2_DR = buffer[i];
while(!(UART2_SR&0x40)); //發(fā)送完成*/
}
for(vti=0;vti<5000;vti++); //延時(shí)一段時(shí)間再讀呀。。。注意!!
buffer[0]=0xaa;
buffer[1]=0xbb;
buffer[2]=0xcc;
buffer[3]=0xdd;
buffer[4]=0xee;
Write_24c02(0x00,5,buffer);
for(vti=0;vti<5000;vti++); //延時(shí)一段時(shí)間再讀呀。。。注意!!
Read_24c02(buffer,0x00,5);
for(i=0;i<5;i++)
{
while(!(UART2_SR&0x80)); //檢測發(fā)送寄存器為空
UART2_DR = buffer[i];
while(!(UART2_SR&0x40)); //發(fā)送完成*/
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DE:IAR
MCU:STM8S105C6
外設(shè)IC:PL1167(2.4GRF)
下面貢獻(xiàn)一下兩個(gè)關(guān)鍵函數(shù)
void Write2Byte(u8 RomAddress,u8 v1,u8 v2)
{
SS_ENABLE;
I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_TX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
I2C_SendData(RomAddress);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));
I2C_SendData(v1);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));
I2C_SendData(v2);
while(!I2C_GetFlagStatus(I2C_FLAG_TRANSFERFINISHED));
I2C_GenerateSTOP(ENABLE);
SS_DISABLE;
}
u16 PL1167_Read2Byte(u8 RomAddress)
{
u8 dat1,dat2;
u16 dat;
dat1=0;
dat2=0;
dat=0;
SS_ENABLE;
I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_TX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
I2C_SendData(RomAddress);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));
I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_RX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
while(!I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY));
I2C_AcknowledgeConfig(I2C_ACK_CURR);
dat1=I2C_ReceiveData();
I2C_AcknowledgeConfig(I2C_ACK_NONE);
while(!I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY));
dat2=I2C_ReceiveData();
I2C_GenerateSTOP(ENABLE);
dat|=dat1;
dat<<=8;
dat|=dat2;
SS_DISABLE;
return dat;
}
復(fù)制代碼
所有資料51hei提供下載:
103244822STM8S-IIC.rar
(51.92 KB, 下載次數(shù): 94)
2018-3-3 18:35 上傳
點(diǎn)擊文件名下載附件
IIC例程 STVD
下載積分: 黑幣 -5
作者:
ekun2006
時(shí)間:
2018-9-7 21:56
頂一下
作者:
netbeetle
時(shí)間:
2018-9-7 23:28
STVD還真是少用哦,一般都用IAR。
作者:
fly_apple
時(shí)間:
2018-12-5 11:13
代碼收下,有空試試。謝謝樓主
作者:
batihai
時(shí)間:
2019-10-13 15:52
正是我想?yún)⒖嫉拇a,多謝!
作者:
ewewew
時(shí)間:
2020-3-13 10:49
正是我想?yún)⒖嫉拇a,多謝!
作者:
405935987
時(shí)間:
2020-3-20 17:07
過來學(xué)習(xí)一下
作者:
kk一家
時(shí)間:
2023-11-17 16:47
非常好,正是我想用的
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲在线观看视频
|
日韩欧美网站
|
99爱视频
|
一级黄色性生活片
|
日韩精品一区二区三区四区
|
国产深夜福利
|
日韩一区二区免费视频
|
亚洲天堂网址
|
爱爱免费网站
|
国产视频一二区
|
av片在线观看
|
夜夜操狠狠操
|
中文久久久
|
av影院在线
|
国产精品福利在线观看
|
亚洲男人av
|
午夜免费观看视频
|
天天干天天操天天插
|
国产精品久久久久久久午夜
|
国产一区二区三区在线视频
|
日本少妇做爰全过程毛片
|
亚洲一区免费观看
|
国产成人精品亚洲男人的天堂
|
久草免费福利视频
|
一区二区三区免费看
|
8x8ⅹ国产精品一区二区
|
亚洲裸体视频
|
国产小视频在线播放
|
天天拍夜夜操
|
99热在线播放
|
国产视频成人
|
日韩不卡av
|
精品一区二区三区免费
|
蜜桃精品噜噜噜成人av
|
少妇综合
|
免费的黄色网址
|
国产精品2
|
亚洲福利网站
|
色综合久久久久
|
亚洲成人精品
|
久久九九免费视频
|