OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17246|回复: 10

【Alientek STM32 实验16】--IIC实验

[复制链接]

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2010-12-14 23:19:39 | 显示全部楼层 |阅读模式

3.16 IIC实验

 

这一节我们将向大家介绍IIC。本节将利用IIC来实现24C02的读写,并将结果显示在TFTLCD模块上。本节分为如下几个部分:

3.16.1 IIC简介

3.16.2 硬件设计

3.16.3 软件设计

3.16.4 下载与测试

 

3.16.1 IIC简介

 

IIC(InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。CPU与被控IC之间、ICIC之间进行双向传送,高速IIC总线一般可达400kbps以上。

I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。IIC总线时序图如下:


                          3.16.1.1 IIC总线时序图

ALIENTEK MiniSTM32开发板板载了EEPROM芯片:。该芯片的总容量是256个字节,该芯片通过IIC总线与外部连接,我们本节就通过STM32来实现24C02的读写。

目前大部分MCU都带有IIC总线接口,STM32也不例外。但是这里我们不使用STM32的硬件IIC来读写24C02,而是通过软件模拟。因为STM32IIC实在太难用了,一个很简单的东西,ST的人把它弄得很复杂,不得不说STM32IIC很鸡肋。所以我们这里就通过模拟来实现了。有兴趣的大家可以研究一下STM32的硬件IIC

本节实验功能简介:开机的时候先检测24C02是否存在,然后在主循环里面用1个按键用来执行写入24C02的操作,另外一个按键用来执行读出操作,在TFTLCD模块上显示相关信息。同时用DS0提示程序正在运行。

 

3.16.2 硬件设计

 

本节所要用到的硬件资源如下:

1STM32F103RBT6

2DS0(外部LED0)。

3KEY0KEY2

4TFTLCD液晶模块。

524C02

前面4部分的资源,我们前面已经介绍了,请大家参考相关章节。这里只介绍24C02STM32的连接,板上的24C02是直接连在STM32F103RBT6上的,连接关系如下图:


                                                     3.16.2.1  STM32F103RBT624C02连接图

 

3.16.3 软件设计

 

打开上一节的工程,首先在HARDWARE文件夹下新建一个24CXX的文件夹。然后新建一个24cxx.cmyiic.c的文件和24cxx.hmyiic.h的头文件,保存在24CXX文件夹下,并将24CXX文件夹加入头文件包含路径。

打开myiic.c文件,输入如下代码:

#include "myiic.h"

#include "delay.h"

//STM32软件模拟IICSTM32的硬件IIC太难用了!

//Mini STM32开发板

//IIC 驱动函数

//正点原子@ALIENTEK

//2010/6/10

//初始化IIC

void IIC_Init(void)

{                                                       

     RCC->APB2ENR|=1<<4;//先使能外设IO PORTC时钟                                                                             

     GPIOC->CRH&=0XFFF00FFF;//PC11/12 推挽输出

     GPIOC->CRH|=0X00033000;       

     GPIOC->ODR|=3<<11;     //PC11,12 输出高

}

//产生IIC起始信号

void IIC_Start(void)

{

     SDA_OUT();     //sda线输出

     IIC_SDA=1;                    

     IIC_SCL=1;

     delay_us(4);

     IIC_SDA=0;//START:when CLK is high,DATA change form high to low

     delay_us(4);

     IIC_SCL=0;//钳住I2C总线,准备发送或接收数据

}    

//产生IIC停止信号

void IIC_Stop(void)

{

     SDA_OUT();//sda线输出

     IIC_SCL=0;

     IIC_SDA=0;//STOP:when CLK is high DATA change form low to high

     delay_us(4);

     IIC_SCL=1;

     IIC_SDA=1;//发送I2C总线结束信号

     delay_us(4);                                                                                          

}

//等待应答信号到来

//返回值:1,接收应答失败

//        0,接收应答成功

u8 IIC_Wait_Ack(void)

{

     u8 ucErrTime=0;

     SDA_IN();      //SDA设置为输入  

     IIC_SDA=1;delay_us(1);              

     IIC_SCL=1;delay_us(1);

     while(READ_SDA)

     {

                 ucErrTime++;

                 if(ucErrTime>250)

                 {

                             IIC_Stop();

                             return 1;

                 }

     }

     IIC_SCL=0;//时钟输出0               

     return 0; 

}

//产生ACK应答

void IIC_Ack(void)

{

     IIC_SCL=0;

     SDA_OUT();

     IIC_SDA=0;

     delay_us(2);

     IIC_SCL=1;

     delay_us(2);

     IIC_SCL=0;

}

//不产生ACK应答                

void IIC_NAck(void)

{

     IIC_SCL=0;

     SDA_OUT();

     IIC_SDA=1;

     delay_us(2);

     IIC_SCL=1;

     delay_us(2);

     IIC_SCL=0;

}                                                                                                       

//IIC发送一个字节

//返回从机有无应答

//1,有应答

//0,无应答                                    

void IIC_Send_Byte(u8 txd)

{                       

    u8 t;  

     SDA_OUT();         

    IIC_SCL=0;//拉低时钟开始数据传输

    for(t=0;t<8;t++)

    {             

        IIC_SDA=(txd&0x80)>>7;

        txd<<=1;          

                 delay_us(2);   //TEA5767这三个延时都是必须的

                 IIC_SCL=1;

                 delay_us(2);

                 IIC_SCL=0;      

                 delay_us(2);

    }          

}       

//1个字节,ack=1时,发送ACKack=0,发送nACK  

u8 IIC_Read_Byte(unsigned char ack)

{

     unsigned char i,receive=0;

     SDA_IN();//SDA设置为输入

    for(i=0;i<8;i++ )

     {

        IIC_SCL=0;

        delay_us(2);

                 IIC_SCL=1;

        receive<<=1;

        if(READ_SDA)receive++;  

                 delay_us(1);

    }                                                          

    if (!ack)

        IIC_NAck();//发送nACK

    else

        IIC_Ack(); //发送ACK  

    return receive;

}

该部分为IIC驱动代码,实现包括IIC的初始化(IO口)、IIC开始、IIC结束、ACKIIC读写等功能,在其他函数里面,只需要调用相关的IIC函数就可以和外部IIC器件通信了,这里并不局限于24C02

保存该部分代码,把myiic.c加入到HARDWARE组下面,然后在myiic.h里面输入如下代码:

#ifndef __MYIIC_H

#define __MYIIC_H

#include "sys.h"

//Mini STM32开发板

//IIC 驱动函数

//正点原子@ALIENTEK

//2010/6/10

//IO方向设置

#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}

#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}

//IO操作函数        

#define IIC_SCL    PCout(12) //SCL

#define IIC_SDA    PCout(11) //SDA          

#define READ_SDA   PCin(11)  //输入SDA

//IIC所有操作函数

void IIC_Init(void);                //初始化IICIO                                     

void IIC_Start(void);                                               //发送IIC开始信号

void IIC_Stop(void);                                               //发送IIC停止信号

void IIC_Send_Byte(u8 txd);                                    //IIC发送一个字节

u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节

u8 IIC_Wait_Ack(void);                                          //IIC等待ACK信号

void IIC_Ack(void);                                                            //IIC发送ACK信号

void IIC_NAck(void);                                             //IIC不发送ACK信号

 

void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);

