完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
主机
/***********************************************************************************/ #include "delay.h" #include "sys.h" #include "oled.h" #include "usart.h" int main(void) { delay_init(); //Ñóê±oˉêy3õê¼»ˉ NVIC_Configuration(); //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶 LED_Init(); //LED¶Ë¿ú3õê¼»ˉ OLED_Init(); //3õê¼»ˉOLED uart_init(9600); while(1) { if(Read_IIC_Data((0xA1<<1)+1)==0x01) { USART_SendData(USART1, (uint8_t) 0x01); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); } else { USART_SendData(USART1, (uint8_t) Read_IIC_Data((0xA1<<1)+1)); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); } delay_ms(1000); } } /***********************************************************************************/ #include "oled.h" #include "stdlib.h" #include "delay.h" void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ê1ÄüA¶Ë¿úê±Öó GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //íÆíìêä3ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//Ëù¶è50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //3õê¼»ˉGPIOD3,6 GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); delay_ms(800); } void IIC_Start() { SDA_OUT(); OLED_SCLK_Set(); OLED_SDIN_Set(); delay_us(5); OLED_SDIN_Clr(); delay_us(4); OLED_SCLK_Clr(); } void IIC_Stop() { SDA_OUT(); OLED_SCLK_Clr(); OLED_SDIN_Clr(); delay_us(4); OLED_SCLK_Set(); OLED_SDIN_Set(); delay_us(4); } void IIC_Ack(void) { OLED_SCLK_Clr(); SDA_OUT(); OLED_SDIN_Clr(); delay_us(2); OLED_SCLK_Set(); delay_us(2); OLED_SCLK_Clr(); } void IIC_Wait_Ack() { OLED_SCLK_Set(); OLED_SCLK_Clr(); } void IIC_NAck(void) { OLED_SCLK_Clr(); SDA_OUT(); OLED_SDIN_Set(); delay_us(2); OLED_SCLK_Set(); delay_us(2); OLED_SCLK_Clr(); } u8 Read_IIC_Byte(unsigned char IIC_Byte) { unsigned char i,receive=0; SDA_IN(); for(i=0;i<8;i++) { OLED_SCLK_Clr(); delay_us(2); OLED_SCLK_Set(); receive<<=1; if(READ_SDA) receive++; delay_us(1); } if(!IIC_Byte) IIC_NAck(); else IIC_Ack(); return receive; } void Write_IIC_Byte(unsigned char IIC_Byte) { unsigned char i; unsigned char m,da; da=IIC_Byte; OLED_SCLK_Clr(); for(i=0;i<8;i++) { m=da; m=m&0x80; if(m==0x80) { OLED_SDIN_Set(); } else OLED_SDIN_Clr(); da=da<<1; OLED_SCLK_Set(); OLED_SCLK_Clr(); } } u8 Read_IIC_Data(u16 ReadAddr) { u8 rec=0; IIC_Start(); Write_IIC_Byte(ReadAddr); IIC_Wait_Ack(); rec=Read_IIC_Byte(0); IIC_Stop(); return rec; } void Delay_50ms(unsigned int Del_50ms) { unsigned int m; for(;Del_50ms>0;Del_50ms--) for(m=6245;m>0;m--); } void Delay_1ms(unsigned int Del_1ms) { unsigned char j; while(Del_1ms--) { for(j=0;j<123;j++); } } /******************************从机*********************************************/ #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "encoder.h" #include "24cxx.h" #include "STM32f10x_i2c.h" #include "usart.h" const u8 TEXT_Buffer[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; int main(void) { u8 keyval=0; delay_init(); //Ñóê±oˉêy3õê¼»ˉ IIC_Init(); //IIC3õê¼»ˉ I2c_Init(); uart_init(9600); while(1) { I2C_SendData(I2C1,TEXT_Buffer[1]); } } /***********************************************************************************/ #include "myiic.h" #include "delay.h" #include "stm32f10x_i2c.h" //3õê¼»ˉIIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //íÆíìêä3ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); //PB10,PB11 êä3ö¸ß } void I2c_Init(void) { I2C_InitTypeDef I2C_InitStructure; I2C_DeInit(I2C1); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); I2C_InitStructure.I2C_Mode=I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1=(0xA1<<1); I2C_InitStructure.I2C_Ack=I2C_Ack_Enable; I2C_InitStructure.I2C_ClockSpeed=I2C_Speed; I2C_Init(I2C1,&I2C_InitStructure); I2C_Cmd(I2C1,ENABLE); I2C_AcknowledgeConfig(I2C1,ENABLE); } |
|
相关推荐
2个回答
|
|
IIC的定义是在没有发送数据的情况下,引脚应该处于接收状态,STM32的引脚设置为输出状态时是无法接收到数据的。
|
|
|
|
你这个I2C关系好像有点不对,主从关系一定好清楚。从什么时候接收发送数据都得根据主来,不是从想什么时候发送就什么时候发送。你主用的模拟,从的标准I2C接口,你这个时序关系能对上嘛?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1330 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1263 浏览 3 评论
2430 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1416 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1847 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 23:45 , Processed in 0.656320 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号