´«Ò¼´«Ã½ÓûÊÕ¹ºÌ¨ÍåÖÐÊÓ½Ó½ü³ÉÊÂ

ƵµÀµÄǢ̸£¬½üÈÕÒÑÈ¡µÃÖØÒªÍ»ÆÆ£¬¾ÝϤ²¢ÔÚ±¾ÖܽøÈë×îºó½×¶Î£¬ÁÍÅÔŲ́ÍåÒµÎñÀ©Õ¹ÖÁµç×Ó µÄ·¶³ë¡£Ò¼´«Ã½×òÌìÎÞÉýµø£¬±¨Ò»ÔªÒ»½Ç¡£ ±¾Ô³õ£¬Êг¡´«³öÖÐʱ¼¯ÍÅÒòÆìÏ¡¶Öйúʱ±¨¡·¿÷ËðÑÏÖØ£¬Æä¶­Ê³¤ÓཨР...
#include "stm32f10x.h" #include "Delay.h" #include "usart.h" #include <string.h> #include <stdio.h> #define REV_OK 0 //½ÓÊÕÍê&sup3;ɱêÖ&frac34; #define REV_WAIT 1 //½ÓÊÕδÍê&sup3;ɱêÖ&frac34; #define ESP8266_WIFI_INFO "AT+CWJAP=\"V30Pro\",\"lxz132530\"\r\n" //#define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"183.230.40.39\",6002\r\n" //&frac34;ɰæOneNETµØÖ· #define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"mqtts.heclouds.com\",1883\r\n" //аæOneNETµØÖ· //#define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"192.168.11.125\",8080\r\n" //µ÷ÊÔµØÖ· unsigned char esp8266_buf[128]; unsigned short esp8266_cnt = 0, esp8266_cntPre = 0; //========================================================== // º¯ÊýÃû&sup3;Æ£º ESP8266_Clear // // º¯Êý¹¦ÄÜ£º Çå¿Õ»º´æ // // Èë¿Ú²ÎÊý£º ÎÞ // // ·µ»Ø²ÎÊý£º ÎÞ // // ˵Ã÷£º //========================================================== void ESP8266_Clear(void) { memset(esp8266_buf, 0, sizeof(esp8266_buf)); esp8266_cnt = 0; } //========================================================== // º¯ÊýÃû&sup3;Æ£º ESP8266_WaitRecive // // º¯Êý¹¦ÄÜ£º µÈ´ý½ÓÊÕÍê&sup3;É // // Èë¿Ú²ÎÊý£º ÎÞ // // ·µ»Ø²ÎÊý£º REV_OK-½ÓÊÕÍê&sup3;É REV_WAIT-½ÓÊÕ&sup3;¬Ê±Î´Íê&sup3;É // // ˵Ã÷£º Ñ­»·µ÷Óüì²âÊÇ·ñ½ÓÊÕÍê&sup3;É //========================================================== _Bool ESP8266_WaitRecive(void) { if(esp8266_cnt == 0) //Èç¹û½ÓÊÕ¼ÆÊýΪ0 Ôò˵Ã÷ûÓд¦ÓÚ½ÓÊÕÊý&frac34;ÝÖУ¬ËùÒÔÖ±½ÓÌø&sup3;ö£¬½áÊøº¯Êý return REV_WAIT; if(esp8266_cnt == esp8266_cntPre) //Èç¹ûÉÏÒ»´ÎµÄÖµºÍÕâ´ÎÏàͬ£¬Ôò˵Ã÷½ÓÊÕÍê±Ï { esp8266_cnt = 0; //Çå0½ÓÊÕ¼ÆÊý return REV_OK; //·µ»Ø½ÓÊÕÍê&sup3;ɱêÖ&frac34; } esp8266_cntPre = esp8266_cnt; //ÖÃΪÏàͬ return REV_WAIT; //·µ»Ø½ÓÊÕδÍê&sup3;ɱêÖ&frac34; } //========================================================== // º¯ÊýÃû&sup3;Æ£º ESP8266_SendCmd // // º¯Êý¹¦ÄÜ£º ·¢ËÍÃüÁî // // Èë¿Ú²ÎÊý£º cmd£ºÃüÁî // res£ºÐèÒª¼ì²éµÄ·µ»ØÖ¸Áî // // ·µ»Ø²ÎÊý£º 0-&sup3;ɹ¦ 1-ʧ°Ü // // ˵Ã÷£º //========================================================== _Bool ESP8266_SendCmd(char *cmd, char *re
最新发布
03-25
include "usart.h" int fputc(int ch,FILE *p) //º¯ÊýĬÈϵģ¬ÔÚʹÓÃprintfº¯Êýʱ×Ô¶¯µ÷Óà { USART_SendData(USART1,(u8)ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); return ch; } //´¿Ú1ÖжϷþÎñ&sup3;ÌÐò //×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó u8 USART1_RX_BUF[USART1_REC_LEN]; //½ÓÊÕ»º&sup3;å,×î´óUSART_REC_LEN¸ö×Ö½Ú. //½ÓÊÕ״̬ //bit15£¬ ½ÓÊÕÍê&sup3;ɱêÖ&frac34; //bit14£¬ ½ÓÊÕµ½0x0d //bit13~0£¬ ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿ u16 USART1_RX_STA=0; //½ÓÊÕ״̬±ê¼Ç /******************************************************************************* * º¯ Êý Ãû : USART1_Init * º¯Êý¹¦ÄÜ : USART1&sup3;õʼ»¯º¯Êý * Êä Èë : bound:²¨ÌØÂÊ * Êä &sup3;ö : ÎÞ *******************************************************************************/ void USART1_Init(u32 bound) { //GPIO¶Ë¿ÚÉèÖà GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); /* ÅäÖÃGPIOµÄģʽºÍIO¿Ú */ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //´¿ÚÊä&sup3;öPA9 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä&sup3;ö GPIO_Init(GPIOA,&GPIO_InitStructure); /* &sup3;õʼ»¯´¿ÚÊäÈëIO */ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //´¿ÚÊäÈëPA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //Ä£ÄâÊäÈë GPIO_Init(GPIOA,&GPIO_InitStructure); /* &sup3;õʼ»¯GPIO */ //USART1 &sup3;õʼ»¯ÉèÖà USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖà USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö&sup3;¤Îª8λÊý&frac34;ݸñʽ USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæÅ¼Ð£Ñéλ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý&frac34;ÝÁ÷¿ØÖÆ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½ USART_Init(USART1, &USART_InitStructure); //&sup3;õʼ»¯´¿Ú1 USART_Cmd(USART1, ENABLE); //ʹÄÜ´¿Ú1 USART_ClearFlag(USART1, USART_FLAG_TC); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÏà¹ØÖÐ¶Ï //Usart1 NVIC ÅäÖà NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//´¿Ú1ÖжÏͨµÀ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×ÓÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ NVIC_Init(&NVIC_InitStructure); //¸ù&frac34;ÝÖ¸¶¨µÄ²ÎÊý&sup3;õʼ»¯VIC¼Ä´æÆ÷¡¢ } /******************************************************************************* * º¯ Êý Ãû : USART1_IRQHandler * º¯Êý¹¦ÄÜ : USART1ÖжϺ¯Êý * Êä Èë : ÎÞ * Êä &sup3;ö : ÎÞ *******************************************************************************/ void USART1_IRQHandler(void) //´¿Ú1ÖжϷþÎñ&sup3;ÌÐò { u8 r; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //½ÓÊÕÖÐ¶Ï { r =USART_ReceiveData(USART1);//(USART1->DR); //¶ÁÈ¡½ÓÊÕµ½µÄÊý&frac34;Ý if((USART1_RX_STA&0x8000)==0)//½ÓÊÕδÍê&sup3;É { if(USART1_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d { if(r!=0x0a)USART1_RX_STA=0;//½ÓÊÕ´íÎó,ÖØÐ¿ªÊ¼ else USART1_RX_STA|=0x8000; //½ÓÊÕÍê&sup3;ÉÁË } else //»¹Ã»ÊÕµ½0X0D { if(r==0x0d)USART1_RX_STA|=0x4000; else { USART1_RX_BUF[USART1_RX_STA&0X3FFF]=r; USART1_RX_STA++; if(USART1_RX_STA>(USART1_REC_LEN-1))USART1_RX_STA=0;//½ÓÊÕÊý&frac34;Ý´íÎó,ÖØÐ¿ªÊ¼½ÓÊÕ } } } } }
03-09
#define USART_RXBUFF_SIZE 400 // //½ÓÊÕ»º&sup3;å,×î´ó400¸ö×Ö½Ú. u8 usart_rxBuff[USART_RXBUFF_SIZE]; u8 usart_rxBuffIndex = 0; UART_HandleTypeDef UART5_Handler; //UART&frac34;ä±ú //&sup3;õʼ»¯IO ´®¿Ú2 //bound:²¨ÌØÂÊ void uart_init(u32 bound) { //UART &sup3;õʼ»¯ÉèÖà UART5_Handler.Instance=UART5; //USART2 UART5_Handler.Init.BaudRate=bound; //²¨ÌØÂÊ UART5_Handler.Init.WordLength=UART_WORDLENGTH_8B; //×Ö&sup3;¤Îª8λÊý&frac34;ݸñʽ UART5_Handler.Init.StopBits=UART_STOPBITS_1; //Ò»¸öֹͣλ UART5_Handler.Init.Parity=UART_PARITY_NONE; //ÎÞÆæÅ¼Ð£Ñéλ UART5_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //ÎÞÓ²¼þÁ÷¿Ø UART5_Handler.Init.Mode=UART_MODE_TX_RX; //ÊÕ·¢Ä£Ê½ HAL_UART_Init(&UART5_Handler); //HAL_UART_Init()»áʹÄÜUART2 // __HAL_UART_DISABLE_IT(&UART2_Handler, UART_IT_TXE); HAL_UART_Receive_IT(&UART5_Handler, (u8 *)usart_rxBuff, 1); // HAL_UART_Transmit_IT(&UART2_Handler, (u8 *)usart_rxBuff, 1);//¸Ãº¯Êý»á¿ªÆô½ÓÊÕÖжϣº±êÖ&frac34;λUART_IT_RXNE£¬²¢ÇÒÉèÖýÓÊÕ»º&sup3;åÒÔ¼°½ÓÊÕ»º&sup3;å½ÓÊÕ×î´óÊý&frac34;ÝÁ¿ } //UARTµ×²ã&sup3;õʼ»¯£¬Ê±ÖÓʹÄÜ£¬Òý½ÅÅäÖã¬ÖжÏÅäÖà //´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà //huart:´®¿Ú&frac34;ä±ú void HAL_UART_MspInit(UART_HandleTypeDef *huart) { //GPIO¶Ë¿ÚÉèÖà GPIO_InitTypeDef GPIO_Initure; if(huart->Instance==UART5)//Èç¹ûÊÇ´®¿Ú1£¬½øÐд®¿Ú1 MSP&sup3;õʼ»¯ { __HAL_RCC_GPIOC_CLK_ENABLE(); //ʹÄÜGPIOAʱÖÓ __HAL_RCC_GPIOD_CLK_ENABLE(); //ʹÄÜGPIOAʱÖÓ __HAL_RCC_UART5_CLK_ENABLE(); //ʹÄÜUSART2ʱÖÓ __HAL_RCC_AFIO_CLK_ENABLE(); GPIO_Initure.Pin=GPIO_PIN_12; //PA2 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //¸´ÓÃÍÆÍìÊä&sup3;ö GPIO_Initure.Pull=GPIO_PULLUP; //ÉÏÀ­ GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//¸ßËÙ HAL_GPIO_Init(GPIOC,&GPIO_Initure); //&sup3;õʼ»¯PA2 GPIO_Initure.Pin=GPIO_PIN_2; //PA3 GPIO_Initure.Mode=GPIO_MODE_AF_INPUT; //ģʽҪÉèÖÃΪ¸´ÓÃÊäÈëģʽ£¡ HAL_GPIO_Init(GPIOD,&GPIO_Initure); //&sup3;õʼ»¯PA3 // GPIO_Initure.Pin=GPIO_PIN_6; //PA6 RS485_EN // GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //ÍÆÍìÊä&sup3;ö // HAL_GPIO_Init(GPIOA,&GPIO_Initure); //&sup3;õʼ»¯PA6 RS485_EN // // RS485_EN = 0; // À­µÍʹÄÜ,½ÓÊÜÊý&frac34;Ý HAL_NVIC_EnableIRQ(UART5_IRQn); //ʹÄÜUSART2ÖжÏͨµÀ HAL_NVIC_SetPriority(UART5_IRQn,3,3); //ÇÀÕ¼ÓÅÏȼ¶3£¬×ÓÓÅÏȼ¶3 } } //´®¿Ú2ÖжϷþÎñ&sup3;ÌÐò //×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó static void Usart_PID_Handler(void); void UART5_IRQHandler(void) { u8 dat; OSIntEnter(); if(__HAL_UART_GET_FLAG(&UART5_Handler, UART_FLAG_RXNE)!=RESET) //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý&frac34;ݱØÐëÊÇ0x0d 0x0a½áβ) { //@100ms@100@0@0@101325Pa@101325Pa dat = UART5->DR; usart_rxBuff[usart_rxBuffIndex % USART_RXBUFF_SIZE] = dat; usart_rxBuffIndex++; if(usart_rxBuff[0] != &#39;@&#39;){usart_rxBuffIndex = 0;} if(dat == &#39;\n&#39;){ Usart_PID_Handler(); usart_rxBuffIndex = 0; } } OSIntExit(); } static u8 MyPrintfBuff[100]; void MyPrintf(char *format, ...) { uint16_t buf_len; va_list v_args; va_start(v_args, format); buf_len = vsnprintf((char *)&MyPrintfBuff[0], (size_t ) sizeof(MyPrintfBuff), (char const *) format, v_args); va_end(v_args); if(buf_len >= sizeof(MyPrintfBuff)){buf_len = sizeof(MyPrintfBuff);} // RS485_EN = 1; // À­¸ßʹÄÜ,·¢ËÍÊý&frac34;Ý HAL_UART_Transmit(&UART5_Handler, MyPrintfBuff, buf_len, HAL_MAX_DELAY); // RS485_EN = 0; // À­µÍʹÄÜ,½ÓÊÜÊý&frac34;Ý }修改为硬件为w5500模块的modbus-tcp协议
03-13
#ifndef _ESP8266_H_ #define _ESP8266_H_ #include "main.h" //C¿â #include <stdarg.h> #include <stdlib.h> #define SSID "WIFI" #define PASS "123456789" #define ProductKey "a1wDiNYFwS5" #define DeviceName "PillsCar" #define ClientId "123|securemode=3\\,signmethod=hmacsha1|" #define Password "6940E27041D06C047F31951986F328A11267240C" #define mqttHostUrl "a1wDiNYFwS5.iot-as-mqtt.cn-shanghai.aliyuncs.com" #define port "1883" #define Huart_wifi huart2 #define REV_OK 0 //½ÓÊÕÍê&sup3;ɱêÖ&frac34; #define REV_WAIT 1 //½ÓÊÕδÍê&sup3;ɱêÖ&frac34; #define DelayXms(x) HAL_Delay(x) extern unsigned char ESP8266_buf[1024]; extern unsigned short ESP8266_cnt; extern uint8_t uartwifi_value; //´®¿Ú2½ÓÊÕ»º´æ±äÁ¿ typedef struct{ //ʱ¼ä½á¹¹Ìå uint16_t year; uint8_t month; uint8_t day; uint8_t week; uint8_t hour; uint8_t minute; uint8_t second; }Time_Get; void ESP8266_init(void); //Á¬ÉÏÍøÂçÔò²»¼ÌÐøÁ¬½ÓÁË void Ali_MQTT_Publish(void); //Éϱ¨ÏûÏ¢ ½¨Òé1sÉÏ´«Ò»´ÎÊý&frac34;Ý void Ali_MQTT_Publish_1(void); void Ali_MQTT_Publish_3(void); void Ali_MQTT_Publish_4(void); void Ali_MQTT_Publish_mode(void); void Ali_MQTT_Recevie(void); //½ÓÊÕÏûÏ¢ _Bool ESP8266_Status(void); //1-Á¬½Ó״̬ 0-¶Ï¿ª×´Ì¬ Time_Get ESP8266_Get_Time(void); //´®¿Ú»Øµ÷º¯ÊýʹÓ÷½·¨ //void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //{ // if(huart->Instance == Huart_wifi.Instance)//´®¿Ú´¥·¢ÖÐ¶Ï // { // if(huart->Instance == Huart_wifi.Instance)//´®¿Ú´¥·¢ // { // HAL_UART_Receive_IT(&Huart_wifi, &uartwifi_value, 1); // if(ESP8266_cnt >= sizeof(ESP8266_buf)) ESP8266_cnt = 0; //·ÀÖ¹´®¿Ú±»Ë¢±¬ // ESP8266_buf[ESP8266_cnt++] = uartwifi_value; // } // } //} #endif
06-02
#include "control.h" /************************************************************************** ×÷ÕߣºÆ½ºâС&sup3;µÖ®¼Ò ÎÒµÄÌÔ±¦Ð¡µê£º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; /************************************************************************** º¯Êý¹¦ÄÜ£ºÐ¡&sup3;µÔ˶¯ÊýѧģÐÍ Èë¿Ú²ÎÊý£ºËٶȺÍת½Ç ·µ»Ø Öµ£ºÎÞ **************************************************************************/ void Kinematic_Analysis(float velocity,float turn) { Target_A=(velocity+turn); Target_B=(velocity-turn); //ºóÂÖ²îËÙ } void SelfLocalization(void) //С&sup3;µ×Ô¶¨Î» { const double T_Sampling=0.005*2; //5ms*2 ²ÉÑùÖÜÆÚ const double Encoder_Round=390*4; //±àÂëÆ÷ÏßÊý*4±¶ÆµÏ¸·Ö const double R=0.032, B=0.155; //&sup3;µÂÖ°ë&frac34;¶£¬ÂÖ&frac34;࣬m //Ö±½Ó¿ÉÓõÄÈ«&frac34;Ö±äÁ¿ //extern int Encoder_Left,Encoder_Right; //×óÓÒ±àÂëÆ÷µÄÂö&sup3;弯Êý //extern float X_me,Y_me,theta_me; //С&sup3;µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С&sup3;µÏßËٶȺͽÇËÙ¶È-±àÂëÆ÷¹À¼ÆÖµ //²¹È«ÈçÏ´úÂ룬¼ÆËãС&sup3;µÏßËٶȺͽÇËÙ¶È£¬ÒÔ¼°Ð¡&sup3;µÎ»ÖúÍ×Ë̬ V_me=; W_me=?; X_me=?; Y_me=?; theta_me=; //&frac34;­¹ý¼ÆËãµÄ½Ç¶ÈÒ»¶¨Òª¹æÕûµ½(-PI, PI] theta_me=£¿; } void PathPlanning(void) //·&frac34;¶¹æ»® { 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ºóʵÑé×Ô¶¯¿ªÊ¼ //¸ù&frac34;ÝÄ¿±êλÖ㨺Í×Ë̬£©£¬ÒÔ¼°µ±Ç°»úÆ÷È˵ÄλÖúÍ×Ë̬£¬¹æ»®&sup3;ö»úÆ÷ÈËÏÂһʱ¿ÌµÄÏßËٶȺͽÇËÙ¶È //Ö±½Ó¿ÉÓõÄÈ«&frac34;Ö±äÁ¿ //extern float X_me,Y_me,theta_me; //С&sup3;µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С&sup3;µÏßËٶȺͽÇËÙ¶È-±àÂëÆ÷¹À¼ÆÖµ //extern float Velocity,Turn; //VelocityΪҪ¹æ»®&sup3;öµÄÏßËÙ¶È,TurnΪҪ¹æ»®&sup3;öµÄ½ÇËÙ¶È£¨ÊÜÓ²¼þʵÏÖµÄÒªÇó£¬TurnË&sup3;ʱÕëΪÕý£© //²¹È«ÈçÏ´úÂë // Velocity=£¿;
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值