u8 IIC_Read_One_Byte(u8 daddr,u8 addr);     

#endif

     接下来我们在24cxx.c文件里面输入如下代码:

#include "24cxx.h"

#include "delay.h"

//Mini STM32开发板

//24CXX驱动函数(适合~24C16,24C32~256未经过测试!有待验证!)

//正点原子@ALIENTEK

//2010/6/10

//V1.2

 

//初始化IIC接口

void AT24CXX_Init(void)

{

     IIC_Init();

}

//AT24CXX指定地址读出一个数据

//ReadAddr:开始读数的地址 

//返回值  :读到的数据

u8 AT24CXX_ReadOneByte(u16 ReadAddr)

{                                        

     u8 temp=0;                                                                                                                                                                                            IIC_Start(); 

     if(EE_TYPE>AT24C16)

     {

                 IIC_Send_Byte(0XA0);     //发送写命令

                 IIC_Wait_Ack();

                 IIC_Send_Byte(ReadAddr>>8);//发送高地址

                 IIC_Wait_Ack();                       

     }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));  //发送器件地址0XA0,写数据          IIC_Wait_Ack();

    IIC_Send_Byte(ReadAddr%256);   //发送低地址

     IIC_Wait_Ack();               

     IIC_Start();                      

     IIC_Send_Byte(0XA1);           //进入接收模式                              

     IIC_Wait_Ack();           

    temp=IIC_Read_Byte(0);               

    IIC_Stop();//产生一个停止条件

     return temp;

}

