KS103 500HZ 1MM High Precision 8M Ultrasonic Ranging Module Temperature Compensation TTL I2C Interface Robot Module For PIX APM
https://allinbest.com/500hz-1mm-high-precision-8m-ultrasonic-ranging-module-temperature-compensation-ttl-i2c-interface-robot-module-for-pix-apm-ks103
https://github.com/Luxcoldury/ks103-ultrasound
http://www.dauxi.com/KS10X-V110_EN.pdf
-------------------------------------------
#define IIC_SCL_PORT GPIOC
#define IIC_SCL_PIN GPIO_Pin_3
#define IIC_SCL_L GPIO_ResetBits(IIC_SCL_PORT, IIC_SCL_PIN)
#define IIC_SCL_H GPIO_SetBits(IIC_SCL_PORT, IIC_SCL_PIN)
#define IIC_SDA_PORT GPIOC
#define IIC_SDA_PIN GPIO_Pin_2
#define IIC_READ_SDA GPIO_ReadInputDataBit(IIC_SDA_PORT,IIC_SDA_PIN)
#define IIC_SDA_L GPIO_ResetBits(IIC_SDA_PORT, IIC_SDA_PIN)
#define IIC_SDA_H GPIO_SetBits(IIC_SDA_PORT, IIC_SDA_PIN)
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_sda_out
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 输出模式
**
**--------------------------------------------------------------------------------------------------------**/
void iic_sda_out(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_sda_in
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 输入模式
**
**--------------------------------------------------------------------------------------------------------**/
void iic_sda_in(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_init
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 初始化IO口
**
**--------------------------------------------------------------------------------------------------------**/
void iic_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = IIC_SCL_PIN;
GPIO_Init(IIC_SCL_PORT, &GPIO_InitStructure);
IIC_SCL_H;
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
IIC_SDA_H;
}
------------------------------------
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_start
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
**
**--------------------------------------------------------------------------------------------------------**/
void iic_start(void)
{
iic_sda_out();//sda线输出
IIC_SDA_H;
IIC_SCL_H;
delay_us(10);
IIC_SDA_L;//start:when CLK is high,DATA change form high to low
delay_us(10);
IIC_SCL_L;//钳住I2C总线,准备发送或接收数据
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_stop
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
**
**--------------------------------------------------------------------------------------------------------**/
void iic_stop(void)
{
iic_sda_out();//sda线输出
IIC_SCL_L;
IIC_SDA_L;//stop:when SCL is high,DATA change form low to high
delay_us(10);
IIC_SCL_H;/*end */
delay_us(2);
IIC_SDA_H;
delay_us(10);
}
-----------------------------------------------------
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_ack
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 产生ACK应答 SDA是低电平
**
**--------------------------------------------------------------------------------------------------------**/
void iic_ack(void)
{
IIC_SCL_L;
iic_sda_out();
IIC_SDA_L;
delay_us(10);
IIC_SCL_H;
delay_us(10);
IIC_SCL_L;
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_nack
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 不产生ACK应答 SDA是高电平
**
**--------------------------------------------------------------------------------------------------------**/
void iic_nack(void)
{
IIC_SCL_L;
iic_sda_out();
IIC_SDA_H;
delay_us(10);
IIC_SCL_H;
delay_us(10);
IIC_SCL_L;
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_wait_ack
**@author:
**@data:
**@param:void
**@param:void
**@return:void 1,接收应答失败 0,接收应答成功
**@descriptions: 等待应答信号到来
**
**--------------------------------------------------------------------------------------------------------**/
u8 iic_wait_ack(void)
{
u8 wait_time=0;
IIC_SDA_H;/*释放控制权,进入空闲等待让对方发送应答信号*/
delay_us(6);
IIC_SCL_H;/*释放控制权,进入空闲等待让对方发送应答信号*/
delay_us(6);
iic_sda_in(); //SDA设置为输入
while(IIC_READ_SDA)
{
wait_time++;
if(wait_time>250)
{
iic_stop();
return 1;/*未等接收到应答信号,发送数据失败*/
}
}
IIC_SCL_L;
return 0;
}
----------------------------------------------、
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_send_byte
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: IIC发送书1个字节
**
**--------------------------------------------------------------------------------------------------------**/
void iic_send_byte(u8 data)
{
u8 pnext;
iic_sda_out();
IIC_SCL_L;/*SCL ENABLE*/
for(pnext=0;pnext<8;pnext++)
{
/*send direction high_8 to low_8, ready data*/
if((data&0x80)>>7){IIC_SDA_H;}
else{IIC_SDA_L;}
data<<=1;
delay_us(10); /*SCL is high ,start send data*/
IIC_SCL_H;
delay_us(10);
IIC_SCL_L; /*send data end,enable SCL*/
delay_us(10);
}
}
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: iic_read_byte
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: IIC读取数据1个字节,ack=1时,发送ACK,ack=0,发送nACK
**
**--------------------------------------------------------------------------------------------------------**/
u8 iic_read_byte(u8 ack)
{
u8 pnext,receive=0;
iic_sda_in();//SDA设置为输入
for(pnext=0;pnext<8;pnext++ )
{
IIC_SCL_L;
delay_us(10);
IIC_SCL_H;/*SCL is high ,start read data */
receive<<=1;
if(IIC_READ_SDA)receive++;
delay_us(5);
}
if (!ack)
iic_nack();//发送nACK
else
iic_ack(); //发送ACK
return receive;
}
--------------------------------------
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: ks103_readonebyte
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 读取ks103探测结果
**
**--------------------------------------------------------------------------------------------------------**/
u8 ks103_readonebyte(u8 addr, u8 reg)
{
u8 result=0;
iic_start();
iic_send_byte(addr);
iic_wait_ack();
iic_send_byte(reg);
iic_wait_ack();
iic_start();
iic_send_byte(addr+ 1);
iic_wait_ack();
delay_us(50);
result=iic_read_byte(0);
iic_stop();
return result;
}
--------------------------------------------------------
/**--------------functiion Info---------------------------------------------------------------------------------
**@functiion name: ks103_writeonebyte
**@author:
**@data:
**@param:void
**@param:void
**@return:void
**@descriptions: 开始ks103探测
**
**--------------------------------------------------------------------------------------------------------**/
void ks103_writeonebyte(u8 addr,u8 reg,u8 cmd)
{
iic_start();
iic_send_byte(addr);
iic_wait_ack();
iic_send_byte(reg);
iic_wait_ack();
iic_send_byte(cmd);
iic_wait_ack();
iic_stop();
}
Recent Posts
-
KS103 500HZ 1MM High Precision 8M Ultrasonic Ranging Module Temperature Compensation TTL I2C Interface Robot Module For PIX APM
https://allinbest.com/500hz-1mm-high-precision-8m-ultrasonic-ranging-module-temperature-compensation …15th Feb 2025 -
How to use Wiegand USB converter
Introduction1> This module has two function conversion functions as follows: The functions are n …6th Mar 2024 -
HID-USB RS232 Converter
HID-USB RS232 ConverterCH9329 is a serial port to USB HID device function chip. According to differe …1st Mar 2024