📄 car_sim300.c
字号:
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 + -