//AT24CXX指定地址写入一个数据

//WriteAddr  :写入数据的目的地址   

//DataToWrite:要写入的数据

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)

{                                                                                                                                                                                                                                                                

    IIC_Start(); 

     if(EE_TYPE>AT24C16)

     {

                 IIC_Send_Byte(0XA0);      //发送写命令

                 IIC_Wait_Ack();

                 IIC_Send_Byte(WriteAddr>>8);//发送高地址

                 IIC_Wait_Ack();                       

     }else

     {

                 IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据

     }         

     IIC_Wait_Ack();              

    IIC_Send_Byte(WriteAddr%256);   //发送低地址

     IIC_Wait_Ack();                                                                                                                                                               

     IIC_Send_Byte(DataToWrite);     //发送字节                                                                                  

     IIC_Wait_Ack();                                       

    IIC_Stop();//产生一个停止条件

     delay_ms(10);   

}

//AT24CXX里面的指定地址开始写入长度为Len的数据

//该函数用于写入16bit或者32bit的数据.

//WriteAddr  :开始写入的地址 

//DataToWrite:数据数组首地址

//Len        :要写入数据的长度2,4

void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)

{ 

     u8 t;

     for(t=0;t<Len;t++)

     {

                 AT24CXX_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff);

     }                                                                                                                                                 

}

 

//AT24CXX里面的指定地址开始读出长度为Len的数据

//该函数用于读出16bit或者32bit的数据.

//ReadAddr   :开始读出的地址

//返回值     :数据

//Len        :要读出数据的长度2,4

u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)

{ 

     u8 t;

     u32 temp=0;

     for(t=0;t<Len;t++)

     {

                 temp<<=8;

                 temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1);                                                         

     }

     return temp;                                                                                                                                              

}

//检查AT24CXX是否正常

//这里用了24XX的最后一个地址(255)来存储标志字.

//如果用其他24C系列,这个地址要修改

//返回1:检测失败

//返回0:检测成功

u8 AT24CXX_Check(void)

{

     u8 temp;

     temp=AT24CXX_ReadOneByte(255);//避免每次开机都写AT24CXX                                  

     if(temp==0X55)return 0;                          

     else//排除第一次初始化的情况

     {

                 AT24CXX_WriteOneByte(255,0X55);

        temp=AT24CXX_ReadOneByte(255);   

                 if(temp==0X55)return 0;

     }

     return 1;                                                                                                                                     

}

 

//AT24CXX里面的指定地址开始读出指定个数的数据

//ReadAddr :开始读出的地址 24C020~255

//pBuffer  :数据数组首地址

//NumToRead:要读出数据的个数

void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead)

{

     while(NumToRead)

     {

                 *pBuffer++=AT24CXX_ReadOneByte(ReadAddr++);      

                 NumToRead--;

     }

} 

//AT24CXX里面的指定地址开始写入指定个数的数据

//WriteAddr :开始写入的地址 24C020~255

//pBuffer   :数据数组首地址

//NumToWrite:要写入数据的个数

void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)

{

     while(NumToWrite--)

     {

                 AT24CXX_WriteOneByte(WriteAddr,*pBuffer);

                 WriteAddr++;

                 pBuffer++;

     }

}

这部分代码理论上是可以支持24Cxx所有系列的芯片的(地址引脚必须都设置为0),但是我们测试只测试了24C02,其他器件有待测试。大家也可以验证一下,24CXX的型号定义在24cxx.h文件里面,通过EE_TYPE设置。

