亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
STM32模擬I2C總線程序
[打印本頁]
作者:
xifei
時間:
2018-4-6 14:34
標題:
STM32模擬I2C總線程序
STM32模擬I2C總線程序,測試可用
單片機源程序如下:
#include <includes.h>
#include "myiic.h"
#include "delay.h"
#define SCL_H GPIOB->BSRR = GPIO_Pin_6
#define SCL_L GPIOB->BRR = GPIO_Pin_6
#define SDA_H GPIOB->BSRR = GPIO_Pin_7
#define SDA_L GPIOB->BRR = GPIO_Pin_7
#define SCL_read GPIOB->IDR & GPIO_Pin_6
#define SDA_read GPIOB->IDR & GPIO_Pin_7
OS_SEM IIC_SemLock;
//初始化IIC
void IIC_Init(void)
{
OS_ERR err = OS_ERR_NONE;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 輸出高
OSSemCreate(&IIC_SemLock,"",1,&err);
}
void IIC_Lock(void)
{
OS_ERR err = OS_ERR_NONE;
OSSemPend(&IIC_SemLock,0,OS_OPT_PEND_BLOCKING,NULL,&err);
}
void IIC_UnLock(void)
{
OS_ERR err = OS_ERR_NONE;
OSSemPost(&IIC_SemLock,OS_OPT_POST_ALL,&err);
}
u8 IIC_Start(void)
{
SDA_H;
SCL_H;
delay_us(5);
if(!SDA_read)return 0;
SDA_L;
delay_us(5);
if(SDA_read)return 0;
SDA_L;
delay_us(5);
return 1;
}
void IIC_Stop(void)
{
SCL_L;
delay_us(5);
SDA_L;
delay_us(5);
SCL_H;
delay_us(5);
SDA_H;
delay_us(5);
}
void IIC_Ack(void)
{
SCL_L;
delay_us(5);
SDA_L;
delay_us(5);
SCL_H;
delay_us(5);
SCL_L;
delay_us(5);
}
void IIC_NoAck(void)
{
SCL_L;
delay_us(5);
SDA_H;
delay_us(5);
SCL_H;
delay_us(5);
SCL_L;
delay_us(5);
}
u8 IIC_WaitAck(void)
{
SCL_L;
delay_us(5);
SDA_H;
delay_us(5);
SCL_H;
delay_us(5);
if(SDA_read)
{
SCL_L;
return 0;
}
SCL_L;
return 1;
}
void IIC_SendByte(u8 SendByte)
{
u8 i=8;
while(i--)
{
SCL_L;
delay_us(5);
if(SendByte&0x80)
SDA_H;
else
SDA_L;
SendByte<<=1;
delay_us(5);
SCL_H;
delay_us(5);
}
SCL_L;
}
u8 IIC_ReceiveByte(void)
{
u8 i=8;
u8 ReceiveByte=0;
SDA_H;
while(i--)
{
ReceiveByte<<=1;
SCL_L;
delay_us(5);
SCL_H;
delay_us(5);
if(SDA_read)
{
ReceiveByte|=0x01;
}
}
SCL_L;
return ReceiveByte;
}
u8 IIC_BufferRead(u8* pBuffer,u16 length,u8 DeviceAddress)
{
if(!IIC_Start())return 0;
IIC_SendByte(DeviceAddress|0x01);
if(!IIC_WaitAck())
{
IIC_Stop();
return 0;
}
while(length)
{
*pBuffer++=IIC_ReceiveByte();
length--;
if(length>0)IIC_Ack();
else IIC_NoAck();
}
IIC_Stop();
delay_ms(1);
return 1;
}
u8 IIC_BufferWrite(u8* pBuffer, u16 length, u8 DeviceAddress)
{
if(!IIC_Start())return 0;
IIC_SendByte(DeviceAddress);
if(!IIC_WaitAck())
{
IIC_Stop();
return 0;
}
while(length)
{
IIC_SendByte(* pBuffer);
IIC_WaitAck();
length--;
pBuffer++;
}
IIC_Stop();
delay_ms(5);
return 1;
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
IIC.rar
(1.86 KB, 下載次數: 36)
2018-4-6 14:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1