int main(void) { u16 i,rxlen; u16 lenx; u8 key=0XFF; u8 upload=0; delay_init(); //延时函数初始化 uart_init(38400); //串口初始化为9600 USART2_Init(38400); //初始化串口2 LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD POINT_COLOR=RED; LCD_ShowString(30,20,200,16,16,"ALIENTEK STM32 ^_^"); LCD_ShowString(30,40,200,16,16,"NE0-6M GPS TEST"); LCD_ShowString(30,60,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,80,200,16,16,"KEY0:Upload NMEA Data SW"); LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF"); if(Ublox_Cfg_Rate(1000,1)!=0) //设置定位信息更新速度为1000ms,顺便判断GPS模块是否在位. { LCD_ShowString(30,120,200,16,16,"NEO-6M Setting..."); while((Ublox_Cfg_Rate(1000,1)!=0)&&key) //持续判断,直到可以检查到NEO-6M,且数据保存成功 { USART2_Init(9600); //初始化串口2波特率为9600(EEPROM没有保存数据的时候,波特率为9600.) Ublox_Cfg_Prt(38400); //重新设置模块的波特率为38400 USART2_Init(38400); //初始化串口2波特率为38400 Ublox_Cfg_Tp(1000000,100000,1); //设置PPS为1秒钟输出1次,脉冲宽度为100ms key=Ublox_Cfg_Cfg_Save(); //保存配置 } LCD_ShowString(30,120,200,16,16,"NEO-6M Set Done!!"); delay_ms(500); LCD_Fill(30,120,30+200,120+16,WHITE);//清除显示 } while(1) { delay_ms(1); if(USART2_RX_STA&0X8000) //接收到一次数据了 { rxlen=USART2_RX_STA&0X7FFF; //得到数据长度 for(i=0;i<rxlen;i++)USART1_TX_BUF[i]=USART2_RX_BUF[i]; USART2_RX_STA=0; //启动下一次接收 USART1_TX_BUF[i]=0; //自动添加结束符 GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//分析字符串 Gps_Msg_Show(); //显示信息 if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//发送接收到的数据到串口1 } key=KEY_Scan(0); if(key==KEY0_PRES) { upload=!upload; POINT_COLOR=RED; if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON "); else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF"); } if((lenx%500)==0)LED0=!LED0; lenx++; } }
int main(void) { DD_SERVO_Out; OCR1AH = 0x05; OCR1AL = 0xDC; ICR1H = 0xFF; ICR1L = 0xFF; TCCR1C = 0; TCCR1A = 0x82; TCCR1B = 0x1A; int xxx=0; gamura_init(); USART_Init(); USART2_Init(); Task_01__Task_Stop; Task_02__Task_Stop; //Task_02__Task_Start; Task_03__Task_Stop; Task_04__Task_Stop; Task_05__Task_Stop; Task_06__Task_Start; while (1) { Task_02(); Task_01(); //Task_04(); Task_05(); Task_06(); //Task_03(); } }
void board_init(void) { printf("\n\n"); printf("BWCT FSB-A920-1\n"); printf("http://www.bwct.de\n"); printf("\n"); #if defined(SDRAM_128M) printf("AT92RM9200 180MHz 128MB\n"); #else printf("AT92RM9200 180MHz 64MB\n"); #endif printf("Initialising USART0\n"); USART0_Init(); printf("Initialising USART1\n"); USART1_Init(); printf("Initialising USART2\n"); USART2_Init(); printf("Initialising USART3\n"); USART3_Init(); printf("Initialising TWI\n"); EEInit(); printf("Initialising DS1672\n"); DS1672_Init(); printf("Initialising Ethernet\n"); printf("MAC %x:%x:%x:%x:%x:%x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); EMAC_Init(); EMAC_SetMACAddress(mac); printf("Initialising SD-card\n"); sdcard_init(); }
int main(void) { USART2_Init(9600); NVIC_Configuration(); I2C_LowLevel_Init(I2C1); // Tick every 1 ms if (SysTick_Config(SystemCoreClock / 1000)) while (1); printf("Ready\n\r"); if (bmp180_check_presence()) { printf("Sensor is present\n\r"); } else { printf("Sensor is NOT present\n\r"); while(1){} } CalibrationData data; data.oss = 3; bmp180_get_calibration_data(&data); bmp180_get_uncompensated_temperature(&data); bmp180_get_uncompensated_pressure(&data); bmp180_calculate_true_temperature(&data); bmp180_calculate_true_pressure(&data); bmp180_get_absolute_altitude(&data); while(1) { } }
/******************************************************************************* *Function:系统初始化 *parm:none *description: *******************************************************************************/ void board_init(void) { delay_init(); LED_Init(); //LED灯初始化 USART_Configuration(115200);//串口通信初始化 USART2_Init(9600); }
/******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { RCC_Configuration(); // Configure the system clocks GPIO_Configuration(); NVIC_Configuration(); // NVIC Configuration USART1_Init(); USART2_Init(); Timer_Configuration(); WIZ_SPI_Init(); WIZ_Config(); // network config // LED3 and LED4 On! LED3_onoff(ON); LED4_onoff(ON); // Start Application printf("\r\n\r\n----------------------------------- \r\n"); printf("SMTP Client using W5200\r\n"); printf("----------------------------------- "); Main_Menu(); while(1) { } }
void BSP_Init() { NVIC_Configuration(); #if USING_SRAM_AS_HEAP > 0 FSMC_SRAM_Init(); #endif #if WATCHDOG_ENABLE > 0 WATCHDOG_setTimeOut(15); //如果15秒仍未启动完成,那么就复位 WATCHDOG_enable(); //调试时要屏蔽 #endif _init_alloc(HEAP_BASE, HEAP_TOP); USART1_Init(); USART2_Init(); USART3_Init(); #ifdef STM32F10X_CL UART4_Init(); UART5_Init(); #endif //STM32F10X_CL Delay_ms(10); }
/** * @brief 使用esp8266模块和EDP协议向ONENET平台发送开发板四个LED指示灯的实时状态,并通过平台或者开发板按键控制LED。 **/ int main(void) { //SystemInit(); LED_Init(); //LED指示灯初始化函数 KEY_Init(); //按键初始化函数 USART1_Init(); //USART1串口初始化函数 USART2_Init(); //USART2串口初始化函数 while(1) { LED_Switch(LED_ON,LED_R|LED_G|LED_Y|LED_B); //点亮开发板四个指示灯,表示程序进入主流程 ESP8266_Init(); //ESP8266初始化 ESP8266_DevLink(DEVICEID,APIKEY,20); //和平台建立设备连接 LED_Switch(LED_OFF,LED_R|LED_G|LED_Y|LED_B); //熄灭开发板四个指示灯,表示程序完成设备连接,进入数据发送循环 while(1) { if(!(ESP8266_CheckStatus(30))) //检测ESP8266模块连接状态 { ESP8266_SendDat(); //向平台发送数据 } else { break; } } } }
int main(void) { unsigned int nCount; unsigned char vEncoder[20]="--------------------"; int i; RCC_Configuration(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); NVIC_Configuration(); EXTI_Configuration(); USART1_Init(); USART2_Init(); USART3_Init(); UART4_Init(); UART5_Init(); SPI2_Init(); SysTick_Init(); //init_NRF24L01(); RX_Mode(); //nRF24L01_ISR(); while(1) { //Serial_PutString("While "); } }
int main(void) { SysTick_Init(); RCC_Init(); USART2_Init(); InitRF(); Tag_Init(); //send_alive_cmd_to_master(); IWDG_Init(); while(1) { if(sysTime1ms % 50 == 0) { Feed_IWDG(); } usart_msg_handle(); if(tag_check_flag) { Tag_state_check(); tag_check_flag = 0; } SendWakeMsg(); } }
int main(void) { /* SystemInit() called by "startup_stm32f40xx.S" */ /* Init PWM */ PWM_Pins_Init(); /* Init timer */ TIMER_Init(); /* Init SVPWM */ SVPWM_Init(); /* Init 16kHz Interrupt */ INT_TIM2_Config(); /* Init ADC1 Channel 0 & ADC2 Channel1 */ ADC123_Init(); /* Configure Encoder with Tim8 on GPIOC 6 & 7 */ configureEncoder(); /* Enable USART2 */ USART2_Init(); GPIO_SetBits(GPIOB, GPIO_Pin_10); while (1) { } }
int main(void) { USART1_Init(); USART2_Init(); mDelay(1000); Hal_I2C_Init(); /*初始化8266,并连接CWJAP配置的AP,与MQTT_CIPSTART配置的服务器建立TCP连接*/ ESP8266_Init((int8_t *)MQTT_CIPSTART, (int8_t *)CWJAP); /*进入MQTT协议测试主循环*/ MQTT_Loop(); }
int main(void) { u8 key,fontok=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); //串口1初始化 LCD_Init(); //初始化液晶 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 usmart_dev.init(72); //usmart初始化 USART2_Init(36,115200); //初始化串口2 TP_Init(); //初始化触摸屏 mem_init(SRAMIN); //初始化内部内存池 exfuns_init(); //为fatfs相关变量申请内存 f_mount(0,fs[0]); //挂载SD卡 key=KEY_Scan(0); if(key==KEY_RIGHT) //强制校准 { LCD_Clear(WHITE); //清屏 TP_Adjust(); //屏幕校准 TP_Save_Adjdata(); LCD_Clear(WHITE); //清屏 } fontok=font_init(); //检查字库是否OK if(fontok||key==KEY_DOWN)//需要更新字库 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32"); while(SD_Initialize()) //检测SD卡 { LCD_ShowString(60,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(60,70,200+60,70+16,WHITE); delay_ms(200); } LCD_ShowString(60,70,200,16,16,"SD Card OK"); LCD_ShowString(60,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,0);//从SD卡更新 while(key)//更新失败 { LCD_ShowString(60,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(60,110,200,16,16,"Font Update Success!"); delay_ms(1500); LCD_Clear(WHITE);//清屏 } sim900a_test(); }
void Config_Init() { //初始化LED LED_Init(); //初始化串口引脚 USART2_Init(); USART6_Init(); //初始化屏幕引脚 LCD_GPIOInit(); //配置uart USART_Config(); }
void OVC3860::Init(unsigned long _ulRCCPort, GPIO_TypeDef * _ulPort, uint16_t _ulPin) { ulRCCPort = _ulRCCPort; ulPort = _ulPort; ulPin = _ulPin; configMode = false; RCC_APB2PeriphClockCmd(ulRCCPort, ENABLE); GPIO_InitTypeDef PORT; PORT.GPIO_Pin = ulPin; PORT.GPIO_Mode = GPIO_Mode_Out_PP; PORT.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(ulPort,&PORT); USART2_Init(115200); //ovc3860 uart init USART2_SetTX(false); //shutdown TX, required to prevent ovc3860 to get its power through uart. GPIO_WriteBit(ulPort, ulPin, Bit_RESET); // set low }
void simpleTest(void) { uint8_t summ = 0; uint8_t i; for (i = 0; i < 14; i++) { s_testingSequence[i] = i; summ += s_testingSequence[i]; } s_testingSequence[14] = summ; trace_printf("summ [%x]\n\r", summ); USART_HandleTypeDef usart; USART2_Init(&usart, 9600); HELP_dumpUsartProps(&usart); while (1) { HAL_StatusTypeDef status = HAL_USART_Transmit(&usart, s_testingSequence, 15, 0xFF); trace_printf("tr [%d]\n\r", status); System_delayMsDummy(100); } }
void Sys_Init(void) { u8 key,fontok=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); //串口1初始化 LCD_Init(); //初始化液晶 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 USART2_Init(36,115200); //初始化串口2 mem_init(); //初始化内部内存池 exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 key = KEY_Scan(0); fontok = font_init(); //检查字库是否OK if(fontok||key == KEY1_PRES)//需要更新字库 (KEY1按下或字库丢失) { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(70,50,200,16,16,"GSM TEST"); while(SD_Initialize()) //检测SD卡 { LCD_ShowString(60,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(60,70,200+60,70+16,WHITE); delay_ms(200); } LCD_ShowString(60,70,200,16,16,"SD Card OK"); LCD_ShowString(60,90,200,16,16,"Font Updating..."); key = update_font(20,110,16); //更新字库 while(key) //更新失败 { LCD_ShowString(60,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(60,110,200,16,16,"Font Update Success!"); delay_ms(1500); LCD_Clear(WHITE);//清屏 } }
/************************ 函数功能:GPS初始化 输入参数:串口波特率 ************************/ void GPS_Init(uint32_t baudrate) { OS_ERR err; GPS_Set_PID(); USART2_Init(baudrate); //初始化串口2 OSTaskCreate((OS_TCB *)&GPS_MainTaskTCB, (CPU_CHAR *)"GPS_MainTask", (OS_TASK_PTR )GPS_MainTask, (void *)0, (OS_PRIO )PRIO_GPS , (CPU_STK *)&GPS_MainTaskStk[0], (CPU_STK_SIZE )GPS_MainTaskStk[APP_CFG_TASK_START_STK_SIZE / 10], (CPU_STK_SIZE )APP_CFG_TASK_START_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void *)0, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err); }
//配置NMEA输出信息格式 //baudrate:波特率,4800/9600/19200/38400/57600/115200/230400 //返回值:0,执行成功;其他,执行失败(这里不会返回0了) u8 Ublox_Cfg_Prt(u32 baudrate) { _ublox_cfg_prt *cfg_prt=(_ublox_cfg_prt *)USART2_TX_BUF; cfg_prt->header=0X62B5; //cfg header cfg_prt->id=0X0006; //cfg prt id cfg_prt->dlength=20; //数据区长度为20个字节. cfg_prt->portid=1; //操作串口1 cfg_prt->reserved=0; //保留字节,设置为0 cfg_prt->txready=0; //TX Ready设置为0 cfg_prt->mode=0X08D0; //8位,1个停止位,无校验位 cfg_prt->baudrate=baudrate; //波特率设置 cfg_prt->inprotomask=0X0007;//0+1+2 cfg_prt->outprotomask=0X0007;//0+1+2 cfg_prt->reserved4=0; //保留字节,设置为0 cfg_prt->reserved5=0; //保留字节,设置为0 Ublox_CheckSum((u8*)(&cfg_prt->id),sizeof(_ublox_cfg_prt)-4,&cfg_prt->cka,&cfg_prt->ckb); while(DMA1_Channel7->CNDTR!=0); //等待通道7传输完成 UART_DMA_Enable(DMA1_Channel7,sizeof(_ublox_cfg_prt)); //通过dma发送出去 delay_ms(200); //等待发送完成 USART2_Init( baudrate); //重新初始化串口2 return Ublox_Cfg_Ack_Check();//这里不会反回0,因为UBLOX发回来的应答在串口重新初始化的时候已经被丢弃了. }
//初始化ATK-HC05模块 //返回值:0,成功;1,失败. u8 HC05_Init(void) { u8 retry=10,t; u8 temp=1; RCC->APB2ENR|=1<<2; //使能PORTA时钟 RCC->APB2ENR|=1<<4; //使能PORTC时钟 GPIOA->CRL&=0XFFF0FFFF; //PA4,输入 GPIOA->CRL|=0X00080000; GPIOA->ODR|=1<<4; //PA4上拉 GPIOC->CRL&=0XFFF0FFFF; //PC4,推挽输出 GPIOC->CRL|=0X00030000; GPIOC->ODR|=1<<4; //PC4输出1 USART2_Init(36,115200); //初始化串口2为:9600,波特率. while(retry--) { HC05_KEY=1; //KEY置高,进入AT模式 delay_ms(10); u2_printf("AT\r\n"); //发送AT测试指令 HC05_KEY=0; //KEY拉低,退出AT模式 for(t=0;t<10;t++) //最长等待50ms,来接收HC05模块的回应 { if(USART2_RX_STA&0X8000)break; delay_ms(5); } if(USART2_RX_STA&0X8000) //接收到一次数据了 { temp=USART2_RX_STA&0X7FFF; //得到数据长度 USART2_RX_STA=0; if(temp==4&&USART2_RX_BUF[0]=='O'&&USART2_RX_BUF[1]=='K') { temp=0;//接收到OK响应 break; } } } if(retry==0)temp=1; //检测失败 return temp; }
int main(void) { int scope1dt,scope1t,scope1s,scope1d,scope1j; int scope2dt,scope2t,scope2s,scope2d,scope2j; char znakr; char znak; GPIO_InitTypeDef GPIO_str; uint8_t ii; uint8_t i = 0; /* SysTick end of count event each 0,01ms 0,00001*/// 0,01ms -100000 RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 100000); /* Accelerometer Configuration */ Acc_Config(); Demo_GyroConfig(); ii = SystemCoreClock; /* This is a way to read the System core clock */ CONF_TIMERS(); CONF_PWMIN(); confI2C(); while(1) I2C_start(); /////////// Przyciski RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_str.GPIO_Pin= GPIO_Pin_4 | GPIO_Pin_5; GPIO_str.GPIO_Mode=GPIO_Mode_IN; GPIO_str.GPIO_PuPd=GPIO_PuPd_UP; GPIO_str.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_str); ii = 0; USART2_Init(115200); GPIO_SetBits(GPIOD, GPIO_Pin_0); LEFT =3400; RIGHT=3400; FRONT=3400; REAR=3400; //delay_ms(4000); while (1) { esf=SystemCoreClock/360/(TIM2->CCR2); esd = (TIM2->CCR1*100);///(TIM2->CCR2); throttle=(int)(esd*32.0/156.0-1236.0); esf3=SystemCoreClock/360/(TIM3->CCR2); if(throttle>6600) throttle=3400; esd3 = (TIM3->CCR1*100);///(TIM3->CCR2); pitch_zadany=(float)(-6.0*esd3/1800.0+100.0)+0.0; if(pitch_zadany>40 || pitch_zadany<-40) pitch_zadany=0; esd4 = (TIM4->CCR1*100); roll_zadany=(float)(-6.0*esd4/1800.0+100.0); if(roll_zadany>40 || roll_zadany<-40) roll_zadany=0; //esd5 =(TIM8->CCR2*100)/TIM8->CCR1; //yaw_zadany=(float)(-6.0*esd5/1800.0+100.0); //if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5)==0) //flaga=0; //IMU/////////////////////////////////////////////////////// Acc_ReadData(AccBuffer); for(i=0;i<3;i++) AccBuffer[i] /= 100.0f; acc_x=AccBuffer[0]; acc_y=AccBuffer[1]; acc_z=AccBuffer[2]; Demo_GyroReadAngRate(Buffer); gyr_x=Buffer[0]; gyr_y=Buffer[1]; gyr_z=Buffer[2]; MadgwickAHRSupdateIMU( -gyr_y*0.01745, gyr_x*0.01745, gyr_z*0.01745, acc_x, acc_y, acc_z); roll=180/PI*atan2(2*(q2*q3+q0*q1),1-2*(q1*q1+q2*q2));//(q0*q0-q1*q1-q2*q2+q3*q3)); pitch=180/PI*asin(-2*(q1*q3-q0*q2)); yaw=180/PI*atan2(2*(q1*q2+q0*q3),(1-2*(q3*q3+q2*q2))); scope1=PIDY*1000;//niebieski scope2=yaw*1000;//czerwony if(scope1>0) znak='+'; else znak='-'; if(scope2>0) znakr='+'; else znakr='-'; scope1=abs(scope1); scope2=abs(scope2); CZAS_S=(float)CZAS/100000.0; CZAS=0; scope1dt=scope1/10000; scope1t=scope1/1000-scope1dt*10; scope1s=scope1/100-scope1dt*100-scope1t*10; scope1d=scope1/10-scope1dt*1000-scope1t*100-scope1s*10; scope1j=scope1-scope1dt*10000-scope1t*1000-scope1s*100-scope1d*10; scope2dt=scope2/10000; scope2t=scope2/1000-scope2dt*10; scope2s=scope2/100-scope2dt*100-scope2t*10; scope2d=scope2/10-scope2dt*1000-scope2t*100-scope2s*10; scope2j=scope2-scope2dt*10000-scope2t*1000-scope2s*100-scope2d*10; printf("%c%d%d%d%d%d %c%d%d%d%d%d\r\n",znak,scope1dt,scope1t,scope1s,scope1d,scope1j,znakr,scope2dt,scope2t,scope2s,scope2d,scope2j); /*PIDY=-PIDyawrate(yaw_zadany, yaw); rollratezadane=PIDroll(roll_zadany, roll); PIDR=PIDrollrate(rollratezadane, -gyr_y); speedLeft=(int)((float)throttle+PIDR-PIDY);//throttle+PIDR; speedRight=(int)((float)throttle-PIDR-PIDY); pitchratezadane=PIDpitch(pitch_zadany, pitch); PIDP=PIDpitchrate(pitchratezadane, gyr_x);//float PIDpitchrollrate(float zadana, float aktualna) speedFront=(int)((float)throttle-PIDP+PIDY); speedRear=(int)((float)throttle+PIDP+PIDY); */ if(speedFront>speedmax) speedFront=speedmax; else if(speedFront<speedmin) speedFront=speedmin; else ; if(speedRear>speedmax) speedRear=speedmax; else if(speedRear<speedmin) speedRear=speedmin; else ; if(speedLeft>speedmax) speedLeft=speedmax; else if(speedLeft<speedmin) speedLeft=speedmin; else ; if(speedRight>speedmax) speedRight=speedmax; else if(speedRight<speedmin) speedRight=speedmin; else ; if(throttle>3450) { LEFT =(int)speedLeft; RIGHT=(int)speedRight; FRONT=3400;//(int)speedFront; REAR=3400;//(int)speedRear; } else { LEFT =3400; RIGHT=3400; FRONT=3400; REAR=3400; } } return 0; }
u8 ISO9141Init(u16 * uartSpeed) { u8 c, keyword; int i; u16 time, t2; USART2_Deinit(); // wyslanie adresu 0x01 z predkoscia 5 bit/sek, 7O1 //bit nieparzystosci rowny 0 gdy w wysylanym slowie jest nieparzysta liczba jedynek TXD2(0); //bit startu timer1=200; while (timer1); TXD2(1); //najmlodszy bit adresu urzadzenia timer1=200; while (timer1); TXD2(0); // 6 bitow adresu urzadzenia + bit nieparzystosci timer1=1400; while (timer1); TXD2(1); //bit stopu timer1=200; while (timer1); // bez oczekiwania po ustawieniu 1 na txd wykrywa³ zbocze opadajace od razu // przypuszczalnie przeladowywala sie pojemnosc w transceiverze timer1=1000; // 1 sec if (0 == (*uartSpeed)) { while ((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) && timer1); //waiting for start bit if (0 == timer1) { return 0xff; } TIM_SetCounter(TIM3, 0); t2 = timer1; for (i=0; i<4; i++) { while ((0 == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) && timer1); //waiting for rising edge if (0 == timer1) { return 0xff; } while ((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) && timer1); //waiting for falling edge if (0 == timer1) { return 0xff; } } while ((0 == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) && timer1); //waiting for rising edge if (0 == timer1) { return 0xff; } time = TIM_GetCounter(TIM3); if (time > 900) { *uartSpeed = 9600; } else { *uartSpeed = 10400; } USART2_Init(*uartSpeed); timer1=2; //2ms while (timer1); c=USART2_GetData(); //flush buffer } else { USART2_Init(*uartSpeed); c=USART2_GetData(); //flush buffer while (!USART2_DataAvailable() && timer1); if (0 == timer1) { return 0xff; } c = USART2_GetData(); //odebranie bajtu 0x55 z ECU if (0x55 != c) //jezeli odebrana wartosc jest inna to znaczy, ze jest zla predkosc transmisji { return 0x7f; //sync err } } timer1=500; // 0.5 sec //odebranie dwoch bajtow oznaczajacych ?wersje protokolu? while (!USART2_DataAvailable() && timer1); if (0 == timer1) { return 0xff; } KW1281ProtocolVersion[0] = USART2_GetData(); // pierwszy bajt wersji protokolu while (!USART2_DataAvailable() && timer1); if (0 == timer1) { return 0xff; } KW1281ProtocolVersion[1] = USART2_GetData(); //drugi bajt wersji protokolu USART2_PutData(255-KW1281ProtocolVersion[1]); //wyslanie negacji ostatniego otrzymanego bajtu while (!USART2_DataAvailable() && timer1); if (0 == timer1) { return 0xff; } c = USART2_GetData(); // odczytanie bajtu który zostal wyslany - halfduplex if ((255-KW1281ProtocolVersion[1]) != c) { return 0x8f; // odczytany zostal inny bajt niz wyslany } if ((KW1281ProtocolVersion[0] != 0x01) || (KW1281ProtocolVersion[1] != 0x8A)) { return 0x10; } timer1 = 0; return 0x00; }
int main(void) { u8 len=0; u8 temp[100]; u8 t=0; u8 flag=0; char mode='O'; long value=0; u8 counter=0; //char val2str[]="50"; char SelfCheck='O'; int D_val=0; u8 SelfCheckCounter=0; /////////////////////以上变量定义/////////////////////////// delay_init(72); USART1_Init(19200);//与地面站传递命令 USART2_Init(115200);//与X86板子传递命令 USART3_Init(115200);//调试用 HCSR04_Init(); ResetOLED(); OLED_Init(); Key_Init(); ///////////////以上初始化/////////////////////// OLED_ShowString(35,20,"READY",24); OLED_Refresh_Gram(); delay_ms(1000); OLED_Clear(); /////////////////////////////欢迎界面,提示准备工作///////////////////////////////// while(KEY==1) { OLED_ShowString(0,0,"Self checking now...",12); OLED_Refresh_Gram(); if(USART_RX2_STA&0x8000) { len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度 for(t=0;t<len;t++) { temp[t]=Rx2Buf[t]; while((USART2->SR&0X40)==0);//等待发送结束 } flag=1; USART_RX2_STA=0; }//接受来自X86的命令,用于自检。 if(flag==1) { SelfCheck=TempOrPressure(temp); { if(SelfCheck=='C') { value=ValueOfMea(temp); if(value==1) { OLED_ShowString(0,15,"Environment ok",12); SelfCheckCounter++; } if(value==2) { OLED_ShowString(0,30,"The data chain ok",12); } if(value==0) { OLED_ShowString(0,42,"Checking fail...",12); } } } memset(temp,0,sizeof(u8)*100); flag=0; }//先对开发环境进行自检,在VS下下发ok标志即可。 OLED_Refresh_Gram(); if(SelfCheckCounter==1)//如果已经通过了开发环境自检 { while(KEY==1)//不按强制退出就一直自检,直到成功 { if(DataChain_SelfTest()==1)//数据链自检完成 break; else continue; } SelfCheckCounter=0; break;//在不按按键强制退出的情况下,只有自检成功了才能退出。 } } OLED_Clear(); /////////////////////////以上对上位机的自检,按键强制结束////////////////// OLED_ShowString(0,0,"Parameters",16); OLED_ShowString(0,16,"X=",12); OLED_ShowString(0,28,"Y=",12); OLED_ShowString(0,40,"S=",12); OLED_ShowString(0,52,"D=",12); OLED_Refresh_Gram(); flag=0;//复位flag ///////////显示参数//////////////////////////////// //AutoLaunch(); ////////////////////////以上开始起飞///////////////////////////////// while(1) { if(USART_RX2_STA&0x8000) { len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度 for(t=0;t<len;t++) { temp[t]=Rx2Buf[t]; while((USART2->SR&0X40)==0);//等待发送结束 } flag=1; USART_RX2_STA=0; //printf3("%s\r\n",temp); }//接受来自X86的命令 if(flag==1) { mode=TempOrPressure(temp); if(mode=='S') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"S\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_S_PARAM,value); #endif } OLED_ShowNum(20,40,value,6,12); // counter++; } if(mode=='X') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"X\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_X_PARAM,value); #endif } OLED_ShowNum(20,16,value,6,12); // counter++; } else if(mode=='Y') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"Y\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_Y_PARAM,value); #endif } OLED_ShowNum(20,28,value,6,12); // counter++; } { delay_ms(10);//太小在透传情况下可能出问题? { D_val=HCSR04_GetDistance_Filter(); #ifdef __TRANSPARENT_MODE printf1("\"D\":\"%ld\"\r\n",D_val); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_D_PARAM,value); #endif } OLED_ShowNum(20,52,D_val,6,12); // counter=0; }//去掉了判断,每个周期都要做判断,同时进行距离的pid调控。 OLED_Refresh_Gram(); memset(temp,0,sizeof(u8)*100); flag=0; } } }
void ovc3860_init() { USART2_Init(115200); //ovc3860 uart init }
//================================================================================================ // //================================================================================================ void USART_Configuration(void) { USART1_Init(); // Debug Port USART2_Init(); // Modem port }
int main(void) { // u8 a[] = {0xAA, 0xAA, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,0x99,0xa0,0x04,0x10,0x08,0x01,0x08,0x99}; u8 a[] = {0x11, 0x22, 0x33,0x44, 0x55, 0x66, 0x77}; RobotRate rate; WheelSpeed wheelspeed; SystemInit(); USART1_Init(115200); USART2_Init(115200); USART3_Init(38400); UART4_Init(115200); CAN1_Init(); LED_Init(); // TIM2_Init(); TIM3_Init(); SysTick_Init(); Motor_init(); amp_init(); mag_sensor_init(); flash_init(); DelayMs(1000); //Time for Motor Driver Board to init //set_all_speedctl(); t3 = micros(); //*************************initial sensor***************************************************************// while(t < 0x15) { if(UART4RecvPtrR != UART4RecvPtrW) { op = AHRSCheckDataFrame(); if(op == ACC_METER || op == GYRO || op == ANGLE_OUTPUT || op == MAG_METER ) { SensorInitial(op); t++; } } t4 = micros(); time_taken = t4 - t3; if(time_taken > 3000000) { //break; } } sch_init(); sch_add_task(sensors, 6, 20); sch_add_task(AHRS_compute, 1, 50); // sch_add_task(led_task, 4, 100); sch_add_task(UART2Proc, 10, 20); // sch_add_task(UART3Proc, 3, 20); // sch_add_task(UART3Proc, 4, 20); // sch_add_task(FRIDCheck, 2, 20); sch_start(); while (1) { sch_dispatch_tasks(); //Welcome(); } }