保存该部分代码,把24cxx.c加入到HARDWARE组下面,然后在24cxx.h里面输入如下代码:

#ifndef __24CXX_H

#define __24CXX_H

#include "myiic.h"  

//Mini STM32开发板

//24CXX驱动函数(适合~24C16,24C32~256未经过测试!有待验证!)

//正点原子@ALIENTEK

//2010/6/10

//V1.2

#define AT             127

#define AT24C02                255

#define AT24C04                511

#define AT24C08                1023

#define AT24C16                2047

#define AT24C32                4095

#define AT24C64        8191

#define AT24C128  16383

#define AT24C256  32767 

//Mini STM32开发板使用的是24C02,所以定义EE_TYPEAT24C02

#define EE_TYPE AT24C02

                                                      

u8 AT24CXX_ReadOneByte(u16 ReadAddr);                                                                                    //指定地址读取一个字节

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite);                    //指定地址写入一个字节

void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len);//指定地址开始写入指定长度的数据

u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len);                                                            //指定地址开始读取指定长度数据

void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite);            //从指定地址开始写入指定长度的数据

void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead);               //从指定地址开始读出指定长度的数据

 

u8 AT24CXX_Check(void);  //检查器件

void AT24CXX_Init(void); //初始化IIC

#endif

最后,我们在main函数里面编写应用代码,在test.c里面,修改main函数如下:

//要写入到24C02的字符串数组

const u8 TEXT_Buffer[]={"MiniSTM32 IIC TEST"};

#define SIZE sizeof(TEXT_Buffer)  

int main(void)

{              

     u8 key;

     u16 i=0;

     u8 datatemp[SIZE];

                               

     Stm32_Clock_Init(9);//系统时钟设置

     delay_init(72);               //延时初始化

     uart_init(72,9600); //串口1初始化  

     LED_Init();                               //LED初始化

     KEY_Init();                               //按键初始化

     LCD_Init();                   //TFTLCD液晶初始化

     AT24CXX_Init();                       //IIC初始化

 

 

     POINT_COLOR=RED;//设置字体为蓝色              

     LCD_ShowString(60,50,"Mini STM32");

     LCD_ShowString(60,70,"IIC TEST");    

     LCD_ShowString(60,90,"ATOM@ALIENTEK");

     LCD_ShowString(60,110,"2010/6/10");                          

     while(AT24CXX_Check())//检测不到24C02

     {

                 LCD_ShowString(60,130,"24C02 Check Failed!");

                 delay_ms(500);

                 LCD_ShowString(60,130,"Please Check!      ");

                 delay_ms(500);

                 LED0=!LED0;//DS0闪烁

     }

     LCD_ShowString(60,130,"24C02 Ready!");

     //显示提示信息

     LCD_ShowString(60,150,"KEY0:Write KEY2:Read");

 

     POINT_COLOR=BLUE;//设置字体为蓝色           

     while(1)

     {

                 key=KEY_Scan();

                 if(key==1)//KEY0按下,写入24C02

                 {

                             LCD_Fill(0,170,239,319,WHITE);//清除半屏   

                             LCD_ShowString(60,170,"Start Write 24C02....");

                             AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);

                             LCD_ShowString(60,170,"24C02 Write Finished!");//提示传送完成

                 }

                 if(key==3)//KEY1按下,读取字符串并显示

                 {

                             LCD_ShowString(60,170,"Start Read 24C02.... ");

                             AT24CXX_Read(0,datatemp,SIZE);

                             LCD_ShowString(60,170,"The Data Readed Is:  ");//提示传送完成

                             LCD_ShowString(60,190,datatemp);//显示读到的字符串

                 }

                 i++;

                 delay_ms(1);

                 if(i==200)

                 {

                             LED0=!LED0;//提示系统正在运行        

                             i=0;

                 }                        

     }

}

至此,我们的软件设计部分就结束了。

 

3.16.4 下载与测试

 

在代码编译成功之后,我们通过下载代码到ALIENTEK MiniSTM32开发板上,可以看到LCD显示如下内容:

                                                                    3.16.4.1 程序运行效果图

