历史上的今天
今天是:2024年12月27日(星期五)
2019年12月27日 | IIC通信建立过程
2019-12-27 来源:51hei
#include "IIC.h"
#include "systick.h"
//在高速模式下的IIC通信
/*
SCL初始化,因为SCL一直是输出模式,
*/
void IIC_init(void)
{
RCC->AHB1ENR |= (1<<1);
GPIOB->MODER &=~(3<<16);
GPIOB->MODER |= (1<<16);
GPIOB->OTYPER |= (1<<8);
GPIOB->OSPEEDR &=~(3<<16);
GPIOB->OSPEEDR |= (2<<16);
GPIOB->ODR |= (1<<8);
}
/*
SDA有2种状态,一个接收,一个发送,这里是发送
*/
void IIC_SDA_Out(void)
{
GPIOB->MODER &=~(3<<18);
GPIOB->MODER |= (1<<18);
GPIOB->OTYPER |= (1<<9);
GPIOB->OSPEEDR &=~(3<<18);
GPIOB->OSPEEDR |= (2<<18);
GPIOB->ODR |= (1<<9);
}
/*
SDA接收状态
*/
void IIC_SDA_In(void)
{
GPIOB->MODER &=~(3<<18);
}
/*
IIC开始建立过程
*/
void IIC_Start(void)
{
IIC_SDA_Out();
SCL_H;
SDA_H;
SysTick_Delay01us(3);
SDA_L;
SysTick_Delayus(2);
SCL_L;
}
//
/*
IIC结束过程
*/
void IIC_Stop(void)
{
IIC_SDA_Out();
SCL_L;
SDA_L;
SysTick_Delayus(1);
SCL_H;
SysTick_Delayus(2);
SDA_H;
}
/
/*
函数参数:主机发送一个字节数据
返回值:从机的应答有没有效
*/
u8 IIC_Sendbyte(u8 data)
{
u8 i,ack;
IIC_SDA_Out();
for(i=0;i<8;i++)
{
SCL_L;//SCL拉低等待数据
if(data&(0x80>>i))//IIC是从最高位开始发送书记
{
SDA_H;
}
else //发的数据是0
{
SDA_L;
}
SysTick_Delayus(2);
SCL_H;//拉高开始发送数据
SysTick_Delayus(2);
SCL_L;/拉低表示发送完成
}
//MCU接收从机应答
IIC_SDA_In();
SCL_L;//准备接收数据
SysTick_Delayus(2);
SCL_H;//开始接收数据
if(SDA)//应答无效
{
ack = 1;
}
else //有效应答
{
ack = 0;
}
SysTick_Delayus(2);/
SCL_L;//接收完成
SysTick_Delayus(2);
return ack;
}
/
/*
函数功能:主机接收从机的数据
参数:主机给从机的应答
*/
u8 IIC_Recvbyte(u8 ack)
{
u8 i,data=0;
IIC_SDA_In();
for(i=0;i<8;i++)
{
SCL_L;/拉高准备数据
SysTick_Delayus(2);
SCL_H;//开始发送数据
if(SDA)/无效
{
data |= 1<<(7-i);
}
else //0
{
data &=~( 1<<(7-i));
}
SysTick_Delayus(2);/
SCL_L;//拉低结束发送数据
}
//MCU发送应答
IIC_SDA_Out();
SCL_L;/准备应答
if(ack)//无效应答
{
SDA_H;
}
else //
{
SDA_L;
}
SysTick_Delayus(2);
SCL_H;//拉高开始发送
SysTick_Delayus(2);
SCL_L;//表示完成
SysTick_Delayus(2);/
return data;
}
上一篇:基于单片机空气质量检测仪毕业设计
史海拾趣
|
请问以下C代码是什么意思?请问如下代码的含义:据说hook function 是钩子函数,但我并没有在网上搜索到类似的函说说明。不管能否解答都欢迎大家来讨论 typedef void (* PFN_HOOK )(void); &n ...… 查看全部问答> |
|
基于飞思卡尔ARM9内核的i.mx27嵌入式开发板在视频传输领域的应用 1.i.MX27产品特性和应用范围: i.MX27是高清视频首选,提供了更高的灵活性和更强大的多媒体处理能力,成为IP视频和语音(V2IP)无绳和移动电话、智能远程控制、POS终端和其他大量无线应用的理想选择。同时,i.MX27开发板的主频从i.MX21的 266MHZ提高 ...… 查看全部问答> |
|
版主,请教一个问题。我用的是STM8S103K3的片子,由于是第一次使用ST单片机,所以很多的地方不明白。我现在用TIM2 的第三通道来捕获一个脉冲信号,并要把脉冲宽度读出来。我按着数据手册上一步一步的做,结果还是没有出来,能在进入捕获中断, ...… 查看全部问答> |
|
在仿真时出错,下面是出错的问题,请高手指教 代码segment\'ram0\'BYTES.Roo ds.b 1.Ro1 ds.b 1.Ro2 ds.b 1.Ro3 ds.b 1.Ro4 ds.b 1.Ro5 ds.b 1.Ro6 ds.b 1.Ro7 ds.b 1.Ro8 ds.b 1MOV TIM1_SMCR,#00HBRES TIM1_ETR,#6MOV TIM1_PSCRH,#00HMOV TIM1_P ...… 查看全部问答> |




