融创嵌入式技术应用竞赛平台 智能小车底层源代码分析
2018-03-06 14:57:02 0 举报
AI智能生成
登录查看完整内容
融创智能小车,嵌入式应用技术开发平台。 底层代码分析。 STM32编程
作者其他创作
大纲/内容
嵌入式应用技术 设计与制作 STM32底层源程序
关注 · 共享
共享
TIM2_IRQHandle
mmm
子主题
SystemInit()
Delay_us_Init()
RCC_GetClocksFreq(&RCC_Clocks)
SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000)
NVIC_Configuration()
NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; // CAN 接收中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;//ENABLE; NVIC_Init(&NVIC_InitStructure);
uart1_init(115200)
IO_Init()
YJ_INIT();\t\t\t//初始化硬件GPIOB->CRH&=0XFFFFFFF0; \tGPIOB->CRH|=0X00000008;//PB8 设置成输入 \tGPIOB->ODR|=1<<8;\t //PB8上拉GPIOC->CRH&=0X000FFFFF; \tGPIOC->CRH|=0X33300000; //PC13/PC14/PC15推挽输出 GPIOC->ODR|=0XE000; //PC13/PC14/PC15输出高GPIOD->CRH&=0XFFF0FFFF; \tGPIOD->CRH|=0X00030000; //PD12推挽输出 GPIOD->ODR|=0X1000; //PD12推挽高 \tLED_L=1; \tLED_R=1;BEEP=1;beep=0;
YJ_INIT()
LED_Init();
void LED_Init(void){ RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOD->CRH&=0Xffff0000;//清掉原来的设置,同时不影响其它位设置。 GPIOD->CRH|=0X00003333;//PD8~11推挽输出 GPIOD->ODR &=0xf0ff; //PD8~11输出高 }
DJ_Init();\t\t\t\t //电机驱动初始化
//使能PORTE时钟 RCC->APB2ENR|=1<<6; GPIOE->CRH&=0XF00F0000; GPIOE->CRH|=0X03303333; //PE8/PE9/PE10/PE11/PE13/PE14推挽输出 GPIOE->ODR|=0X0000; LEFT_NSLEEP = 1; REFT_NSLEEP = 1; REFT1_PWM =1; REFT2_PWM =1; LEFT1_PWM =0; LEFT2_PWM =0;
PWM_Init(); //PWM初始化
IIC_Init();\t //初始化IIC
BH1750_Init(); //初始化光照
void BH1750_Init(){ Single_Write_BH1750(0x01); ADDR = 0; //将ADDR位初始化拉低}
void Single_Write_BH1750(u8 REG_Address){ BH1750_Start(); //起始信号 BH1750_SendByte(SlaveAddress); //发送设备地址+写信号 BH1750_SendByte(REG_Address); //内部寄存器地址, BH1750_Stop(); //发送停止信号}
void BH1750_Stop(){ SDA_OUT();//sda线输出 IIC_SDA=0;//STOP:when CLK is high DATA change form low to high IIC_SCL=1; delay_us(4); IIC_SDA=1;//发送I2C总线结束信号 delay_us(4);}
KEY_Init();\t\t\t//按键初始化
void KEY_Init(void){ RCC->APB2ENR|=1<<3; //使能PORTB时钟 GPIOB->CRH&=0X0000FFFF; GPIOB->CRH|=0X88880000; //PB12~PB15设置成输入 GPIOB->ODR|=0xf000; //PB12~PB15设置上拉 }
XJ_Init();\t\t\t\t//循迹初始化
void XJ_Init() // 循迹数据通过CAN传输{// RCC->APB2ENR|=1<<2; //使能PORTA时钟// // GPIOA->CRL&=0XFFFFFFF0; // GPIOA->CRL|=0X00000003;//PA0 设置成输出 // GPIOA->ODR|=1<<0; //P输出为高// // Track_Usart2_Close(); // GPIOA->CRL&=0X00000000; // GPIOA->CRL|=0X88888888;//PA0 设置成输出 // GPIOA->ODR|=0x00ff; //P输出为高 }
EXTIX_Init(); \t// 外部中断初始化
HW_Init();\t\t\t\t//红外发射初始化
RCC->APB2ENR|=1<<6; //使能PORTE时钟 GPIOE->CRL&=0XFFFFFF0F; GPIOE->CRL|=0X00000030; //PE1推挽输出 GPIOE->ODR|=0X0002; //PE1输出高 RI_TXD=1;
SYN7318_Init(); // 语音识别测试初始化
Electricity_Init();
Parameter_Init(); Adc_Init();
Parameter_Init();
Pb =(float) (PWR_MIN / PWR_DV); Pb *= 100; Pa = (float)(3300*11)/4096 ; Pa = (float)((Pa *100) /PWR_DV);
Adc_Init();
CanP_Init()
CanDrv_Hinit()
CanDrv_Sinit()
CanP_FifoInit()
Power_Check()
STOP()
Host_Close_UpTrack()
Send_Debug_Info(\"A1B2C3\\
while(1)
SYN7318_Test()
if( !(ut %100))
tran()
CSB_TX = 1; \tdelay_us(3) ; CSB_TX = 0;
TIM3->CR1|=0x01; // 使能定时器3 TIM3->SR&=~(1<<0); // 清除中断标志位 status = 0;\t\t\t // 定时器清零
delay_ms(30) ;\t\t\t //等待一段时间,等待发送超声波控制信号\tCSB_TX = 1; delay_ms(5);
Dispose()
Single_Write_BH1750(0x01); // power on Single_Write_BH1750(0x10); // H- resolution mode
Multiple_Read_BH1750(); //连续读出数据,存储在BUF中 dis_data=BUF[0]; dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据
temp=(float)dis_data/1.2;\tdata=(int)temp; return data;
if(!KEY0)
LED_R=0;\t\t\t //右转向灯开LED_L=0;\t\t\t //左转向灯开BEEP=0;\t\t\t\t //蜂鸣器开
delay_ms(1000);
STOP();
BEEP=1;\tLED_R=1; LED_L=1;
if(!KEY1)
if(!KEY2)
if(!KEY3)
SYN7318_Open();
if(Wifi_Rx_flag ==1)
else if(Wifi_Rx_Buf[0]==0x55) // 接收到55开头数据 Normal_data(); //正常数据处理
{\tu8 sum=0;\tif(Wifi_Rx_Buf[7]==0xbb)\t // 判断包尾\t {\t\t\t\t\t\t\t\t\t \t\t//主指令与三位副指令左求和校验\t\t//注意:在求和溢出时应该对和做256取余。\t\t sum=(Wifi_Rx_Buf[2]+Wifi_Rx_Buf[3]+Wifi_Rx_Buf[4]+Wifi_Rx_Buf[5])%256;\t\tif(sum == Wifi_Rx_Buf[6])\t\t{\t\t\t Rx_Flag =1;\t\t}\t\telse Rx_Flag =0;\t\t}}
else Abnormal_data(); // 异常数据处理
if(Rx_Flag ==1)
STOP(); delay_us(5);
if(Wifi_Rx_Buf[1]==ZCKZ_ADDR) \t //主车控制
case 0x01:\t// 停止
Track_Flag=0;MP=0;Stop_Flag=0;G_Flag=0;B_Flag=0;L_Flag=0;R_Flag=0; STOP();break;
case 0x02:\t//前进
case 0x03:\t//后退
case 0x04:\t//左转
case 0x05:\t//右转
case 0x06:\t//循迹
case 0x07:\t//码盘值清零
CodedDisk=0;break;
case 0x10: //红外数据前三位
G_Tab[0]=Wifi_Rx_Buf[3];G_Tab[1]=Wifi_Rx_Buf[4];G_Tab[2]=Wifi_Rx_Buf[5];break;
case 0x11: //红外数据后三位
G_Tab[3]=Wifi_Rx_Buf[3];//数据第四位G_Tab[4]=Wifi_Rx_Buf[4];//低位校验码G_Tab[5]=Wifi_Rx_Buf[5];//高位校验码break;
case 0x12://通知小车单片机发送红外线
case 0x20:\t//转向灯控制
if(Wifi_Rx_Buf[3])\tLED_L=0;else LED_L=1;if(Wifi_Rx_Buf[4])\tLED_R=0;else LED_R=1;break;
case 0x30:\t//蜂鸣器控制
if(Wifi_Rx_Buf[3])\tBEEP=0;else BEEP=1;break;
case 0x40:\t//双色灯控制
// Write_595(Wifi_Rx_Buf[3]);break;
case 0x62: //红外发射控制光源强度档位加2
case 0x63: //红外发射控制光源强度档位加3
case 0x80:\t//运动标志物数据返回允许位
if(Wifi_Rx_Buf[3]) SD_Flag=0;else SD_Flag=1;break;
case 0x90:\t//语音控制命令
if(Wifi_Rx_Buf[3]) SYN7318_Open();break;default:Track_Flag=0;MP=0;Stop_Flag=0;G_Flag=0;B_Flag=0;L_Flag=0;R_Flag=0; STOP();break;
Rx_Flag =0;
if(Zigbee_Rx_flag ==1)
STOP() ; \t delay_us(5);
if( (Zigb_Rx_Buf[1]==0x03) || (Zigb_Rx_Buf[1]==0x0c)) // 道闸 或 ETC
else if(Zigb_Rx_Buf[1]==0x21)\t //第一组数据
else if(Zigb_Rx_Buf[1]==0x22)\t //第二组数据
else if(Zigb_Rx_Buf[1]==0x06)
Zigbee_Rx_flag =0;
if(send_Flag==1)
else if((flag3==1)&&(SD_Flag==0))
else if((SD_Flag))
收藏
0 条评论
回复 删除
下一页