伴随DS0的不停闪烁,提示程序在运行。我们先按下KEY0,可以看到如图13.16.4.2所示的内容,证明数据已经被写入到24C02了。

                                                                3.16.4.2 数据成功写入24C02

接着我们按KEY2,可以看我们刚刚写入的数据被显示出来了,如下图所示:


                   3.16.4.3 显示写入的内容

程序在开机的时候会检测24C02是否存在,如果不存在则会在TFTLCD模块上显示错误信息,同时DS0慢闪。大家可以通过跳线帽把PC11PC12短接就可以看到报错了。

I2C-24C02实验.pdf

599.86 KB, 下载次数: 1138

ALIENTEK MINISTM32 实验16 IIC实验.rar

1.52 MB, 下载次数: 1656

希望openedv能给大家提供一个友好的技术交流平台!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2011-8-5
在线时间
0 小时
发表于 2011-8-27 15:55:20 | 显示全部楼层
怎么没用啊?烧好程序之后屏幕闪下就没了,但DS0还是在闪烁~~!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-8-27 17:39:41 | 显示全部楼层
回复【2楼】曙光的使者:
---------------------------------
那说明你的背光极性反了。
要看你的液晶版本是多少的?如果是V1.8的,就下载最新代码。
如果是V1.7及之前的版本,你就得把LCD_Init这个函数里面的LCD_LED=1改为LCD_LED=0;。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2011-8-1
在线时间
0 小时
发表于 2011-8-31 23:06:15 | 显示全部楼层
通过软件模拟IIC的操作早就被用作经典的教材了,怎么到了STM32还是这种老套!???
虽然使用STM32的硬件IIC来读写24C02比较复杂,但是有难度方显高度!!!
期待使用STM32的硬件IIC来读写24C02的实例!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-7-28
在线时间
0 小时
发表于 2013-12-22 15:29:07 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大哥  这条语句  IIC_Send_Byte(0XA1); //进入接收模式   是不是接受模式    还是标错了 ?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-22 20:19:55 | 显示全部楼层
回复【4楼】healthywolf:
---------------------------------
兄弟,你先用用吧。试过之后再说,呵呵。先别这么信誓旦旦,说不定人家对你不感冒呢。
回复【5楼】shenjianhua005:
---------------------------------
接收还是接受??
差不多吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2013-11-20
在线时间
15 小时
发表于 2013-12-27 15:45:55 | 显示全部楼层
回复【楼主位】张洋:
---------------------------------
张工,你好。我是新手。关于这个IIC有点疑问。24c02接到IIC 上  然后用软件模拟IIC 是怎么模拟的。 能用简单的话 让我理解下么。
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2013-12-27 16:24:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-5-11
在线时间
0 小时
发表于 2014-7-2 09:48:22 | 显示全部楼层
原子哥:这段读代码用在24C32~256的时候要将下面红色的IIC_Wait_Ack();给屏蔽掉,不然就一直等待ACK.

//AT24CXX指定地址读出一个数据

//ReadAddr:开始读数的地址 

//返回值:读到的数据

u8 AT24CXX_ReadOneByte(u16 ReadAddr)

{                                        

     u8 temp=0;                                                                                                                                                                                           IIC_Start(); 

     if(EE_TYPE>AT24C16)

     {

                 IIC_Send_Byte(0XA0);     //发送写命令

                 IIC_Wait_Ack();

                 IIC_Send_Byte(ReadAddr>>8);//发送高地址

                 IIC_Wait_Ack();                       

     }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));  //发送器件地址0XA0,写数据          IIC_Wait_Ack();

    IIC_Send_Byte(ReadAddr%256);   //发送低地址

     IIC_Wait_Ack();               

     IIC_Start();                      

     IIC_Send_Byte(0XA1);           //进入接收模式                              

     IIC_Wait_Ack();           

    temp=IIC_Read_Byte(0);               

    IIC_Stop();//产生一个停止条件

     return temp;

}

回复 支持 反对

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2015-12-9 19:27:48 | 显示全部楼层
战舰的硬件IIC1与液晶屏有冲突吗
最近爱上了stm32
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-9 22:48:54 | 显示全部楼层
回复【10楼】带我足够强大:
---------------------------------
没有啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 19:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表