º®¶¬½µÁÙ¹è¹È:ÎÞÈË¿ÉÒÔÐÒÃ⣨2£©

Íþ¶û¿Æ¿Ë˹ÈÏΪ£¬·çÏÕ»ù½ðÊdz¤ÆÚͶ×Ê£¬Òò´ËËüÃÇÔÚÐÅ´ûÊг¡½Ó½ü¶³½áµÄʱºò£¬ÈÔȻԸÒâ½øÐÐͶ×Ê¡£ µ«ÊÇ£¬Êг¡ÉÏ»¹ÓÐÆäËûµÄDZÔÚ·çÏÕ¡£¶ÔÐí¶àÐÂÐË·çÏÕÆóÒµÀ´Ëµ£¬½ñÄ꼸ºõûÓÐÏ£Íû½øÐÐÊ״ι«¿ªÄ¼¹É(IPO)¡£Èç¹ûIP ...
#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "led.h" /************************************************ ALIENTEK ¾«Ó¢°æSTM32¿ª·¢°åUCOSʵÑé Àý6-1 UCOSIII ÈÎÎñ´´½¨ÓÚɾ³ý ¼¼ÊõÖ§³Ö£ºwww.openedv.com ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com ¹Ø×¢Î¢ÐŹ«ÖÚÆ½Ì¨Î¢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£ ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK ************************************************/ //UCOSIIIÖÐÒÔÏÂÓÅÏȼ¶Óû§³ÌÐò²»ÄÜʹÓã¬ALIENTEK //½«ÕâЩÓÅÏȼ¶·ÖÅ䏸ÁËUCOSIIIµÄ5¸öϵͳÄÚ²¿ÈÎÎñ //ÓÅÏȼ¶0£ºÖжϷþÎñ·þÎñ¹ÜÀíÈÎÎñ OS_IntQTask() //ÓÅÏȼ¶1£ºÊ±ÖÓ½ÚÅÄÈÎÎñ OS_TickTask() //ÓÅÏȼ¶2£º¶¨Ê±ÈÎÎñ OS_TmrTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-2£ºÍ³¼ÆÈÎÎñ OS_StatTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-1£º¿ÕÏÐÈÎÎñ OS_IdleTask() /* ΪÁËʵÏÖÁÙ½çÇøµÄ±£»¤£¬UCOSIIIÌṩÁËÁ½¸öºê£ºOS_CRITICAL_ENTER() ºÍOS_CRITICAL_EXIT()¡£ µ±Ò»¸öÈÎÎñ»òÖжϽøÈëÁÙ½çÇøÊ±£¬Ëü±ØÐëµ÷ÓÃOS_CRITICAL_ENTER()ºêÒÔ»ñµÃÁÙ½çÇøµÄ±£»¤¡£ Õâ¸öºê½«½ûÓÃÖжϣ¬ÒÔÈ·±£Ö´ÐÐÁÙ½çÇøµÄ´úÂë²»»á±»ÖжϻòÇÀÕ¼£¬´Ó¶ø±£Ö¤ÁËÁÙ½çÇøµÄÔ­×ÓÐÔ¡£ µ±´úÂëÖ´ÐÐÍê±Ïʱ£¬ÈÎÎñ»òÖжϱØÐëµ÷ÓÃOS_CRITICAL_EXIT()ºêÀ´»Ö¸´Öжϣ¬ÒÔ±ãÆäËûÈÎÎñºÍÖжϿÉÒÔ·ÃÎʹ²Ïí×ÊÔ´²¢Ö´ÐÐËüÃǵĴúÂë¡£ ʹÓÃOS_CRITICAL_ENTER()ºÍOS_CRITICAL_EXIT()ºêÀ´±£»¤ÁÙ½çÇø£¬ ÄÇôÔÚÈÎÎñT1Ö´ÐеÄÕû¸öʱ¼äÄÚ£¬ÖжϽ«±»½ûÓ㬠ÆäËûÈÎÎñ½«²»ÄÜ·ÃÎʹ²Ïí×ÊÔ´²¢ÇÒÁÙ½çÇøµÄ´úÂ뽫ÒÔÔ­×Ó·½Ê½Ö´ÐÐÍê±Ï¡£ ÕâÑù¿ÉÒÔÈ·±£ÁÙ½çÇø´úÂëµÄÕýÈ·ÐÔ£¬±ÜÃ⾺ÕùÌõ¼þºÍÆäËûͬ²½ÎÊÌâ¡£ */ /* ÔÚUCOS IIIÖУ¬ÈÎÎñµÄÖ´ÐÐ˳ÐòÊÇ»ùÓÚÓÅÏȼ¶µ÷¶ÈËã·¨¡£ ÿ¸öÈÎÎñ¶¼ÓÐÒ»¸öÓÅÏȼ¶£¨0µ½255£©£¬¾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ±ÈµÍÓÅÏȼ¶µÄÈÎÎñ¸ü¿ÉÄܵõ½µ÷¶È¡£ UCOS IIIʹÓÃÇÀռʽµ÷¶È£¬ÕâÒâζ×ŵ±ÓÐÒ»¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ¾ÍÐ÷ʱ£¬µ±Ç°ÕýÔÚÖ´ÐеÄÈÎÎñ½«±»Öжϲ¢ÇÒ¸ßÓÅÏȼ¶ÈÎÎñ½«±»Ö´ÐС£ ÕâÈ·±£Á˾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ¿ÉÒÔ¼°Ê±»ñµÃÖ´ÐУ¬±ÜÃⳤʱ¼ä±»µÍÓÅÏȼ¶ÈÎÎñÕ¼Óô¦ÀíÆ÷µÄÇé¿ö·¢Éú¡£ UCOS IIIÈÎÎñµÄÖ´ÐÐÊÇͨ¹ýÉÏÏÂÎÄÇл»ÊµÏֵġ£ ÉÏÏÂÎÄÇл»ÊÇÖ¸½«´¦ÀíÆ÷µÄ״̬´ÓÒ»¸öÈÎÎñ±£´æµ½Äڴ棬Ȼºó½«ÁíÒ»¸öÈÎÎñµÄ×´Ì¬×°ÔØµ½´¦ÀíÆ÷ÖУ¬ÒÔÔÚ²»¼ä¶ÏµÄÇé¿öÏÂת»»ÈÎÎñÖ´ÐС£ µ±Ò»¸öÈÎÎñÐèÒª±»ÖÐֹʱ£¬¼´Ö´ÐÐOS_TaskSuspend()º¯Êýʱ£¬UCOS III´¦ÀíÆ÷»áÖ´ÐÐÒ»¸öÈÎÎñÇл»Öжϲ¢½«¿ØÖÆÈ¨×ªÒƵ½ÁíÒ»¸öÈÎÎñ¡£ ÈÎÎñÇл»Í¨³£·¢ÉúÔÚÒÔÏÂÇé¿öÏ£º µ±ÈÎÎñÖ÷¶¯µ÷ÓÃÁËÈÎÎñ¿ØÖƺ¯Êý£¨ÀýÈ磬OS_Delay()¡¢OS_EventWait()¡¢OS_TaskSuspend()µÈ£©²¢ÍËÈÃCPUʱ£» µ±Ä³¸öÖжϷþÎñ³ÌÐò(ISR)ÔڹؼüÈÎÎñÖ´ÐÐÆÚ¼äÖ´ÐУ¨¼´ÖжÏÓÅÏȼ¶¸ßÓڹؼüÈÎÎñµÄÓÅÏȼ¶£©¡£ */ //¿ªÊ¼ÈÎÎñ£¬´´½¨ÍêÈÎÎñ¶þºÍÈÎÎñÈý¾Íɾ³ý×Ô¼º //ÈÎÎñÓÅÏȼ¶ #define START_TASK_PRIO 3 //ÈÎÎñ¶ÑÕ»´óС #define START_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB StartTaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK START_TASK_STK[START_STK_SIZE]; //ÈÎÎñº¯Êý void start_task(void *p_arg); ///ÈÎÎñ¶þÁÁµÆ£¬²¢´òÓ¡³öÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK1_TASK_PRIO 4 //ÈÎÎñ¶ÑÕ»´óС #define TASK1_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task1_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; void task1_task(void *p_arg); ///ÈÎÎñÈý£¬´òÓ¡ÈÎÎñÈýÖ´ÐÐÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK2_TASK_PRIO 5 //ÈÎÎñ¶ÑÕ»´óС #define TASK2_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task2_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE]; //ÈÎÎñº¯Êý void task2_task(void *p_arg); volatile u8 key_pressed = 0; volatile u8 current_task = 1; void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // ???? GPIO_Init(GPIOA, &GPIO_InitStructure); } void Key_Scan(void) { static u8 key_up = 1; if (key_up && GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { delay_ms(20); // ?? if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 0; key_pressed = 1; // ?????? } } else if (!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 1; } } //Ö÷º¯Êý int main(void) { OS_ERR err; CPU_SR_ALLOC(); SystemInit();//ÓÉÓÚ±¾¹¤³ÌÊÇÓÉstm32f103zet6ÒÆÖ²ËùÀ´£¬Òò´ËÕâÀïÒò¼ÓÈë±¾º¯ÊýÈ·±£delayº¯ÊýÕý³£Ê¹Óà delay_init(); //ʱÖÓ³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÖжϷÖ×éÅäÖà uart_init(115200); //´®¿Ú³õʼ»¯ LED_Init(); KEY_Init(); // ??????? OSInit(&err); //³õʼ»¯UCOSIII OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨¿ªÊ¼ÈÎÎñ OSTaskCreate((OS_TCB * )&StartTaskTCB, //ÈÎÎñ¿ØÖÆ¿é (CPU_CHAR * )"start task", //ÈÎÎñÃû×Ö (OS_TASK_PTR )start_task, //ÈÎÎñº¯Êý (void * )0, //´«µÝ¸øÈÎÎñº¯ÊýµÄ²ÎÊý (OS_PRIO )START_TASK_PRIO, //ÈÎÎñÓÅÏȼ¶ (CPU_STK * )&START_TASK_STK[0], //ÈÎÎñ¶ÑÕ»»ùµØÖ· (CPU_STK_SIZE)START_STK_SIZE/10, //ÈÎÎñ¶ÑÕ»Éî¶ÈÏÞλ (CPU_STK_SIZE)START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС (OS_MSG_QTY )0, //ÈÎÎñÄÚ²¿ÏûÏ¢¶ÓÁÐÄܹ»½ÓÊÕµÄ×î´óÏûÏ¢ÊýÄ¿,Ϊ0ʱ½ûÖ¹½ÓÊÕÏûÏ¢ (OS_TICK )0, //µ±Ê¹ÄÜʱ¼äƬÂÖתʱµÄʱ¼äƬ³¤¶È£¬Îª0ʱΪĬÈϳ¤¶È£¬ (void * )0, //Óû§²¹³äµÄ´æ´¢Çø (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //ÈÎÎñÑ¡Ïî (OS_ERR * )&err); //´æ·Å¸Ãº¯Êý´íÎóʱµÄ·µ»ØÖµ OS_CRITICAL_EXIT(); //Í˳öÁÙ½çÇø OSStart(&err); //¿ªÆôUCOSIII } //¿ªÊ¼ÈÎÎñÈÎÎñº¯Êý void start_task(void *p_arg) { OS_ERR err; CPU_SR_ALLOC(); p_arg = p_arg; CPU_Init(); #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); //ͳ¼ÆÈÎÎñ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //Èç¹ûʹÄÜÁ˲âÁ¿ÖжϹرÕʱ¼ä CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //µ±Ê¹ÓÃʱ¼äƬÂÖתµÄʱºò //ʹÄÜʱ¼äƬÂÖתµ÷¶È¹¦ÄÜ,ʱ¼äƬ³¤¶ÈΪ1¸öϵͳʱÖÓ½ÚÅÄ£¬¼È1*5=5ms OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨TASK1ÈÎÎñ OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"Task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_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); //´´½¨TASK2ÈÎÎñ OSTaskCreate((OS_TCB * )&Task2_TaskTCB, (CPU_CHAR * )"task2 task", (OS_TASK_PTR )task2_task, (void * )0, (OS_PRIO )TASK2_TASK_PRIO, (CPU_STK * )&TASK2_TASK_STK[0], (CPU_STK_SIZE)TASK2_STK_SIZE/10, (CPU_STK_SIZE)TASK2_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); OS_CRITICAL_EXIT(); //Í˳öÁÙ½çÇø OSTaskDel((OS_TCB*)0,&err); //ɾ³ýstart_taskÈÎÎñ×ÔÉí } // ??1:??PB0(LED0) void task1_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 2; // ?????2 key_pressed = 0; printf("Switch to Task2\n"); } else { // LED0?? GPIO_SetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } } void task2_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 1; // ?????1 key_pressed = 0; printf("Switch back to Task1\n"); } else { // ????2??? // ??:LED1?? GPIO_SetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } }我现在需要刚开始时B0(任务一)LED闪烁,当按下按键后(A0)给予信息量,使得代码进入(任务二),再次摁下按键,两个任务均不执行
06-06
#include "bsp_esp8266.h" #include "common.h" #include "stdio.h" #include "string.h" #include "stdbool.h" #include "bsp_SysTick.h" static void ESP8266_GPIO_Config ( void ); static void ESP8266_USART_Config ( void ); static void ESP8266_USART_NVIC_Configuration ( void ); struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 }; /** * @brief ESP8266³õÊ&frac14;»¯º¯Êý * @param ÎÞ * @retval ÎÞ */ void ESP8266_Init ( void ) { ESP8266_GPIO_Config (); ESP8266_USART_Config (); macESP8266_RST_HIGH_LEVEL(); macESP8266_CH_DISABLE(); } /** * @brief ³õÊ&frac14;»¯ESP8266Óõ&frac12;µÄGPIOÒý&frac12;Å * @param ÎÞ * @retval ÎÞ */ static void ESP8266_GPIO_Config ( void ) { /*¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵Ä&frac12;á&sup1;&sup1;Ìå*/ GPIO_InitTypeDef GPIO_InitStructure; /* ÅäÖà CH_PD Òý&frac12;Å*/ macESP8266_CH_PD_APBxClock_FUN ( macESP8266_CH_PD_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macESP8266_CH_PD_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init ( macESP8266_CH_PD_PORT, & GPIO_InitStructure ); /* ÅäÖà RST Òý&frac12;Å*/ macESP8266_RST_APBxClock_FUN ( macESP8266_RST_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macESP8266_RST_PIN; GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure ); } /** * @brief ³õÊ&frac14;»¯ESP8266Óõ&frac12;µÄ USART * @param ÎÞ * @retval ÎÞ */ static void ESP8266_USART_Config ( void ) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* config USART clock */ macESP8266_USART_APBxClock_FUN ( macESP8266_USART_CLK, ENABLE ); macESP8266_USART_GPIO_APBxClock_FUN ( macESP8266_USART_GPIO_CLK, ENABLE ); /* USART GPIO config */ /* Configure USART Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = macESP8266_USART_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(macESP8266_USART_TX_PORT, &GPIO_InitStructure); /* Configure USART Rx as input floating */ GPIO_InitStructure.GPIO_Pin = macESP8266_USART_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(macESP8266_USART_RX_PORT, &GPIO_InitStructure); /* USART1 mode config */ USART_InitStructure.USART_BaudRate = macESP8266_USART_BAUD_RATE; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(macESP8266_USARTx, &USART_InitStructure); /* ÖжÏÅäÖà */ USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); //Ê&sup1;ÄÜ´®¿Ú&frac12;ÓÊÕÖÐ¶Ï USART_ITConfig ( macESP8266_USARTx, USART_IT_IDLE, ENABLE ); //Ê&sup1;ÄÜ´®¿Ú×ÜÏß¿ÕÏÐÖÐ¶Ï ESP8266_USART_NVIC_Configuration (); USART_Cmd(macESP8266_USARTx, ENABLE); } /** * @brief ÅäÖà ESP8266 USART µÄ NVIC ÖÐ¶Ï * @param ÎÞ * @retval ÎÞ */ static void ESP8266_USART_NVIC_Configuration ( void ) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig ( macNVIC_PriorityGroup_x ); /* Enable the USART2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = macESP8266_USART_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /* * º¯ÊýÃû£ºESP8266_Rst * ÃèÊö £ºÖØÆôWF-ESP8266Ä£¿é * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £º±» ESP8266_AT_Test µ÷Óà */ void ESP8266_Rst ( void ) { #if 0 ESP8266_Cmd ( "AT+RST", "OK", "ready", 2500 ); #else macESP8266_RST_LOW_LEVEL(); Delay_ms ( 500 ); macESP8266_RST_HIGH_LEVEL(); #endif } /* * º¯ÊýÃû£ºESP8266_Cmd * ÃèÊö £º¶ÔWF-ESP8266Ä£¿é·¢ËÍATÖ¸Áî * ÊäÈë £ºcmd£¬´ý·¢Ë͵ÄÖ¸Áî * reply1£¬reply2£¬ÆÚ´ýµÄÏìÓ¦£¬ÎªNULL±í&sup2;»ÐèÏìÓ¦£¬Á&frac12;ÕßΪ»òÂß&frac14;­&sup1;ØÏµ * waittime£¬µÈ´ýÏìÓ¦µÄʱ&frac14;ä * ·µ»Ø : 1£¬Ö¸Áî·¢ËͳÉ&sup1;¦ * 0£¬Ö¸Áî·¢ËÍʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u32 waittime ) { strEsp8266_Fram_Record .InfBit .FramLength = 0; //´ÓпªÊ&frac14;&frac12;ÓÊÕеÄÊý¾Ý°ü macESP8266_Usart ( "%s\r\n", cmd ); if ( ( reply1 == 0 ) && ( reply2 == 0 ) ) //&sup2;»ÐèÒª&frac12;ÓÊÕÊý¾Ý return true; Delay_ms ( waittime ); //ÑÓʱ strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0'; macPC_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF ); if ( ( reply1 != 0 ) && ( reply2 != 0 ) ) return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) || ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) ); else if ( reply1 != 0 ) return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ); else return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) ); } /* * º¯ÊýÃû£ºESP8266_AT_Test * ÃèÊö £º¶ÔWF-ESP8266Ä£¿é&frac12;øÐÐAT&sup2;âÊÔÆô¶¯ * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ //void ESP8266_AT_Test ( void ) //{ // macESP8266_RST_HIGH_LEVEL(); // // Delay_ms ( 1000 ); // // while ( ! ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) ESP8266_Rst (); //} void ESP8266_AT_Test ( void ) { char count=0; macESP8266_RST_HIGH_LEVEL(); Delay_ms ( 1000 ); while ( count < 10 ) { if( ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) return; ESP8266_Rst(); ++ count; } } /* * º¯ÊýÃû£ºESP8266_Net_Mode_Choose * ÃèÊö £ºÑ¡ÔñWF-ESP8266Ä£¿éµÄ&sup1;¤×÷Ä£Ê&frac12; * ÊäÈë £ºenumMode£¬&sup1;¤×÷Ä£Ê&frac12; * ·µ»Ø : 1£¬Ñ¡Ôñ³É&sup1;¦ * 0£¬Ñ¡Ôñʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode ) { switch ( enumMode ) { case STA: return ESP8266_Cmd ( "AT+CWMODE=1", "OK", "no change", 2500 ); case AP: return ESP8266_Cmd ( "AT+CWMODE=2", "OK", "no change", 2500 ); case STA_AP: return ESP8266_Cmd ( "AT+CWMODE=3", "OK", "no change", 2500 ); default: return false; } } /* * º¯ÊýÃû£ºESP8266_JoinAP * ÃèÊö £ºWF-ESP8266Ä£¿éÁ¬&frac12;ÓÍâ&sup2;¿WiFi * ÊäÈë £ºpSSID£¬WiFiÃû³Æ×Ö·û´® * £ºpPassWord£¬WiFiÃÜÂë×Ö·û´® * ·µ»Ø : 1£¬Á¬&frac12;Ó³É&sup1;¦ * 0£¬Á¬&frac12;Óʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_JoinAP ( char * pSSID, char * pPassWord ) { char cCmd [120]; sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord ); return ESP8266_Cmd ( cCmd, "OK", NULL, 5000 ); } /* * º¯ÊýÃû£ºESP8266_BuildAP * ÃèÊö £ºWF-ESP8266Ä£¿é´´&frac12;¨WiFiÈȵã * ÊäÈë £ºpSSID£¬WiFiÃû³Æ×Ö·û´® * £ºpPassWord£¬WiFiÃÜÂë×Ö·û´® * £ºenunPsdMode£¬WiFi&frac14;ÓÃÜ·&frac12;Ê&frac12;´úºÅ×Ö·û´® * ·µ»Ø : 1£¬´´&frac12;¨³É&sup1;¦ * 0£¬´´&frac12;¨Ê§°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_BuildAP ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode ) { char cCmd [120]; sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pSSID, pPassWord, enunPsdMode ); return ESP8266_Cmd ( cCmd, "OK", 0, 1000 ); } /* * º¯ÊýÃû£ºESP8266_Enable_MultipleId * ÃèÊö £ºWF-ESP8266Ä£¿éÆô¶¯¶àÁ¬&frac12;Ó * ÊäÈë £ºenumEnUnvarnishTx£¬ÅäÖÃÊÇ·ñ¶àÁ¬&frac12;Ó * ·µ»Ø : 1£¬ÅäÖóÉ&sup1;¦ * 0£¬ÅäÖÃʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_Enable_MultipleId ( FunctionalState enumEnUnvarnishTx ) { char cStr [20]; sprintf ( cStr, "AT+CIPMUX=%d", ( enumEnUnvarnishTx ? 1 : 0 ) ); return ESP8266_Cmd ( cStr, "OK", 0, 500 ); } /* * º¯ÊýÃû£ºESP8266_Link_Server * ÃèÊö £ºWF-ESP8266Ä£¿éÁ¬&frac12;ÓÍâ&sup2;¿·þÎñÆ÷ * ÊäÈë £ºenumE£¬ÍøÂçЭÒé * £ºip£¬·þÎñÆ÷IP×Ö·û´® * £ºComNum£¬·þÎñÆ÷¶Ë¿Ú×Ö·û´® * £ºid£¬Ä£¿éÁ¬&frac12;Ó·þÎñÆ÷µÄID * ·µ»Ø : 1£¬Á¬&frac12;Ó³É&sup1;¦ * 0£¬Á¬&frac12;Óʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_Link_Server ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id) { char cStr [100] = { 0 }, cCmd [120]; switch ( enumE ) { case enumTCP: sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", ip, ComNum ); break; case enumUDP: sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", ip, ComNum ); break; default: break; } if ( id < 5 ) sprintf ( cCmd, "AT+CIPSTART=%d,%s", id, cStr); else sprintf ( cCmd, "AT+CIPSTART=%s", cStr ); return ESP8266_Cmd ( cCmd, "OK", "ALREAY CONNECT", 4000 ); } /* * º¯ÊýÃû£ºESP8266_StartOrShutServer * ÃèÊö £ºWF-ESP8266Ä£¿é¿ªÆô»ò&sup1;رշþÎñÆ÷Ä£Ê&frac12; * ÊäÈë £ºenumMode£¬¿ªÆô/&sup1;Ø±Õ * £ºpPortNum£¬·þÎñÆ÷¶Ë¿ÚºÅ×Ö·û´® * £ºpTimeOver£¬·þÎñÆ÷³¬Ê±Ê±&frac14;ä×Ö·û´®£¬µ¥Î»£ºÃë * ·µ»Ø : 1£¬&sup2;Ù×÷³É&sup1;¦ * 0£¬&sup2;Ù×÷ʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver ) { char cCmd1 [120], cCmd2 [120]; if ( enumMode ) { sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pPortNum ); sprintf ( cCmd2, "AT+CIPSTO=%s", pTimeOver ); return ( ESP8266_Cmd ( cCmd1, "OK", 0, 500 ) && ESP8266_Cmd ( cCmd2, "OK", 0, 500 ) ); } else { sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pPortNum ); return ESP8266_Cmd ( cCmd1, "OK", 0, 500 ); } } /* * º¯ÊýÃû£ºESP8266_Get_LinkStatus * ÃèÊö £º»ñÈ¡ WF-ESP8266 µÄÁ¬&frac12;Ó״̬£¬&frac12;ÏÊʺϵ¥¶Ë¿ÚʱÊ&sup1;Óà * ÊäÈë £ºÎÞ * ·µ»Ø : 2£¬»ñµÃip * 3£¬&frac12;¨Á¢Á¬&frac12;Ó * 3£¬Ê§È¥Á¬&frac12;Ó * 0£¬»ñȡ״̬ʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ uint8_t ESP8266_Get_LinkStatus ( void ) { if ( ESP8266_Cmd ( "AT+CIPSTATUS", "OK", 0, 500 ) ) { if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:2\r\n" ) ) return 2; else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:3\r\n" ) ) return 3; else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:4\r\n" ) ) return 4; } return 0; } /* * º¯ÊýÃû£ºESP8266_Get_IdLinkStatus * ÃèÊö £º»ñÈ¡ WF-ESP8266 µÄ¶Ë¿Ú£¨Id£©Á¬&frac12;Ó״̬£¬&frac12;ÏÊʺ϶à¶Ë¿ÚʱÊ&sup1;Óà * ÊäÈë £ºÎÞ * ·µ»Ø : ¶Ë¿Ú£¨Id£©µÄÁ¬&frac12;Ó״̬£¬µÍ5λΪÓÐЧ룬·Ö±ð¶ÔÓ¦Id5~0£¬Ä³Î»ÈôÖÃ1±í¸ÃId&frac12;¨Á¢ÁËÁ¬&frac12;Ó£¬Èô±»Çå0±í¸ÃIdδ&frac12;¨Á¢Á¬&frac12;Ó * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ uint8_t ESP8266_Get_IdLinkStatus ( void ) { uint8_t ucIdLinkStatus = 0x00; if ( ESP8266_Cmd ( "AT+CIPSTATUS", "OK", 0, 500 ) ) { if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:0," ) ) ucIdLinkStatus |= 0x01; else ucIdLinkStatus &= ~ 0x01; if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:1," ) ) ucIdLinkStatus |= 0x02; else ucIdLinkStatus &= ~ 0x02; if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:2," ) ) ucIdLinkStatus |= 0x04; else ucIdLinkStatus &= ~ 0x04; if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:3," ) ) ucIdLinkStatus |= 0x08; else ucIdLinkStatus &= ~ 0x08; if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:4," ) ) ucIdLinkStatus |= 0x10; else ucIdLinkStatus &= ~ 0x10; } return ucIdLinkStatus; } /* * º¯ÊýÃû£ºESP8266_Inquire_ApIp * ÃèÊö £º»ñÈ¡ F-ESP8266 µÄ AP IP * ÊäÈë £ºpApIp£¬´æ·Å AP IP µÄÊý×éµÄÊ×µØÖ· * ucArrayLength£¬´æ·Å AP IP µÄÊý×éµÄ³¤¶È * ·µ»Ø : 0£¬»ñȡʧ°Ü * 1£¬»ñÈ¡³É&sup1;¦ * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ uint8_t ESP8266_Inquire_ApIp ( char * pApIp, uint8_t ucArrayLength ) { char uc; char * pCh; ESP8266_Cmd ( "AT+CIFSR", "OK", 0, 500 ); pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "APIP,\"" ); if ( pCh ) pCh += 6; else return 0; for ( uc = 0; uc < ucArrayLength; uc ++ ) { pApIp [ uc ] = * ( pCh + uc); if ( pApIp [ uc ] == '\"' ) { pApIp [ uc ] = '\0'; break; } } return 1; } /* * º¯ÊýÃû£ºESP8266_UnvarnishSend * ÃèÊö £ºÅäÖÃWF-ESP8266Ä£¿é&frac12;øÈë͸´«·¢ËÍ * ÊäÈë £ºÎÞ * ·µ»Ø : 1£¬ÅäÖóÉ&sup1;¦ * 0£¬ÅäÖÃʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_UnvarnishSend ( void ) { if ( ! ESP8266_Cmd ( "AT+CIPMODE=1", "OK", 0, 500 ) ) return false; return ESP8266_Cmd ( "AT+CIPSEND", "OK", ">", 500 ); } /* * º¯ÊýÃû£ºESP8266_ExitUnvarnishSend * ÃèÊö £ºÅäÖÃWF-ESP8266Ä£¿éÍ˳ö͸´«Ä£Ê&frac12; * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ void ESP8266_ExitUnvarnishSend ( void ) { Delay_ms ( 1000 ); macESP8266_Usart ( "+++" ); Delay_ms ( 500 ); } /* * º¯ÊýÃû£ºESP8266_SendString * ÃèÊö £ºWF-ESP8266Ä£¿é·¢ËÍ×Ö·û´® * ÊäÈë £ºenumEnUnvarnishTx£¬ÉùÃ÷ÊÇ·ñÒÑÊ&sup1;ÄÜÁË͸´«Ä£Ê&frac12; * £ºpStr£¬Òª·¢Ë͵Ä×Ö·û´® * £ºulStrLength£¬Òª·¢Ë͵Ä×Ö·û´®µÄ×Ö&frac12;ÚÊý * £ºucId£¬ÄĸöID·¢Ë͵Ä×Ö·û´® * ·µ»Ø : 1£¬·¢ËͳÉ&sup1;¦ * 0£¬·¢ËÍʧ°Ü * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ bool ESP8266_SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, u32 ulStrLength, ENUM_ID_NO_TypeDef ucId ) { char cStr [20]; bool bRet = false; if ( enumEnUnvarnishTx ) { macESP8266_Usart ( "%s", pStr ); bRet = true; } else { if ( ucId < 5 ) sprintf ( cStr, "AT+CIPSEND=%d,%d", ucId, ulStrLength + 2 ); else sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 ); ESP8266_Cmd ( cStr, "> ", 0, 1000 ); bRet = ESP8266_Cmd ( pStr, "SEND OK", 0, 1000 ); } return bRet; } /* * º¯ÊýÃû£ºESP8266_ReceiveString * ÃèÊö £ºWF-ESP8266Ä£¿é&frac12;ÓÊÕ×Ö·û´® * ÊäÈë £ºenumEnUnvarnishTx£¬ÉùÃ÷ÊÇ·ñÒÑÊ&sup1;ÄÜÁË͸´«Ä£Ê&frac12; * ·µ»Ø : &frac12;ÓÊÕµ&frac12;µÄ×Ö·û´®Ê×µØÖ· * µ÷Óà £º±»Íâ&sup2;¿µ÷Óà */ char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx ) { char * pRecStr = 0; strEsp8266_Fram_Record .InfBit .FramLength = 0; strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0; while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag ); strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0'; if ( enumEnUnvarnishTx ) pRecStr = strEsp8266_Fram_Record .Data_RX_BUF; else { if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) ) pRecStr = strEsp8266_Fram_Record .Data_RX_BUF; } return pRecStr; } 对每一行加上注释
06-24
#include "Headfile.h" #include "Time.h" void Timer1_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM1); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructure.TIM_Period=5000; TIM_TimeBaseStructure.TIM_Prescaler= (72-1); TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM1, TIM_FLAG_Update); TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger,ENABLE); TIM_Cmd(TIM1, ENABLE); } Sensor WP_Sensor; Sensor_Health Sensor_Flag; _Baro Baro_Show; Testime Time1_Delta; Testime T11; Testime T22; float ty=0; uint16_t High_Okay_flag=0; /*************************************************** º¯ÊýÃû: void TIM1_UP_IRQHandler(void) ˵Ã÷: ϵͳµ÷¶È¶¨Ê±Æ÷ Èë¿Ú: ÎÞ ³ö¿Ú: ÎÞ ±¸×¢: ºËÐÄ&sup2;¿·Ö£º´«¸ÐÆ÷&sup2;É&frac14;¯¡¢ÂË&sup2;¨¡¢ ×Ë̬&frac12;âËã¡¢&sup1;ßÐÔµ&frac14;º&frac12;¡¢¿ØÖƵȶ&frac14;ÔÚÀïÃæ¸üРעÊÍÕߣºÎÞÃûС¸ç ****************************************************/ void TIM1_UP_IRQHandler(void)//5msË¢ÐÂÒ»´Î { if( TIM_GetITStatus(TIM1,TIM_IT_Update)!=RESET ) { Test_Period(&T11); Test_Period(&Time1_Delta);//ϵͳµ÷¶Èʱ&frac14;ä&sup2;âÊÔÆ÷ NRF24L01_RC();//Ò£¿ØÆ÷&sup2;éѯ&frac12;ÓÊÕ£¬·ÇÖж˷&frac12;Ê&frac12; /*************&frac14;ÓËÙ¶È&frac14;Æ¡¢ÍÓÂÝÒÇÊý×ÖÁ¿&sup2;É&frac14;¯***********/ GET_MPU_DATA();//1.4ms /*************´ÅÁ¦&frac14;Æ+ÆøÑ&sup1;&frac14;Æ×´Ì¬»ú¸üÐÂ***********/ Compass_Tradeoff();//¾ö&sup2;ßÊ&sup1;ÓÃÍâÖôÅÁ¦&frac14;Æ£¬Ä¬ÈÏÄÚÖã¬Ê&sup1;ÓÃÍâÖÃʱעÒâÖáÏò¡¢Ðýת&sup1;ØÏµ SPL06_001_StateMachine(); /*************×Ë̬&frac12;âËã***********/ AHRSUpdate_GraDes_TimeSync(X_w_av,Y_w_av,Z_w_av,X_g_av,Y_g_av,Z_g_av); //DirectionConsineMatrix(DCM_Gyro,DCM_Acc,MagN);//DCM×Ë̬&frac12;âË㣬&sup2;ο&frac14;APM Optflow_Statemachine();//&sup1;âÁ÷״̬»ú£¬³õÊ&frac14;»¯Ê±´æÔÚ&sup1;âÁ÷ÍâÉè SINS_Prepare();//µÃµ&frac12;ÔØÌåÏà¶Ôµ&frac14;º&frac12;ϵµÄÈýÖáÔ˶¯&frac14;ÓËÙ¶È if(High_Okay_flag==1)//¸ß¶È&sup1;ßµ&frac14;ÈÚºÏ { /* Èô´æÔÚ³¬Éù&sup2;¨Ê±£¬ÓõڶþÖÖÈںϷ&frac12;Ê&frac12;£¬ ÒòΪµ±&sup1;Û&sup2;â´«¸ÐÆ÷£¨ÆøÑ&sup1;&frac14;Æ¡¢³¬Éù&sup2;¨£©Çл»Ê±£¬Èý&frac12;×»¥&sup2;&sup1;ÂË&sup2;¨µÄÖÐ&frac14;ä&sup2;ÎÊý ÐèÒªÈÚºÏÒ»¶Îʱ&frac14;䣬&sup2;ÅÄÜÊÕÁ&sup2;£¬¶ø¿¨¶ûÂüÂË&sup2;¨¿ÉÒÔÖ±&frac12;ÓÇл» */ //Strapdown_INS_High();//1¡¢Èý&frac12;×»¥&sup2;&sup1;ÂË&sup2;¨&sup1;ßµ&frac14;ÈÚºÏ Strapdown_INS_High_Kalman();//2¡¢¿¨¶ûÂüÂË&sup2;¨&sup1;ßµ&frac14;ÈÚºÏ } if(GPS_ISR_CNT>=300&&GPS_Update_finished==1)//GPS_PVTÓï¾ä¸üÐÂÍê±Ïºó£¬¿ªÊ&frac14;&frac12;âÎö { GPS_PVT_Parse();//GPS´®¿ÚÊý¾ÝÖ¡&frac12;âÎö Set_GPS_Home();//ÉèÖÃHomeµã GPS_Update_finished=0; } if(GPS_Home_Set==1)//HomeµãÒÑÉèÖà { Filter_Horizontal();//Ë®Æ&frac12;·&frac12;Ïò&sup1;ßµ&frac14;ÈÚºÏ } Total_Control();//×Ü¿ØÖÆÆ÷£ºË®Æ&frac12;λÖÃ+Ë®Æ&frac12;ËÙ¶È+×Ë̬£¨&frac12;ǶÈ+&frac12;ÇËÙ¶È£©¿ØÖÆÆ÷£¬¸ß¶ÈλÖÃ+¸ß¶ÈËÙ¶È+¸ß¶È&frac14;ÓËÙ¶È¿ØÖÆÆ÷ Control_Output();//¿ØÖÆÁ¿×ÜÊä³ö Temperature_Ctrl_Run(); Accel_Calibration_Check();//&frac14;ÓËٶȱ궨&frac14;ì&sup2;â Mag_Calibration_Check();//´ÅÁ¦&frac14;Ʊ궨&frac14;ì&sup2;â ESC_Calibration_Check();//µçµ÷У×&frac14;&frac14;ì&sup2;⣬&frac12;øÈëºóÐèÒª°Îµôµç³Øºó&frac12;øÈë Horizontal_Calibration_Check();//»ú&frac14;ÜË®Æ&frac12;У×&frac14;&frac14;ì&sup2;⣬ȷ±£»ú&frac14;Ü·ÅÖÃÓÚË®Æ&frac12;µØÃæºóÔÙ&sup2;Ù×÷ Angle_Calculate();//&frac14;ÓËÙ¶È&frac14;ÆÅ·À­&frac12;Ç&frac14;ÆË㣬µ±Ã»ÓÐת̨Æ&frac12;̨ʱ£¬¿ÉÒÔ×÷Ϊ×Ë̬&frac12;âËãµÄ&sup1;Û&sup2;â&frac12;Ç¶È Bling_Working(Bling_Mode);//״ָ̬ʾµÆ Usb_Hid_Receive();//USBÐéÄâ´®¿Ú&sup2;éѯ&frac12;âÎö NCLink_SEND_StateMachine();//ÎÞÃû´´ÐµØÃæÕ¾·¢ËÍ״̬»ú /* DMA_Send_Vcan(NamelessQuad.Position[_YAW], NamelessQuad.Speed[_YAW], NamelessQuad.Acceleration[_YAW], WP_Sensor.baro_altitude, 0,Roll_Gyro, 0,0);//DMA´«Ê䣬ֻÊ&sup1;ÓÃÉ&frac12;ÍâÉÏλ»ú */ Flight_Control_Fault_ALL();//·É¿Ø×´Ì¬Õï¶Ï Test_Period(&T22); ty=T22.Now_Time-T11.Now_Time; TIM_ClearITPendingBit(TIM1,TIM_IT_Update); } } 你看看我代码有问题吗,我的超声波模块相对对地距离一直是零HC_SR04_Distance一直是0,修改我的代码
最新发布
07-20
#include "control.h" /************************************************************************** ×÷ÕߣºÆ&frac12;ºâС³µÖ®&frac14;Ò ÎÒµÄÌÔ±¦Ð¡µê£ºhttp://shop114407458.taobao.com/ **************************************************************************/ #define T 0.156f #define L 0.1445f #define K 311.4f u8 Flag_Target; int Voltage_Temp,Voltage_Count,Voltage_All,sum; /************************************************************************** º¯Êý&sup1;¦ÄÜ£ºÐ¡³µÔ˶¯ÊýѧģÐÍ Èë¿Ú&sup2;ÎÊý£ºËٶȺÍת&frac12;Ç ·µ»Ø Öµ£ºÎÞ **************************************************************************/ void Kinematic_Analysis(float velocity,float turn) { Target_A=(velocity+turn); Target_B=(velocity-turn); //ºóÂÖ&sup2;îËÙ } void SelfLocalization(void) //С³µ×Ô¶¨Î» { const double T_Sampling=0.005*2; //5ms*2 &sup2;ÉÑùÖÜÆÚ const double Encoder_Round=390*4; //±àÂëÆ÷ÏßÊý*4±¶ÆµÏ¸·Ö const double R=0.032, B=0.155; //³µÂÖ°ë¾¶£¬Â־࣬m //Ö±&frac12;Ó¿ÉÓõÄÈ«¾Ö±äÁ¿ //extern int Encoder_Left,Encoder_Right; //×óÓÒ±àÂëÆ÷µÄÂö³å&frac14;ÆÊý //extern float X_me,Y_me,theta_me; //С³µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С³µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷&sup1;À&frac14;ÆÖµ //&sup2;&sup1;È«ÈçÏ´úÂ룬&frac14;ÆËãС³µÏßËٶȺÍ&frac12;ÇËÙ¶È£¬ÒÔ&frac14;°Ð¡³µÎ»ÖúÍ×Ë̬ V_me=; W_me=?; X_me=?; Y_me=?; theta_me=; //¾­&sup1;ý&frac14;ÆËãµÄ&frac12;ǶÈÒ»¶¨Òª&sup1;æÕûµ&frac12;(-PI, PI] theta_me=£¿; } void PathPlanning(void) //·¾¶&sup1;æ»® { static int Flag_Start=0; double X_des=3, Y_des=2, Angle_des=0; //Ä¿±êλÖúÍ×Ë̬ const double Kd=20,Ka=-7,Kb=0; double ds,da; if(Flag_Stop==1) { Flag_Start=0; Velocity=0,Turn=0; } else Flag_Start++; if(Flag_Start<3*1000/10) return; //µÈ´ý3sºóʵÑé×Ô¶¯¿ªÊ&frac14; //¸ù¾ÝÄ¿±êλÖ㨺Í×Ë̬£©£¬ÒÔ&frac14;°µ±Ç°»úÆ÷È˵ÄλÖúÍ×Ë̬£¬&sup1;æ»®³ö»úÆ÷ÈËÏÂһʱ¿ÌµÄÏßËٶȺÍ&frac12;ÇËÙ¶È //Ö±&frac12;Ó¿ÉÓõÄÈ«¾Ö±äÁ¿ //extern float X_me,Y_me,theta_me; //С³µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С³µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷&sup1;À&frac14;ÆÖµ //extern float Velocity,Turn; //VelocityΪҪ&sup1;æ»®³öµÄÏßËÙ¶È,TurnΪҪ&sup1;æ»®³öµÄ&frac12;ÇËÙ¶È£¨ÊÜÓ&sup2;&frac14;þʵÏÖµÄÒªÇó£¬Turn˳ʱÕëΪÕý£© //&sup2;&sup1;È«ÈçÏ´úÂë // Velocity=£¿;
03-25
////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»&sup1;©Ñ§Ï°Ê&sup1;Óã¬Î´¾­×÷ÕßÐí¿É£¬&sup2;»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ÐÀÞ±µç×Ó // // ÎÄ &frac14;þ Ãû :yanwu.c // °æ ±¾ ºÅ : v1.0 // ×÷ Õß : ÐÀÞ±µç×Ó // Éú³ÉÈÕÆÚ : 20200101 // ×î&frac12;üÐÞ¸Ä : // &sup1;¦ÄÜÃèÊö :Ö÷º¯Êý // ÐÞ¸ÄÀúÊ· : // ÈÕ ÆÚ : // ×÷ Õß : ÐÀÞ±µç×Ó // ÐÞ¸ÄÄÚÈÝ : ´´&frac12;¨ÎÄ&frac14;þ //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) ÐÀÞ±µç×Ó2020/3/16 //All rights reserved //******************************************************************************/. //³ÌÐòÍ·º¯Êý #include <reg52.h> #include <intrins.h> //°üº¬Í·ÎÄ&frac14;þ //ÏÔʾº¯Êý #include <display.h> //ºê¶¨Òå #define uint unsigned int #define uchar unsigned char //&sup1;Ü&frac12;ÅÉùÃ÷ sbit LED_R= P2^2;//ºìµÆ sbit LED_G= P2^0;//ÂÌµÆ sbit FENG = P2^5;//·äÃùÆ÷ //sbit san=P3^4; //·çÉÈ¿ØÖÆ£¨Ñ¡Å䣩 sbit CS = P1^4; sbit Clk = P1^2; sbit DATI = P1^3; sbit DATO = P1^3; //ADC0832Òý&frac12;Å //°´&frac14;ü sbit Key1=P2^6; //ÉèÖÃ&frac14;ü sbit Key2=P2^7; //&frac14;Ó°´&frac14;ü sbit Key3=P3^7; //&frac14;õ°´&frac14;ü bit bdata flag; //±¨¾¯±ê־λ uchar set; //ÉèÖÃ״̬ /*******************************¶¨ÒåÈ«¾Ö±äÁ¿********************************/ unsigned char dat = 0; //ADÖµ unsigned char CH=0; //ͨµÀ±äÁ¿ unsigned int sum=0; //Æ&frac12;¾ùÖµ&frac14;ÆËãʱµÄ×ÜÊý unsigned char m=0; //º¯ÊýÉùÃ÷ extern uchar ADC0809(); extern void Key(); //¾Æ¾«º¬Á¿±äÁ¿ uchar temp=0; uchar WARNING=25; //±¨¾¯Öµ /**************************************************************************** º¯Êý&sup1;¦ÄÜ:ADת»»×Ó³ÌÐò Èë¿Ú&sup2;ÎÊý:CH ³ö¿Ú&sup2;ÎÊý:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) { unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; //³õÊ&frac14;»¯ DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH == 0x00 ) //ͨµÀÑ¡Ôñ { Clk = 0; DATI = 1; //ͨµÀ0µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; //ͨµÀ0µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } else { Clk = 0; DATI = 1; //ͨµÀ1µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; //ͨµÀ1µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } Clk = 0; DATI = 1; for( i = 0;i < 8;i++ ) //¶Áȡǰ8λµÄÖµ { _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; } for (i = 0; i < 8; i++) //¶ÁÈ¡ºó8λµÄÖµ { test >>= 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; } if (adval == test) //±È&frac12;Ïǰ8λÓëºó8λµÄÖµ£¬Èç&sup1;û&sup2;»ÏàͬÉáÈ¥¡£ÈôÒ»Ö±³öÏÖÏÔʾΪÁ㣬Çë&frac12;«¸ÃÐÐÈ¥µô dat = test; nop_(); CS = 1; //ÊÍ·ÅADC0832 DATO = 1; Clk = 1; return dat; } void init() //³õÊ&frac14;»¯º¯Êý { TMOD=0x01; //&sup1;¤×÷·&frac12;Ê&frac12; TL0=0xb0; TH0=0x3c; //¸³³õÖµ£¨12MHz¾§ÕñµÄ50ms£© EA=1; //´ò¿ªÖжÏ×Ü¿ª&sup1;Ø ET0=1; //´ò¿ªÖжÏÔÊÐí¿ª&sup1;Ø TR0=1; //´ò¿ª¶¨Ê±Æ÷¿ª&sup1;Ø } void main() //Ö÷º¯Êý { Init1602();//³õÊ&frac14;»¯ÏÔʾ init(); //³õÊ&frac14;»¯¶¨Ê±Æ÷ while(1) //&frac12;øÈëÑ­»· { for(m=0;m<50;m++) //¶Á50´ÎADÖµ sum = adc0832(0)+sum; //¶Áµ&frac12;µÄADÖµ£¬&frac12;«¶Áµ&frac12;µÄÊý¾ÝÀÛ&frac14;Óµ&frac12;sum temp=sum/50; //Ìø³öÉÏÃæµÄforÑ­»·ºó£¬&frac12;«ÀÛ&frac14;ÓµÄ×ÜÊý³ýÒÔ50µÃµ&frac12;Æ&frac12;¾ùÖµtemp sum=0; //Æ&frac12;¾ùÖµ&frac14;ÆËãÍê³Éºó£¬&frac12;«×ÜÊýÇåÁã if(set==0) //Ö»ÓÐÔÚ·ÇÉèÖÃ״̬ʱ£¬ Display_1602(temp,WARNING); //&sup2;ÅË¢ÐÂÏÔʾʵʱŨ¶ÈÖµ if(temp<WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈֵСÓÚ±¨¾¯ÖµÊ± { flag=0; //±¨¾¯±ê־λÖÃ0£¬&sup2;»±¨¾¯ } else if(temp>WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈÖµ´óÓÚ±¨¾¯ÖµÊ± { flag=1; //±¨¾¯±ê־λÖÃ1 } Key(); //ɨÃè°´&frac14;ü } } void Key() //°´&frac14;üº¯Êý { if(Key1==0) //ÉèÖÃ&frac14;ü°´ÏÂʱ { while(Key1==0); //&frac14;ì&sup2;â°´&frac14;üÊÇ·ñÊÍ·Å FENG=0; //·äÃùÆ÷Ïì set++; //ÉèÖÃ״̬±êÖ¾&frac14;Ó flag=0; //Í£Ö&sup1;±¨¾¯ // san=1; //·çÉÈÍ£Ö&sup1;ת¶¯£¨Ñ¡Å䣩 TR0=0; //¶¨Ê±Æ÷Í£Ö&sup1; } if(set==1) //ÉèÖÃʱ { write_com(0x38);//ÆÁÄ»³õÊ&frac14;»¯ write_com(0x80+0x40+13);//Ñ¡Öб¨¾¯ÖµµÄλÖà write_com(0x0f);//´ò¿ªÏÔʾ ÎÞ&sup1;â±ê &sup1;â±êÉÁ˸ write_com(0x06);//µ±¶Á»òдһ¸ö×Ö·ûÊÇÖ¸Õëºóһһλ FENG=1; //·äÃùÆ÷Í£Ö&sup1;ÃùÏì } else if(set>=2) //ÔÙ°´Ò»ÏÂÉèÖÃ&frac14;üʱ£¬Í˳öÉèÖà { set=0; //ÉèÖÃ״̬ÇåÁã write_com(0x38);//ÆÁÄ»³õÊ&frac14;»¯ write_com(0x0c);//´ò¿ªÏÔʾ ÎÞ&sup1;â±ê ÎÞ&sup1;â±êÉÁ˸ FENG=1; //·äÃùÆ÷Í£Ö&sup1;Ïì flag=1; //±¨¾¯±ê־λÖÃ1 TR0=1; //¶¨Ê±Æ÷¿ªÊ&frac14;&frac14;ÆÊ± } if(Key2==0&&set!=0) //µ±ÔÚÉèÖÃ״̬ʱ£¬°´ÏÂ&frac14;Ó&frac14;üʱ { while(Key2==0); //°´&frac14;üÊÍ·Å FENG=0; //·äÃùÆ÷ÃùÏì WARNING++; //±¨¾¯ãÐÖµ&frac14;Ó if(WARNING>=255)//ãÐÖµ×î´ó&frac14;Óµ&frac12;255 WARNING=0; //ÇåÁã write_com(0x80+0x40+11); //ÔÚãÐÖµµÄλÖÃдÈëÉèÖõÄÊý¾Ý write_data('0'+WARNING/100); //ÏÔʾ°Ù루&frac12123³ýÒÔ100µÃµ&frac12;µÄÉÌÊÇ1£¬¾ÍÊǰÙλÊý¾Ý£©123ΪÀý×Ó write_data('0'+WARNING/10%10);//ÏÔʾʮ루&frac12123³ýÒÔ10µÃµ&frac12;ÉÌÊÇ12£¬&frac1212³ýÒÔ10µÄÓàÊý¾ÍÊÇʮ룩 write_data('0'+WARNING%10); //ÏÔʾ¸ö루&frac12123³ýÒÔ10µÄÓàÊý3¾ÍÊǸöλÊý¾Ý£©123ΪÀý×Ó write_com(0x80+0x40+13);//λÖà FENG=1;//·äÃùÆ÷Í£Ö&sup1; } if(Key3==0&&set!=0) //&frac14;õ°´&frac14;ü×¢ÊÍ&sup2;ο&frac14;&frac14;Ó°´&frac14;ü&sup2;¿·Ö { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+11); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+13);//λÖà FENG=1; } } void time1_int(void) interrupt 1 //¶¨Ê±Æ÷º¯Êý { uchar count; TL0=0xb0; TH0=0x3c; //ÖØÐ¸³³õÖµ count++; //&frac14;ÆÊ±±äÁ¿&frac14;Ó if(count==10)//¶¨Ê±Æ÷¶¨Ê±ÊÇ50ms£¬´Ë´¦&frac14;ÆÊý10´Î£¬ÕýºÃÊÇ500ms£¬ÓÃÓÚ±¨¾¯Ê± µÆÁÁºÍ·äÃùÆ÷Ïì { if(flag==0) //±¨¾¯±ê־Ϊ0ʱ { LED_G=0; //Â̵ÆÁÁ LED_R=1; //ºìµÆÃð FENG=1; //·äÃùÆ÷&sup2;»Ïì // san=1; //·çÉÈ&sup2;»×ª£¨Ñ¡Å䣩 } if(flag==1) //±¨¾¯±ê־λΪ1ʱ { LED_G=1; //Â̵ÆÃð LED_R=0; //ºìµÆÁÁ FENG=0; //·äÃùÆ÷Ïì // san=0; //·çÉÈת¶¯£¨Ñ¡Å䣩 } } if(count==20) //&frac14;ÆÊýµ&frac12;20ʱ£¬ÕýºÃÊÇ1000ms£¬¾ÍÊÇ1s£¬ÕâÀï¾ÍÊÇÈõÆÃ𣬷äÃùÆ÷&sup2;»Ï죬´Ó¶ø×ö³öÉÁ˸µÄЧ&sup1;û { count=0; //&frac14;Ƶ&frac12;1sʱ£¬&frac12;«countÇåÁ㣬×&frac14;±¸ÖØÐÂ&frac14;ÆÊý if(flag==0) { LED_G=1; LED_R=1; FENG=1; // san=1; //È«&sup2;¿&sup1;Ø±Õ } if(flag==1) { LED_G=1; LED_R=1; FENG=1; // san=0; //±¨¾¯Öµ£¬·çÉÈÊÇһֱת¶¯µÄ£¨Ñ¡Å䣩 } } } 修改为下限报警
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值