Compare commits

...

3 Commits

9 changed files with 4246 additions and 84 deletions

27
.gitignore vendored
View File

@ -1,2 +1,29 @@
/.vscode/
output/
*.rar
*.o
*.d
*.crf
*.htm
*.dep
*.map
*.bak
*.lnp
*.lst
*.ini
*.iex
*.scvd
*.uvguix
.uvoptx
*.dbg*
*.uvguix.*
.mxproject
!*.uvprojx
!*.h
!*.c
!*.ioc
!*.axf
!*.bin
!*.hex

View File

@ -15,13 +15,13 @@
#if !defined(DBG_UART_BAUD)
#if (SYS_CLK == 1)
#define DBG_UART_BAUD BRR_DIV(115200, 32M)
#define DBG_UART_BAUD BRR_DIV(9600, 32M)
#elif (SYS_CLK == 2)
#define DBG_UART_BAUD BRR_DIV(115200, 48M)
#define DBG_UART_BAUD BRR_DIV(9600, 48M)
#elif (SYS_CLK == 3)
#define DBG_UART_BAUD BRR_DIV(115200, 64M)
#define DBG_UART_BAUD BRR_DIV(9600, 64M)
#else
#define DBG_UART_BAUD (BRR_115200)
#define DBG_UART_BAUD BRR_DIV(9600, 16M)
#endif //SYS_CLK
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U20090928 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO11 -FD20003000 -FC5000 -FN1 -FF0B6x_256kB_PY_D.FLM -FS018000000 -FL040000 -FP0($$Device:B6x$.\Flash\B6x_256kB_PY_D.FLM)</Name>
<Name>-U20090928 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO11 -FD20003000 -FC5000 -FN1 -FF0B6x_256kB_PY_D.FLM -FS018000000 -FL040000 -FP0($$Device:B6x$.\Flash\B6x_256kB_PY_D.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -252,7 +252,7 @@
<Group>
<GroupName>core</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -400,7 +400,7 @@
<Group>
<GroupName>drivers\src</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -624,7 +624,7 @@
<Group>
<GroupName>drivers</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -664,7 +664,7 @@
<Group>
<GroupName>ble\app</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@ -6,9 +6,11 @@
#include "sys_config.h"
radar_daraframe_t radar_daraframe;
/*
// 定时处理数和获取数据
tmr_id_t radar_timer_tmr_id;
@ -64,7 +66,7 @@ static tmr_tk_t radar_timer_handler(tmr_id_t id){
#elif (1 ==RADAR_MODE)
uint8_t data[8]={0x02,0x03,0x00,0x01,0x00,0x01,0xD5,0xf9};////读取实时值数据//120ms
#endif
Car_Distance =radar_daraframe.Back_data/100;
Car_Distance =radar_daraframe.Back_data;
radar_daraframe.Back_data=0xffff;
uart_send(UART1_PORT,8,data);
}else{
@ -74,18 +76,18 @@ static tmr_tk_t radar_timer_handler(tmr_id_t id){
#elif (1 ==RADAR_MODE)
uint8_t data[8]={0x01,0x03,0x00,0x01,0x00,0x01,0xD5,0xCA};////读取实时值数据//120ms
#endif
Car_Distance =radar_daraframe.Front_data/100;
Car_Distance =radar_daraframe.Front_data;
radar_daraframe.Front_data=0xffff;
uart_send(UART1_PORT,8,data);
}
if((0 < Car_Distance) && Car_Distance < (Get_Status(IN_Back)?sys_conf_info.AUTO_Brake_Distance_B :sys_conf_info.AUTO_Brake_Distance)){//小于自动刹车距离时
if((35 < Car_Distance) && (Car_Distance < (Get_Status(IN_Back) ? (sys_conf_info.AUTO_Brake_Distance_B * 100) : (sys_conf_info.AUTO_Brake_Distance * 100)))){//小于自动刹车距离时
if(!SYS_AUTO_brake){
Time_Event_Blink(Buzzer_Event,100,100,0xffff,NULL);
}
SYS_AUTO_brake =1;//使能自动刹车
SYS_AUTO_Speed_Cut=1;
}else if((0 < Car_Distance) && Car_Distance < (Get_Status(IN_Back)?sys_conf_info.AUTO_Speed_Cut_Distance_B :sys_conf_info.AUTO_Speed_Cut_Distance)){//小于自动减速距离时
}else if((35 < Car_Distance) && (Car_Distance < (Get_Status(IN_Back) ? (sys_conf_info.AUTO_Speed_Cut_Distance_B * 100) : (sys_conf_info.AUTO_Speed_Cut_Distance * 100)))){//小于自动减速距离时
if(SYS_AUTO_brake || !SYS_AUTO_Speed_Cut){
Time_Event_Blink(Buzzer_Event,200,500,0xffff,NULL);
}
@ -186,3 +188,216 @@ void app_radar_Receive(uint8_t data){
break;
}
}
*/
#define DBG_RADAR_EN 0
#if (DBG_RADAR_EN)
#include "dbg.h"
#define DEBUG(format, ...) debug("[RADAR]" format "\r\n", ##__VA_ARGS__)
#else
#define DEBUG(format, ...)
//#define debugHex(dat, len)
#endif
static bool radar_NewData_flag=0;// 新数据标志位
static uint8_t radar_CMDSend_cnt=0; // 发送命令计数
radar_data_t radar_data;
// 自动刹车或减速判断处理函数
void radar_AUTO_BrakeORSpeedCut(uint8_t radar_id , uint16_t Car_Distance){ //距离数据30~4500mm
if(radar_id == RADAR_ID_Front){
radar_daraframe.Front_data =Car_Distance;
}else{
radar_daraframe.Back_data =Car_Distance;
}
// 自动刹车距离
uint16_t Brake_Distance = ((radar_id == RADAR_ID_Back ) ? sys_conf_info.AUTO_Brake_Distance_B : sys_conf_info.AUTO_Brake_Distance) * 100;
// 自动减速距离
uint16_t Speed_Cut_Distance = ((radar_id == RADAR_ID_Back ) ? sys_conf_info.AUTO_Speed_Cut_Distance_B : sys_conf_info.AUTO_Speed_Cut_Distance) * 100;
if((35 < Car_Distance) && Car_Distance < Brake_Distance){//小于自动刹车距离时
if(!SYS_AUTO_brake){
Time_Event_Blink(Buzzer_Event,100,100,0xffff,NULL);
}
SYS_AUTO_brake =1;//使能自动刹车
SYS_AUTO_Speed_Cut=1;
}else if((35 < Car_Distance) && Car_Distance < Speed_Cut_Distance){//小于自动减速距离时
if(SYS_AUTO_brake || !SYS_AUTO_Speed_Cut){
Time_Event_Blink(Buzzer_Event,200,500,0xffff,NULL);
}
SYS_AUTO_brake =0;
SYS_AUTO_Speed_Cut=1;//使能自动减速
}else{
if(SYS_AUTO_brake || SYS_AUTO_Speed_Cut){
Time_Event_Off(Buzzer_Event,NULL);
}
SYS_AUTO_brake =0;
SYS_AUTO_Speed_Cut=0;
}
DEBUG("\r\nAB:%d,AS:%d\r\n", SYS_AUTO_brake, SYS_AUTO_Speed_Cut);
}
uint8_t radar_flag_cnt=0;
static uint8_t new_state_cnt=3;//标记状态是否变化
// 雷达开关 //0:关 1:开
bool radar_ONOFF =1;
// 定时处理数和获取数据
static tmr_tk_t radar_timer_handler(tmr_id_t id){
(void)(id);
if(Get_Status(OUT_Door_lock)){
// 定时发送状态信息
if(radar_flag_cnt > 8){
uint8_t ret_data[20]={0,0};
radar_flag_cnt =0;
ret_data[radar_flag_cnt++] =BAT_Message.Bat_STA; // 电池状态
ret_data[radar_flag_cnt++] =BAT_Message.Bat_Voltage >> 8; //电池电压
ret_data[radar_flag_cnt++] =BAT_Message.Bat_Voltage & 0xff;
ret_data[radar_flag_cnt++] =get_in_acc_percent();// 当前油门百分比
ret_data[radar_flag_cnt++] =radar_daraframe.Front_data /100;// 前雷达距离信息
ret_data[radar_flag_cnt++] =radar_daraframe.Back_data/100;// 后雷达距离信息
// 读取系统配置
ret_data[radar_flag_cnt++]=sys_conf_info.M_mode_sLim;
ret_data[radar_flag_cnt++]=sys_conf_info.U_mode_sLim;
ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Brake_Distance;
ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Speed_Cut_Distance;
ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Brake_Distance_B;
ret_data[radar_flag_cnt++]=sys_conf_info.AUTO_Speed_Cut_Distance_B;
ret_data[radar_flag_cnt++] =(Get_Status(IN_GPS)<<0) | (Get_Status(IN_Back)<<1) | (Get_Status(OUT_Low_brake)<<2)
| (Get_Status(IN_Manager_Mode)<<3) | ((PAD_Manager_Mode)<<4)
| ((PAD_User_Mode)<<5) | ((SYS_AUTO_Speed_Cut)<<6) | ((SYS_AUTO_brake)<<7);
app_uart_Sendcmd(UART1_PORT,0x10,0x01,ret_data,radar_flag_cnt);
radar_flag_cnt =0;
return _MS(250);//300ms
}else {
radar_flag_cnt++;
}
}else{
radar_flag_cnt =0;
}
if(radar_NewData_flag == 1){
radar_NewData_flag =0; // 清空新数据标志位
radar_CMDSend_cnt =0; // 清空发送命令计数
DEBUG("ID =%d,distance =%d", radar_data.radar_id ,radar_data.distance);
}
if((radar_CMDSend_cnt !=0)||(1 ==new_state_cnt)){//
DEBUG("Clear:CMD_cnt =%d", radar_CMDSend_cnt);
radar_CMDSend_cnt =0; // 清空发送命令计数
radar_AUTO_BrakeORSpeedCut(radar_data.radar_id , 0);//复位自动刹车和减速状态
}
if(new_state_cnt > 0){
new_state_cnt--;
}
// 进入游客模式开启雷达 //管理员模式优先于游客模式
if(Get_Status(OUT_Door_lock) && !(PAD_Manager_Mode || Get_Status(IN_Manager_Mode)) && (1 == radar_ONOFF)){
// 根据倒车状态确定雷达ID
DEBUG("SendCMD:ID=%#02x", (1 == Get_Status(IN_Back)) ? RADAR_ID_Back : RADAR_ID_Front);
app_radar_Sendcmd((1 == Get_Status(IN_Back)) ? RADAR_ID_Back : RADAR_ID_Front ,RADAR_MODE_Real);
new_state_cnt =3;
radar_CMDSend_cnt++;
}
return _MS(150);//300ms
}
static uint8_t radar_buff[9];
// 数据接收
void app_radar_Receive(uint8_t data){
static uint8_t cnt=0,radar_state=0;
switch(radar_state){
case 0://dev_addr
if (data == 0x01 || data == 0x02) {
radar_buff[0]=data;
radar_state = 1;
}
break;
case 1://cmd_id
if (data == 0x03) {
radar_buff[1]=data;
radar_state = 2;
}else {
radar_state = 0;
radar_buff[0]=0;
}
break;
case 2://length
if (data == 0x02) {
radar_buff[2]=data;
radar_state = 3;
cnt=0;
}else {
radar_state = 0;
radar_buff[0]=0;
}
break;
case 3://data
radar_buff[3+cnt] =data;
cnt++;
if(cnt==2){
cnt=0;
radar_state = 4;
}
break;
case 4://crc16
radar_buff[5+cnt] =data;
cnt++;
if(cnt==2){
uint16_t crc16 =crc16_checkout(radar_buff,5);
if(crc16 == (((uint16_t)radar_buff[6] << 8 ) | radar_buff[5])){
radar_data.radar_id = radar_buff[0];
radar_data.distance = ((uint16_t)radar_buff[3] << 8 ) | radar_buff[4];
radar_AUTO_BrakeORSpeedCut(radar_data.radar_id ,radar_data.distance);
radar_NewData_flag = 1;
}
cnt=0;
radar_state = 0;
radar_buff[0]=0;
}
break;
}
}
//发送读取实时值数据命令
void app_radar_Sendcmd(uint8_t radar_id , uint8_t radar_mode){
if(radar_id == RADAR_ID_Front){
radar_daraframe.Front_data =0xffff;
}else{
radar_daraframe.Back_data =0xffff;
}
uint8_t len=0;
uint8_t data[8];
data[len++] = radar_id;
data[len++] = 0x03;
data[len++] = 0x01;
data[len++] = radar_mode ? 0x01 : 0x00; // 0x01:实时值(120ms) 0x00:处理值(520ms)
data[len++] = 0x00;
data[len++] = 0x01;
uint16_t crc16 =crc16_checkout(data,len);
data[len++] = crc16 & 0xff;
data[len++] = (crc16 >> 8) & 0xff;
uart_send(UART1_PORT,len,data);
}
// 雷达测离初始化
void app_radar_init(void){
radar_data.radar_id = RADAR_ID_Front;
radar_data.distance = 0;
// sftmr_init(); //main函数中已初始化
sftmr_start(10, radar_timer_handler);
}

View File

@ -10,14 +10,37 @@ typedef struct radar_daraframe{
volatile uint16_t Back_data;
} radar_daraframe_t;
enum RADAR_MODE{
RADAR_MODE_Dispose = 0, //处理模式
RADAR_MODE_Real = 1, //实时模式
};
enum RADAR_ID{
RADAR_ID_Front = 0x01, //前雷达ID
RADAR_ID_Back = 0x02, //后雷达ID
};
typedef struct radar_data{
uint8_t radar_id;
uint16_t distance;
} radar_data_t;
extern radar_daraframe_t radar_daraframe;
extern uint8_t radar_buff[];
extern uint8_t Rec_lenght;
// 雷达开关 //0:关 1:开
extern bool radar_ONOFF;
// 雷达测离初始化
void app_radar_init(void);
// 串口数据接收
void app_radar_Receive(uint8_t data);
//发送读取实时值数据命令
void app_radar_Sendcmd(uint8_t radar_id , uint8_t radar_mode);
#endif

View File

@ -91,10 +91,29 @@ static void app_uart1_hande(void){
}
app_uart_Sendcmd(UART1_PORT,uart1_daraframe.cmd_id,0x01,uart1_daraframe.data,uart1_daraframe.length);
break;
// case 0x04:
// break;
case 0x04:
ret_data[length++] =BAT_Message.Bat_STA; // 电池状态
ret_data[length++] =BAT_Message.Bat_Voltage >> 8; //电池电压
ret_data[length++] =BAT_Message.Bat_Voltage & 0xff;
ret_data[length++] =get_in_acc_percent();// 当前油门百分比
ret_data[length++] =radar_daraframe.Front_data /100;// 前雷达距离信息
ret_data[length++] =radar_daraframe.Back_data/100;// 后雷达距离信息
// 读取系统配置
ret_data[length++]=sys_conf_info.M_mode_sLim;
ret_data[length++]=sys_conf_info.U_mode_sLim;
ret_data[length++]=sys_conf_info.AUTO_Brake_Distance;
ret_data[length++]=sys_conf_info.AUTO_Speed_Cut_Distance;
ret_data[length++]=sys_conf_info.AUTO_Brake_Distance_B;
ret_data[length++]=sys_conf_info.AUTO_Speed_Cut_Distance_B;
ret_data[length++] =(Get_Status(IN_GPS)<<0) | (Get_Status(IN_Back)<<1) | (Get_Status(OUT_Low_brake)<<2)
| (Get_Status(IN_Manager_Mode)<<3) | ((PAD_Manager_Mode)<<4)
| ((PAD_User_Mode)<<5) | ((SYS_AUTO_Speed_Cut)<<6) | ((SYS_AUTO_brake)<<7);
app_uart_Sendcmd(UART1_PORT,0x4,0x01,ret_data,length);
break;
case 0x05: //0 关闭雷达//1 启用雷达
radar_ONOFF = 0 == uart1_daraframe.data[0] ? 0 : 1;
app_uart_Sendcmd(UART1_PORT,uart1_daraframe.cmd_id,0x01,uart1_daraframe.data,uart1_daraframe.length);
break;
default :
app_uart_Sendcmd(UART1_PORT,uart1_daraframe.cmd_id,uart1_daraframe.reg_addr,uart1_daraframe.data,uart1_daraframe.length);
break;

View File

@ -64,7 +64,7 @@ static void devInit(void)
{
uint16_t rsn = rstrsn();
dbgInit();
// dbgInit();
// debug("Start(rsn:0x%X)...\r\n", rsn);
#if (1 ==BLE_ENABLE)
// Init BLE App