STM32 IIC
来源:互联网 发布:nginx ssl 无响应 编辑:程序博客网 时间:2024/06/05 19:22
****************
Time:2016.12.8
Name:MichaelBeechan
Dress:Chongqing university of science and technology
****************
****************/
#ifndef _IIC_H
#define _IIC_H
#include "stm32f10x.h"
#include "Systick.h"
#define I2C_SCL GPIO_Pin_10 //PB10
#define I2C_SDA GPIO_Pin_11 //PB11
#define GPIO_I2C GPIOB
#define I2C_SCL_H GPIO_SetBits(GPIO_I2C,I2C_SCL) //1
#define I2C_SCL_L GPIO_ResetBits(GPIO_I2C,I2C_SCL) //0
#define I2C_SDA_H GPIO_SetBits(GPIO_I2C,I2C_SDA)
#define I2C_SDA_L GPIO_ResetBits(GPIO_I2C,I2C_SDA)
void I2C_init(void); //IIC init
void I2C_SDA_OUT(void); //SDA output
void I2C_SDA_IN(void); //SDA input
void I2C_Start(void); //Start signal
void I2C_Stop(void); //stop signal
void I2C_Ack(void); //boss ack...Main engine ack
void I2C_NAck(void); //boss No_ack...Main engine no_ack
u8 I2C_Wait_Ack(void); //wait slave(从机) ack :return 1 --> ack failure;return 0 --> ack success
void I2C_Send_Byte(u8 txd);
u8 I2C_Read_Byte(u8 ack);
#endif
/***************
****************
Time:2016.12.8
Name:MichaelBeechan
Dress:Chongqing university of science and technology
****************
****************/
#include "IIC.h"
void I2C_init() //IIC init
{
GPIO_InitTypeDef GPIO_InitStructure; //define GPIO structure pointer
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //open PA(GPIO) clock
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = I2C_SCL|I2C_SDA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //push-pull output
GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIO init
I2C_SCL_H; //idle state for high level
I2C_SDA_H;
}
void I2C_SDA_OUT() //SDA output
{
GPIO_InitTypeDef GPIO_InitStructure; //define GPIO structure pointer
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = I2C_SDA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //push-pull output
GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIO init
}
void I2C_SDA_IN() //SDA input
{
GPIO_InitTypeDef GPIO_InitStructure; //define GPIO structure pointer
GPIO_InitStructure.GPIO_Pin = I2C_SDA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //up-pull input
GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIO init
}
//According to timing sequence compile
void I2C_Start() //Start signal
{
I2C_SDA_OUT(); //SDA output
I2C_SDA_H;
I2C_SCL_H;
delay_us(5);
I2C_SDA_L;
delay_us(6);
I2C_SCL_L;
}
void I2C_Stop() //stop signal
{
I2C_SDA_OUT(); //SDA output
I2C_SCL_L;
I2C_SDA_L;
I2C_SCL_H;
delay_us(6);
I2C_SDA_H;
delay_us(6);
}
void I2C_Ack() //boss ack...Main engine ack
{
I2C_SCL_L;
I2C_SDA_OUT(); //SDA output
I2C_SDA_L;
delay_us(2);
I2C_SCL_H;
delay_us(5);
I2C_SCL_L;
}
void I2C_NAck() //boss No_ack...Main engine no_ack
{
I2C_SCL_L;
I2C_SDA_OUT(); //SDA output
I2C_SDA_H;
delay_us(2);
I2C_SCL_H;
delay_us(5);
I2C_SCL_L;
}
u8 I2C_Wait_Ack() //wait slave(从机) ack :return 1 --> ack failure;return 0 --> ack success
{
u8 tempTime = 0;
I2C_SDA_IN();
I2C_SDA_H;
delay_us(1);
I2C_SCL_H;
delay_us(1);
while(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA))
{
tempTime ++;
if(tempTime > 250)
{
I2C_Stop();
return 1;
}
}
I2C_SCL_L;
return 0;
}
void I2C_Send_Byte(u8 txd)
{
u8 i = 0;
I2C_SDA_OUT(); //SDA output
I2C_SCL_L; //only low power can ensure data line change or else data line stable
for(i = 0; i < 8; i ++)
{
if((txd&0x80) > 0)
{
I2C_SDA_H;
}
else
{
I2C_SDA_L;
}
txd <<= 1;
I2C_SCL_H;
delay_us(2);
I2C_SCL_L;
delay_us(2);
}
}
u8 I2C_Read_Byte(u8 ack)
{
u8 i = 0, receive = 0;
I2C_SDA_IN();
for(i = 0; i < 8; i ++)
{
I2C_SCL_L;
delay_us(2);
I2C_SCL_H;
receive <<= 1;
if( GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA))
{
receive ++;
}
delay_us(1);
}
if(ack == 0)
{
I2C_NAck(); //boss No_ack...Main engine no_ack
}
else
{
I2C_Ack(); //boss ack...Main engine ack
}
return receive;
}
- STM32 IIC
- STM32-IIC
- STM32的IIC
- stm32 之iic
- STM32 硬件IIC操作
- STM32标准IIC驱动
- STM32硬件IIC操作
- STM32模拟 IIC
- stm32---iic通信
- STM32中IIC协议
- STM32 GPIO IIC学习
- STM32 IIC难点易错点
- 关于 stm32 硬件iic
- STM32 IIC通信
- STM32软件模拟IIC
- STM32 IIC的学习
- stm32 IIC通信
- stm32的IIC知识点
- AngualrJS中的scope
- 【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set
- jquery中的ready函数与window.onload谁先执行
- 【leetcode】单链表的插入排序
- 概率1
- STM32 IIC
- 基于Jetson TX1的 YOLO: Real-Time Object Detection
- JZOJ 3809. 【NOIP2014模拟8.25】设备塔
- spring声明式事务管理(基于AspectJ的xml方式)
- jquery 实现筛选功能。
- 解决RecyclerView局部刷新时闪烁
- iOS 滑动隐藏/显示tabbar
- 关于初涉JavaScript
- BZOJ3506 排序机械臂