⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 car_sim300.c

📁 GPRS-GPS车载机控制源码
💻 C
📖 第 1 页 / 共 5 页
字号:
  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure I2C1 pins: SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void SetSDAIn(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure I2C1 pins: SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void SetKEYIn(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure P15 pins: KEY */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void SetACCIn(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure P4 pins: ACC */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void SetZHDIn(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure P9 pins: ZHD */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void SetPWRCHKIn(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure P14 pins: PWRCHK */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}


void SetupLED (void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  
  /* Configure PA7 as outputs push-pull, max speed 50 MHz               */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure PB0 as outputs push-pull, max speed 50 MHz               */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
  //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure PB1 as outputs push-pull, max speed 50 MHz               */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;
  //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure PB12 as outputs push-pull, max speed 50 MHz               */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Enable the SysTick Counter                                               */
  SysTick_CounterCmd(SysTick_Counter_Enable);
}


/* Implementation of putchar (also used by printf function to output data)    */
int SendChar1 (int ch)  {                /* Write character to Serial Port     */

  USART_SendData(USART1, (unsigned char) ch);
  while (!(USART1->SR & USART_FLAG_TXE));
  return (ch);
}

/* Implementation of putchar (also used by printf function to output data)    */
int SendChar2 (int ch)  {                /* Write character to Serial Port     */

  USART_SendData(USART2, (unsigned char) ch);
  while (!(USART2->SR & USART_FLAG_TXE));
  return (ch);
}

void ClrRELAY()
{
	//	RELAY=0;//.13
	GPIOB->ODR  &= 0xFFFFDFFF;
	relay = 0x00;
}

void SetRELAY()
{
	//	RELAY=1;//.13
	GPIOB->ODR  |= 0x00002000;
	relay = 0xff;
}

void ClrBeep()
{
	//	BEEP=0;//.11
	GPIOA->ODR  &= 0xFFFFF7FF;
	beep = 0x00;
	
}

void SetBeep()
{
	//	BEEP=1;//.11
	GPIOA->ODR  |= 0x00000800;
	beep = 0xff;
}


void ClrLED()
{
	//	LED=0;//.7
	GPIOA->ODR  &= 0xFFFFFF7F;
	led = 0x00;
}

void SetLED()
{
	//	LED=1;//.7
	GPIOA->ODR  |= 0x00000080;
	led = 0xff;
}

void ClrSCL(void)
{
	//	SCL=0;//.6
	GPIOB->ODR  &= 0xFFFFFFBF;

}

void SetSCL(void)
{
	//	SCL=1;//.6
	GPIOB->ODR  |= 0x00000040;
}

void ClrSDA(void)
{
//	SDA=0;//.7
	GPIOB->ODR  &= 0xFFFFFF7F;
}

void SetSDA(void)
{
//	SDA=1;//.7
	GPIOB->ODR  |= 0x00000080;
}

u16 GetSDA(void)
{
	return (GPIOB->IDR);
}

u16 GetAcc(void)
{
	return (GPIOA->IDR);
}

void SomeNOP()
{
  u16 dly_time;
  for(dly_time=0;dly_time<60;dly_time++);
}

void Delay_lms(void)
{
  u16 dly_time;
  for(dly_time=0;dly_time<600;dly_time++);
}

void Delay_l0ms(void)
{
  u8 dly_time;
  for(dly_time=0;dly_time<50;dly_time++)Delay_lms();
  IWDG_ReloadCounter();//喂狗
}


/**--------------------------------------------------------------------------------
调用方式:void I2CStart(void) 
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
//发启始条件:时钟线为高时数据线发生下降沿跳变
void I2CStart(void)
{
////	EA=0;

//	SCL=0;//.6
	ClrSCL();
	
	SomeNOP();
//	SDA=1;//.7
	SetSDA();
	
	SomeNOP();
//	SCL=1;
	SetSCL();
	
	SomeNOP();
//	SDA=0;
	ClrSDA();

	SomeNOP();
}

/**--------------------------------------------------------------------------------
调用方式:void I2CStop(void) 
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
// 发结束条件:时钟线为高时数据线发生上升沿跳变
void I2CStop(void)
{
//	SCL=0;
	ClrSCL();
	
	SomeNOP();
//	SDA=0;
	ClrSDA();
	
	SomeNOP();
//	SCL=1;
	SetSCL();
	
	SomeNOP();
//	SDA=1;
	SetSDA();
	
	SomeNOP();
	
////	EA=1;
}


/**--------------------------------------------------------------------------------
调用方式:void I2CSend(BYTE ch) 
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CSendByte(u8 ch)
{
  u8 i=8;
//  u8 time_1=255;

	while (i--)
	{
//		SCL=0;
		ClrSCL();
		
		SomeNOP();
		
		if((ch&0x80)==0x00)ClrSDA();
		else               SetSDA();
		
		ch<<=1; 
		SomeNOP();
//		SCL=1; 
		SetSCL();
		
		SomeNOP();
	}
//	SCL=0;  //SCL的下降沿发送最后一位
	ClrSCL();
	
	SomeNOP();
	
//	SDA=1;
	SetSDA();
	
	SomeNOP();
//	SCL=1;
	SetSCL();
	
	SomeNOP();
	
	SetSDAIn();
	
	//while(SDA)
	while( ((GetSDA())& 0x0080) == 0x0080)
	{
//		if(--time_1==0)
//		break;
	}
	
	SetSDAOut();
}

/**--------------------------------------------------------------------------------
调用方式:BYTE I2CReceive_ACK(void)
函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
u8 I2CReceiveByte_ACK(void)//读取中间一个字节
{
  u8 i=8;
  u8 ddata=0;

	SetSDAIn();
	while (i--)
	{
		ddata<<=1;
//		SCL=0;
		ClrSCL();
		SomeNOP();
//		SCL=1;
		SetSCL();
		
		SomeNOP();
//		ddata|=SDA;
		if( ((GetSDA())& 0x0080) == 0x0080)ddata|=0x01;
		else                               ddata&=0xfe; 

	}
	SetSDAOut();
	
//	SCL=0;
    ClrSCL();
	
	SomeNOP();
//	SDA=0; 
	ClrSDA();

	SomeNOP();
//	SCL=1; 
	SetSCL();
		
	SomeNOP();
	return ddata;
}

/**--------------------------------------------------------------------------------
调用方式:BYTE I2CReceive(void)
函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
u8 I2CReceiveByte(void)//读取最后一个字节
{
  u8 i=8;
  u8 ddata=0;

	SetSDAIn();
	while (i--)
	{
		ddata<<=1;
//		SCL=0;
		ClrSCL();
		
		SomeNOP();
//		SCL=1;
		SetSCL();
		
		SomeNOP();
//		ddata|=SDA;//SCL上升沿锁定一个数据
		if( ((GetSDA())& 0x0080) == 0x0080)ddata|=0x01;
		else                               ddata&=0xfe; 

	}
	SetSDAOut();
	
//	SCL=0;
	ClrSCL();
	
	SomeNOP();
//	SDA=1; 
	SetSDA();

	SomeNOP();
//	SCL=1; 
	SetSCL();
	
	SomeNOP();
	return ddata;
}


u8 bISP_IAP_ByteRead(u16 wAddr)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -