mirror of
https://github.com/DashyFox/StackSport.git
synced 2025-05-04 07:10:17 +00:00
IR_CMD_Handler
This commit is contained in:
parent
55e8424f78
commit
148d748c20
@ -13,19 +13,19 @@
|
|||||||
#define MAX_NUMBER_SHOTS_IN_PROGRAMS 31
|
#define MAX_NUMBER_SHOTS_IN_PROGRAMS 31
|
||||||
#define MAX_NUMBER_PROGRAMS_IN_MACRO 16
|
#define MAX_NUMBER_PROGRAMS_IN_MACRO 16
|
||||||
|
|
||||||
struct StructNumberScrewCount{
|
typedef struct MacroProgram{
|
||||||
unsigned char number;
|
unsigned char id;
|
||||||
unsigned char speedScrew;
|
unsigned char speedScrew;
|
||||||
unsigned char countRepeat;
|
unsigned char countRepeat;
|
||||||
unsigned char options;
|
unsigned char options;
|
||||||
};
|
}MacroProgram;
|
||||||
|
|
||||||
struct StructNumberScrew{
|
typedef struct ProgramShot{
|
||||||
unsigned char number;
|
unsigned char id;
|
||||||
unsigned char speedScrew;
|
unsigned char speedScrew;
|
||||||
};
|
}ProgramShot;
|
||||||
|
|
||||||
struct StructShot {
|
typedef struct Shot {
|
||||||
unsigned char countRepeatShot;
|
unsigned char countRepeatShot;
|
||||||
unsigned char speedRollerTop;
|
unsigned char speedRollerTop;
|
||||||
unsigned char speedRollerBottom;
|
unsigned char speedRollerBottom;
|
||||||
@ -33,20 +33,20 @@ struct StructShot {
|
|||||||
unsigned char rotationAxial;
|
unsigned char rotationAxial;
|
||||||
unsigned char rotationHorizontal;
|
unsigned char rotationHorizontal;
|
||||||
unsigned char rotationVertical;
|
unsigned char rotationVertical;
|
||||||
};
|
}Shot;
|
||||||
|
|
||||||
struct StructProgram {
|
typedef struct Program {
|
||||||
unsigned char countRepeat;
|
unsigned char countRepeat;
|
||||||
unsigned char options;
|
unsigned char options;
|
||||||
struct StructNumberScrew numberScrew[MAX_NUMBER_SHOTS_IN_PROGRAMS];
|
ProgramShot shots[MAX_NUMBER_SHOTS_IN_PROGRAMS];
|
||||||
};
|
}Program;
|
||||||
|
|
||||||
struct StructMacro {
|
typedef struct Macro {
|
||||||
struct StructNumberScrewCount numberScrewCount[MAX_NUMBER_PROGRAMS_IN_MACRO];
|
MacroProgram programs[MAX_NUMBER_PROGRAMS_IN_MACRO];
|
||||||
};
|
} Macro;
|
||||||
|
|
||||||
void SaveShot(unsigned char number, struct StructShot* shot);
|
void SaveShot(unsigned char number, struct Shot* shot);
|
||||||
void FLASH_WriteBlock(uint8_t *writeAddr, unsigned char *flashWrBufPtr);
|
void FLASH_WriteBlock(uint8_t *writeAddr, unsigned char *flashWrBufPtr);
|
||||||
|
|
||||||
struct StructShot GetShot( unsigned char number );
|
Shot GetShot( unsigned char number );
|
||||||
|
|
||||||
|
13
Core/Inc/GlobalDefines.h
Normal file
13
Core/Inc/GlobalDefines.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* GlobalDefines.h
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_GLOBALDEFINES_H_
|
||||||
|
#define INC_GLOBALDEFINES_H_
|
||||||
|
|
||||||
|
#define UART_BUFFER_SIZE 64
|
||||||
|
|
||||||
|
#endif /* INC_GLOBALDEFINES_H_ */
|
@ -8,45 +8,16 @@
|
|||||||
|
|
||||||
extern unsigned char IR_Command;
|
extern unsigned char IR_Command;
|
||||||
extern unsigned char IR_Address;
|
extern unsigned char IR_Address;
|
||||||
|
|
||||||
extern unsigned char IR_CommandNumber[3];
|
|
||||||
extern unsigned char IRStatus;
|
extern unsigned char IRStatus;
|
||||||
|
|
||||||
void IR_handler(void);
|
//extern unsigned char IR_CommandNumber[3];
|
||||||
void ClearIRStatus(void);
|
|
||||||
void ClearIRCommand(void);
|
|
||||||
void ClearIR(void);
|
|
||||||
void SetShiftReg_inline (unsigned char b1, unsigned char b2, unsigned char b3);
|
|
||||||
void SetShiftReg (unsigned char shiftreg[3]);
|
|
||||||
|
|
||||||
enum IR_CMD_LIST {
|
typedef struct IRData{
|
||||||
IR_FRONT_LEFT = 20,
|
unsigned char address;
|
||||||
IR_FRONT_MID = 58,
|
unsigned char command;
|
||||||
IR_FONT_RIGHT = 21,
|
} IRData;
|
||||||
IR_MACRO = 63,
|
|
||||||
IR_PROG = 37,
|
void IR_handler(void);
|
||||||
IR_SHOT = 56,
|
IRData getIRData(void);
|
||||||
IR_NUM_1 = 0,
|
unsigned char IR_Available();
|
||||||
IR_NUM_2 = 1,
|
void ClearIRStatus(void);
|
||||||
IR_NUM_3 = 2,
|
|
||||||
IR_NUM_4 = 3,
|
|
||||||
IR_NUM_5 = 4,
|
|
||||||
IR_NUM_6 = 5,
|
|
||||||
IR_NUM_7 = 6,
|
|
||||||
IR_NUM_8 = 7,
|
|
||||||
IR_NUM_9 = 8,
|
|
||||||
IR_NUM_0 = 9,
|
|
||||||
IR_DEBUG = 29, // -/--
|
|
||||||
IR_PAUSE = 43,
|
|
||||||
IR_STOP = 116,
|
|
||||||
IR_START = 124,
|
|
||||||
IR_F_BTN = 23,
|
|
||||||
IR_ESC = 117,
|
|
||||||
IR_ENTER = 97,
|
|
||||||
IR_TEMPO_INC = 60,
|
|
||||||
IR_TEMPO_DEC = 54,
|
|
||||||
IR_ENGINE_UP_INC = 18, // скорость верхнего мотора
|
|
||||||
IR_ENGINE_UP_DEC = 19,
|
|
||||||
IR_ENGINE_DOWM_INC = 16,
|
|
||||||
IR_ENGINE_DOWM_DEC = 17
|
|
||||||
};
|
|
||||||
|
47
Core/Inc/IR_CMD_Handler.h
Normal file
47
Core/Inc/IR_CMD_Handler.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* IR_CMD_Handler.h
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_IR_CMD_HANDLER_H_
|
||||||
|
#define INC_IR_CMD_HANDLER_H_
|
||||||
|
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
|
||||||
|
void IR_CMD_Handler();
|
||||||
|
|
||||||
|
enum IR_CMD_LIST {
|
||||||
|
IR_FRONT_LEFT = 20,
|
||||||
|
IR_FRONT_MID = 58,
|
||||||
|
IR_FONT_RIGHT = 21,
|
||||||
|
IR_MACRO = 63,
|
||||||
|
IR_PROG = 37,
|
||||||
|
IR_SHOT = 56,
|
||||||
|
IR_NUM_1 = 0,
|
||||||
|
IR_NUM_2 = 1,
|
||||||
|
IR_NUM_3 = 2,
|
||||||
|
IR_NUM_4 = 3,
|
||||||
|
IR_NUM_5 = 4,
|
||||||
|
IR_NUM_6 = 5,
|
||||||
|
IR_NUM_7 = 6,
|
||||||
|
IR_NUM_8 = 7,
|
||||||
|
IR_NUM_9 = 8,
|
||||||
|
IR_NUM_0 = 9,
|
||||||
|
IR_DEBUG = 29, // -/--
|
||||||
|
IR_PAUSE = 43,
|
||||||
|
IR_STOP = 116,
|
||||||
|
IR_START = 124,
|
||||||
|
IR_F_BTN = 23,
|
||||||
|
IR_ESC = 117,
|
||||||
|
IR_ENTER = 97,
|
||||||
|
IR_TEMPO_INC = 60,
|
||||||
|
IR_TEMPO_DEC = 54,
|
||||||
|
IR_ENGINE_UP_INC = 18, // скорость верхнего мотора
|
||||||
|
IR_ENGINE_UP_DEC = 19,
|
||||||
|
IR_ENGINE_DOWM_INC = 16,
|
||||||
|
IR_ENGINE_DOWM_DEC = 17
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* INC_IR_CMD_HANDLER_H_ */
|
39
Core/Inc/RobotFunctions.h
Normal file
39
Core/Inc/RobotFunctions.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* RobotFunctions.h
|
||||||
|
*
|
||||||
|
* Created on: Aug 24, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_ROBOTFUNCTIONS_H_
|
||||||
|
#define INC_ROBOTFUNCTIONS_H_
|
||||||
|
|
||||||
|
#include "pca9685.h"
|
||||||
|
|
||||||
|
|
||||||
|
void doShot();
|
||||||
|
void doShotForever();
|
||||||
|
|
||||||
|
void prepareShot();
|
||||||
|
|
||||||
|
void stopShooting();
|
||||||
|
|
||||||
|
void setPos();
|
||||||
|
void setPosDefault();
|
||||||
|
|
||||||
|
// 0 .. 100
|
||||||
|
void setShneckSpeed(uint8_t speed);
|
||||||
|
|
||||||
|
//(-v) 0 .. 100(stop) .. 200(+v)
|
||||||
|
void setRollersSpeed(uint8_t speed); //(-v) 0 . 100(stop) . 200(+v)
|
||||||
|
|
||||||
|
void startProgram(); // shot sequence
|
||||||
|
void startMacro(); // shot sequence
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INC_ROBOTFUNCTIONS_H_ */
|
17
Core/Inc/ShiftReg.h
Normal file
17
Core/Inc/ShiftReg.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* ShiftReg.h
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_SHIFTREG_H_
|
||||||
|
#define SRC_SHIFTREG_H_
|
||||||
|
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
|
||||||
|
void SetShiftReg_inline (unsigned char b1, unsigned char b2, unsigned char b3);
|
||||||
|
void SetShiftReg (unsigned char shiftreg[3]);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SRC_SHIFTREG_H_ */
|
23
Core/Inc/SimpleTimer.h
Normal file
23
Core/Inc/SimpleTimer.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* SimpleTimer.h
|
||||||
|
*
|
||||||
|
* Created on: Aug 24, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_SIMPLETIMER_H_
|
||||||
|
#define INC_SIMPLETIMER_H_
|
||||||
|
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
|
||||||
|
#define forTimer(name, time) \
|
||||||
|
static uint32_t name##_previousMillis = 0; \
|
||||||
|
if (millis() - name##_previousMillis >= time)
|
||||||
|
|
||||||
|
#define resetForTimer(name) \
|
||||||
|
name##_previousMillis = millis();
|
||||||
|
|
||||||
|
uint32_t millis();
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INC_SIMPLETIMER_H_ */
|
@ -61,6 +61,7 @@ void USB_LP_CAN1_RX0_IRQHandler(void);
|
|||||||
void TIM3_IRQHandler(void);
|
void TIM3_IRQHandler(void);
|
||||||
void I2C1_EV_IRQHandler(void);
|
void I2C1_EV_IRQHandler(void);
|
||||||
void I2C1_ER_IRQHandler(void);
|
void I2C1_ER_IRQHandler(void);
|
||||||
|
void USART3_IRQHandler(void);
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "usbd_cdc_if.h"
|
#include "usbd_cdc_if.h"
|
||||||
|
|
||||||
|
|
||||||
void SaveShot(unsigned char number, struct StructShot* shot)
|
void SaveShot(unsigned char number, struct Shot* shot)
|
||||||
{
|
{
|
||||||
uint16_t blockAddr16 = (uint16_t)(START_ADR_SHOT + (uint16_t)(number*FLASH_BLOCKSIZE));
|
uint16_t blockAddr16 = (uint16_t)(START_ADR_SHOT + (uint16_t)(number*FLASH_BLOCKSIZE));
|
||||||
|
|
||||||
@ -26,31 +26,30 @@ void SaveShot(unsigned char number, struct StructShot* shot)
|
|||||||
FLASH_WriteBlock(blockAddr, Buf);
|
FLASH_WriteBlock(blockAddr, Buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct StructShot GetShot( unsigned char number )
|
struct Shot GetShot( unsigned char number )
|
||||||
{
|
{
|
||||||
struct StructShot shot;
|
struct Shot shot;
|
||||||
|
|
||||||
uint16_t blockAddr16 = (uint16_t)(START_ADR_SHOT + (uint16_t)(number*FLASH_BLOCKSIZE));
|
uint16_t blockAddr16 = (uint16_t)(START_ADR_SHOT + (uint16_t)(number*FLASH_BLOCKSIZE));
|
||||||
|
uint8_t blockAddr[2] = {HIBYTE(blockAddr16), LOBYTE(blockAddr16)};
|
||||||
uint8_t blockAddr[2] = {HIBYTE(blockAddr16), LOBYTE(blockAddr16)};
|
|
||||||
|
unsigned char Buf[FLASH_BLOCKSIZE];
|
||||||
|
|
||||||
|
|
||||||
|
HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), blockAddr, 2, 10);
|
||||||
|
HAL_Delay(1);
|
||||||
|
HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1), Buf, FLASH_BLOCKSIZE, 10);
|
||||||
|
HAL_Delay(1);
|
||||||
|
|
||||||
|
shot.countRepeatShot = Buf[1];
|
||||||
|
shot.speedRollerTop = Buf[2];
|
||||||
|
shot.speedRollerBottom = Buf[3];
|
||||||
|
shot.speedScrew = Buf[4];
|
||||||
|
shot.rotationAxial = Buf[5];
|
||||||
|
shot.rotationHorizontal = Buf[6];
|
||||||
|
shot.rotationVertical = Buf[7];
|
||||||
|
|
||||||
unsigned char Buf[FLASH_BLOCKSIZE];
|
return shot;
|
||||||
|
|
||||||
|
|
||||||
HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), blockAddr, 2, 10);
|
|
||||||
HAL_Delay(1);
|
|
||||||
HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1), Buf, FLASH_BLOCKSIZE, 10);
|
|
||||||
HAL_Delay(1);
|
|
||||||
|
|
||||||
shot.countRepeatShot = Buf[1];
|
|
||||||
shot.speedRollerTop = Buf[2];
|
|
||||||
shot.speedRollerBottom = Buf[3];
|
|
||||||
shot.speedScrew = Buf[4];
|
|
||||||
shot.rotationAxial = Buf[5];
|
|
||||||
shot.rotationHorizontal = Buf[6];
|
|
||||||
shot.rotationVertical = Buf[7];
|
|
||||||
|
|
||||||
return shot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,13 +11,7 @@ unsigned char IR_IndexBitAddress;
|
|||||||
unsigned int IR_Pulse;
|
unsigned int IR_Pulse;
|
||||||
unsigned int currentIR_Pulse;
|
unsigned int currentIR_Pulse;
|
||||||
|
|
||||||
unsigned char IR_CommandNumber[3];
|
|
||||||
unsigned char IRStatus;
|
unsigned char IRStatus;
|
||||||
unsigned char NumberMacroProgramShot;
|
|
||||||
unsigned char NumberShot;
|
|
||||||
unsigned char NumberProgram;
|
|
||||||
unsigned char NumberMacro;
|
|
||||||
unsigned char CommandMacroProgramShot;
|
|
||||||
|
|
||||||
void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
|
void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
|
||||||
{
|
{
|
||||||
@ -136,71 +130,13 @@ void ClearIRStatus()
|
|||||||
IRStatus = STATUS_START;
|
IRStatus = STATUS_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearIRCommand()
|
IRData getIRData(){
|
||||||
{
|
NVIC_DisableIRQ(EXTI1_IRQn);
|
||||||
IR_CommandNumber[0] = 0xFF;
|
IRData ret = {IR_Address, IR_Command};
|
||||||
IR_CommandNumber[1] = 0xFF;
|
NVIC_EnableIRQ(EXTI1_IRQn);
|
||||||
IR_CommandNumber[2] = 0xFF;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearIR()
|
unsigned char IR_Available(){
|
||||||
{
|
return IRStatus == STATUS_REPEAT;
|
||||||
IR_Command = 0x7F;
|
|
||||||
IR_Address = 0x1F;
|
|
||||||
IR_OptionsProgram = 0x00;
|
|
||||||
|
|
||||||
NumberMacroProgramShot = 0xFF;
|
|
||||||
NumberShot = 0xFF;
|
|
||||||
NumberProgram = 0xFF;
|
|
||||||
NumberMacro = 0xFF;
|
|
||||||
|
|
||||||
CommandMacroProgramShot = 0x00;
|
|
||||||
|
|
||||||
ClearIRStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetShiftReg_inline(unsigned char b1, unsigned char b2, unsigned char b3){
|
|
||||||
unsigned char shiftreg[3] = {b1,b2,b3};
|
|
||||||
SetShiftReg(shiftreg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetShiftReg(unsigned char shiftreg[3])
|
|
||||||
{
|
|
||||||
for (unsigned char i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
for (unsigned char j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
if (((shiftreg[i] >> j) & 0x01) == 0x01)
|
|
||||||
{
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
|
||||||
}
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
163
Core/Src/IR_CMD_Handler.c
Normal file
163
Core/Src/IR_CMD_Handler.c
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* IR_CMD_Handler.c
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "IR_CMD_Handler.h"
|
||||||
|
#include "IR.h"
|
||||||
|
#include "SimpleTimer.h"
|
||||||
|
#include "Print.h"
|
||||||
|
#include "ShiftReg.h"
|
||||||
|
|
||||||
|
#define IR_Timeout 137
|
||||||
|
#define ResetInputProgerss_Timeout 2500
|
||||||
|
#define NULL_NumberParam 0xFFFF
|
||||||
|
|
||||||
|
//extern unsigned char IR_Command;
|
||||||
|
//extern unsigned char IR_Address;
|
||||||
|
extern unsigned char IRStatus;
|
||||||
|
|
||||||
|
IRData data;
|
||||||
|
IRData old_data;
|
||||||
|
|
||||||
|
unsigned char b1 = 1;
|
||||||
|
unsigned char b2 = 1;
|
||||||
|
unsigned char b3 = 1;
|
||||||
|
|
||||||
|
uint32_t IR_Timeout_timer = 0;
|
||||||
|
uint8_t dataHandled_flag = 0;
|
||||||
|
|
||||||
|
uint32_t inputInProgerss_timer = 0;
|
||||||
|
uint8_t inputInProgerss = 0;
|
||||||
|
uint8_t digitInputInProgerss = 0;
|
||||||
|
|
||||||
|
uint8_t inputDigit = 0; // left = 0 to right
|
||||||
|
|
||||||
|
uint16_t inputNumberParam = NULL_NumberParam;
|
||||||
|
|
||||||
|
enum IR_MENU {
|
||||||
|
IR_MENU_Home,
|
||||||
|
|
||||||
|
IR_MENU_SHOT, IR_MENU_PROGR, IR_MENU_MACRO, IR_MENU_,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void IR_Home_Process();
|
||||||
|
void IR_Shot_Selection();
|
||||||
|
|
||||||
|
void IR_CMD_Clear();
|
||||||
|
|
||||||
|
void (*InputHandler)(void) = IR_Home_Process;
|
||||||
|
|
||||||
|
void IR_CMD_Handler() {
|
||||||
|
|
||||||
|
// timeout tick
|
||||||
|
if (dataHandled_flag && (millis() - IR_Timeout_timer > IR_Timeout)) {
|
||||||
|
dataHandled_flag = 0;
|
||||||
|
}
|
||||||
|
if (inputInProgerss
|
||||||
|
&& (millis() - inputInProgerss_timer > ResetInputProgerss_Timeout)) {
|
||||||
|
IR_CMD_Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// cmd handler
|
||||||
|
if (IR_Available()) {
|
||||||
|
data = getIRData();
|
||||||
|
|
||||||
|
IR_Timeout_timer = millis();
|
||||||
|
// works once per button press
|
||||||
|
if (memcmp(&data, &old_data, sizeof(IRData)) != 0
|
||||||
|
|| !dataHandled_flag) {
|
||||||
|
dataHandled_flag = 1;
|
||||||
|
if (IR_Address == 0x01) {
|
||||||
|
printNumber(data.command);
|
||||||
|
InputHandler();
|
||||||
|
inputInProgerss = 1;
|
||||||
|
inputInProgerss_timer = millis();
|
||||||
|
}
|
||||||
|
memcpy(&old_data, &data, sizeof(IRData));
|
||||||
|
}
|
||||||
|
IR_Timeout_timer = millis();
|
||||||
|
ClearIRStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IR_CMD_Clear() {
|
||||||
|
|
||||||
|
InputHandler = IR_Home_Process;
|
||||||
|
inputDigit = 0;
|
||||||
|
inputInProgerss = 0;
|
||||||
|
digitInputInProgerss = 0;
|
||||||
|
inputNumberParam = NULL_NumberParam;
|
||||||
|
SetShiftReg_inline(0, 0xff, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IR_Home_Process() {
|
||||||
|
InputHandler = IR_Home_Process;
|
||||||
|
SetShiftReg_inline(0xff, 0, 0);
|
||||||
|
switch (data.command) {
|
||||||
|
case IR_FONT_RIGHT:
|
||||||
|
InputHandler = IR_Shot_Selection;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// case IR_FONT_RIGHT:
|
||||||
|
// // if(!(b1>64 || b2> 64|| b3>64)) b1 = 64;
|
||||||
|
// // else
|
||||||
|
// // {
|
||||||
|
// // b1 = b1>>1;
|
||||||
|
// // b2 = b2<<1;
|
||||||
|
// // b3 = b3<<1;
|
||||||
|
// // }
|
||||||
|
// SetShiftReg_inline(b1, b2, b3);
|
||||||
|
// break;
|
||||||
|
case IR_FRONT_MID:
|
||||||
|
SetShiftReg_inline(0, 0, 0);
|
||||||
|
b1 = b2 = b3 = 0;
|
||||||
|
break;
|
||||||
|
case IR_FRONT_LEFT:
|
||||||
|
// if(!b3)
|
||||||
|
// b3 = 128;
|
||||||
|
// b3 = b3>>1;
|
||||||
|
// if(!b3)
|
||||||
|
// b2 = 64;
|
||||||
|
|
||||||
|
SetShiftReg_inline(++b1, ++b2, ++b3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IR_Shot_Selection() { // Сделать общим
|
||||||
|
SetShiftReg_inline(0x03, 0, 0);
|
||||||
|
if (0 <= data.command && data.command <= 9) {
|
||||||
|
if (digitInputInProgerss) {
|
||||||
|
inputNumberParam = inputNumberParam * 10; // dec shift << 1
|
||||||
|
inputNumberParam += data.command + 1;
|
||||||
|
SetShiftReg_inline(0xF0, 0, 0);
|
||||||
|
} else {
|
||||||
|
inputNumberParam = data.command + 1;
|
||||||
|
}
|
||||||
|
digitInputInProgerss = 1;
|
||||||
|
} else {
|
||||||
|
digitInputInProgerss = 0;
|
||||||
|
switch (data.command) {
|
||||||
|
|
||||||
|
case IR_ENTER:
|
||||||
|
if(inputNumberParam != NULL_NumberParam){
|
||||||
|
SetShiftReg_inline(0, 0, inputNumberParam);
|
||||||
|
}
|
||||||
|
inputNumberParam = NULL_NumberParam;
|
||||||
|
digitInputInProgerss = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
IR_Home_Process();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
52
Core/Src/ShiftReg.c
Normal file
52
Core/Src/ShiftReg.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* ShiftReg.c
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
#include "ShiftReg.h"
|
||||||
|
|
||||||
|
void SetShiftReg_inline(unsigned char b1, unsigned char b2, unsigned char b3){
|
||||||
|
unsigned char shiftreg[3] = {b1,b2,b3};
|
||||||
|
SetShiftReg(shiftreg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetShiftReg(unsigned char shiftreg[3])
|
||||||
|
{
|
||||||
|
for (unsigned char i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
for (unsigned char j = 0; j < 8; j++)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
if (((shiftreg[i] >> j) & 0x01) == 0x01)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
|
||||||
|
}
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
|
||||||
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
}
|
12
Core/Src/SimpleTimer.c
Normal file
12
Core/Src/SimpleTimer.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* SimpleTimer.c
|
||||||
|
*
|
||||||
|
* Created on: Aug 25, 2024
|
||||||
|
* Author: DashyFox
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SimpleTimer.h"
|
||||||
|
|
||||||
|
uint32_t millis(){
|
||||||
|
return HAL_GetTick()*10;
|
||||||
|
}
|
191
Core/Src/main.c
191
Core/Src/main.c
@ -23,11 +23,17 @@
|
|||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
#include "GlobalDefines.h"
|
||||||
|
|
||||||
#include "usbd_cdc_if.h"
|
#include "usbd_cdc_if.h"
|
||||||
#include "pca9685.h"
|
#include "pca9685.h"
|
||||||
#include "IR.h"
|
#include "IR.h"
|
||||||
|
#include "IR_CMD_Handler.h"
|
||||||
#include "EEPROM.h"
|
#include "EEPROM.h"
|
||||||
#include "Print.h"
|
#include "Print.h"
|
||||||
|
#include "SimpleTimer.h"
|
||||||
|
#include "RobotFunctions.h"
|
||||||
|
#include "ShiftReg.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@ -62,6 +68,8 @@ uint8_t velosety[600];
|
|||||||
uint8_t rxcomlite = 0;
|
uint8_t rxcomlite = 0;
|
||||||
uint8_t initcomlete = 0;
|
uint8_t initcomlete = 0;
|
||||||
|
|
||||||
|
uint8_t uart_rx_buffer[64];
|
||||||
|
|
||||||
unsigned char Shiftreg[3];
|
unsigned char Shiftreg[3];
|
||||||
|
|
||||||
uint8_t rejim[60]; // 0 - chislo rejimov, 1-6 - rejim1, 7-12 - rejim2...
|
uint8_t rejim[60]; // 0 - chislo rejimov, 1-6 - rejim1, 7-12 - rejim2...
|
||||||
@ -76,14 +84,9 @@ uint16_t vi = 0;
|
|||||||
uint16_t timing1 = 0;
|
uint16_t timing1 = 0;
|
||||||
uint16_t timing2 = 0;
|
uint16_t timing2 = 0;
|
||||||
|
|
||||||
uint8_t MYIR_command = 0;
|
struct Shot BufShots[MAX_NUMBER_SHOTS];
|
||||||
|
struct Program BufPrograms;
|
||||||
volatile uint32_t millisCounter = 0;
|
struct Macro BufMacro;
|
||||||
uint32_t previousMillis = 0;
|
|
||||||
|
|
||||||
struct StructShot BufShots[MAX_NUMBER_SHOTS];
|
|
||||||
struct StructProgram BufPrograms;
|
|
||||||
struct StructMacro BufMacro;
|
|
||||||
|
|
||||||
extern PCD_HandleTypeDef hpcd_USB_FS;
|
extern PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
|
|
||||||
@ -107,19 +110,12 @@ static void MX_USART3_UART_Init(void);
|
|||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The application entry point.
|
* @brief The application entry point.
|
||||||
* @retval int
|
* @retval int
|
||||||
*/
|
*/
|
||||||
unsigned char b1 = 1;
|
|
||||||
unsigned char b2 = 1;
|
|
||||||
unsigned char b3 = 1;
|
|
||||||
|
|
||||||
IRMenu menu();
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
menu.foo();
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
@ -206,45 +202,8 @@ initcomlete = 1;
|
|||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (IRStatus == STATUS_REPEAT)
|
|
||||||
{
|
|
||||||
if (IR_Address == 0x01)
|
|
||||||
{
|
|
||||||
MYIR_command = IR_Command;
|
|
||||||
printNumber(MYIR_command);
|
|
||||||
// CDC_Transmit_FS(&MYIR_command, 1);
|
|
||||||
switch (MYIR_command)
|
|
||||||
{
|
|
||||||
case IR_FONT_RIGHT:
|
|
||||||
// if(!(b1>64 || b2> 64|| b3>64)) b1 = 64;
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// b1 = b1>>1;
|
|
||||||
// b2 = b2<<1;
|
|
||||||
// b3 = b3<<1;
|
|
||||||
// }
|
|
||||||
SetShiftReg_inline(b1, b2, b3);
|
|
||||||
break;
|
|
||||||
case IR_FRONT_MID:
|
|
||||||
SetShiftReg_inline(0, 0, 0);
|
|
||||||
b1=b2=b3=0;
|
|
||||||
break;
|
|
||||||
case IR_FRONT_LEFT:
|
|
||||||
// if(!b3)
|
|
||||||
// b3 = 128;
|
|
||||||
// b3 = b3>>1;
|
|
||||||
// if(!b3)
|
|
||||||
// b2 = 64;
|
|
||||||
|
|
||||||
SetShiftReg_inline(++b1, ++b2, ++b3);
|
IR_CMD_Handler();
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearIRStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rxcomlite == 1)
|
if (rxcomlite == 1)
|
||||||
{
|
{
|
||||||
@ -388,14 +347,13 @@ initcomlete = 1;
|
|||||||
// // HAL_Delay(1000);
|
// // HAL_Delay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t currentMillis = millisCounter;
|
forTimer(blinkTimer, 500)
|
||||||
if (currentMillis - previousMillis >= 500)
|
{
|
||||||
{
|
resetForTimer(blinkTimer);
|
||||||
previousMillis = currentMillis;
|
GPIOC->ODR ^= GPIO_PIN_13;
|
||||||
GPIOC->ODR ^= GPIO_PIN_13;
|
// unsigned char text[] = "Hello\n";
|
||||||
// unsigned char text[] = "Hello\n";
|
// printNumber(SysTick->LOAD);
|
||||||
// printNumber(SysTick->LOAD);
|
// CDC_Transmit_FS(text, sizeof(text));
|
||||||
// CDC_Transmit_FS(text, sizeof(text));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
@ -406,9 +364,9 @@ initcomlete = 1;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System Clock Configuration
|
* @brief System Clock Configuration
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void SystemClock_Config(void)
|
void SystemClock_Config(void)
|
||||||
{
|
{
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
@ -416,8 +374,8 @@ void SystemClock_Config(void)
|
|||||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
/** Initializes the RCC Oscillators according to the specified parameters
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
* in the RCC_OscInitTypeDef structure.
|
* in the RCC_OscInitTypeDef structure.
|
||||||
*/
|
*/
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
@ -431,8 +389,9 @@ void SystemClock_Config(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Initializes the CPU, AHB and APB buses clocks
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
*/
|
*/
|
||||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
@ -451,10 +410,10 @@ void SystemClock_Config(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief I2C1 Initialization Function
|
* @brief I2C1 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_I2C1_Init(void)
|
static void MX_I2C1_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -481,13 +440,14 @@ static void MX_I2C1_Init(void)
|
|||||||
/* USER CODE BEGIN I2C1_Init 2 */
|
/* USER CODE BEGIN I2C1_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END I2C1_Init 2 */
|
/* USER CODE END I2C1_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TIM1 Initialization Function
|
* @brief TIM1 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_TIM1_Init(void)
|
static void MX_TIM1_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -559,13 +519,14 @@ static void MX_TIM1_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_Init 2 */
|
/* USER CODE END TIM1_Init 2 */
|
||||||
HAL_TIM_MspPostInit(&htim1);
|
HAL_TIM_MspPostInit(&htim1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TIM2 Initialization Function
|
* @brief TIM2 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_TIM2_Init(void)
|
static void MX_TIM2_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -629,13 +590,14 @@ static void MX_TIM2_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END TIM2_Init 2 */
|
/* USER CODE END TIM2_Init 2 */
|
||||||
HAL_TIM_MspPostInit(&htim2);
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TIM3 Initialization Function
|
* @brief TIM3 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_TIM3_Init(void)
|
static void MX_TIM3_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -690,13 +652,14 @@ static void MX_TIM3_Init(void)
|
|||||||
/* USER CODE BEGIN TIM3_Init 2 */
|
/* USER CODE BEGIN TIM3_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_Init 2 */
|
/* USER CODE END TIM3_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief USART3 Initialization Function
|
* @brief USART3 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_USART3_UART_Init(void)
|
static void MX_USART3_UART_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -720,20 +683,24 @@ static void MX_USART3_UART_Init(void)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN USART3_Init 2 */
|
/* USER CODE BEGIN USART3_Init 2 */
|
||||||
|
if (HAL_UART_Receive_IT(&huart3, uart_rx_buffer, UART_BUFFER_SIZE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
/* USER CODE END USART3_Init 2 */
|
/* USER CODE END USART3_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief GPIO Initialization Function
|
* @brief GPIO Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
static void MX_GPIO_Init(void)
|
static void MX_GPIO_Init(void)
|
||||||
{
|
{
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
/* USER CODE END MX_GPIO_Init_1 */
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
@ -745,7 +712,7 @@ static void MX_GPIO_Init(void)
|
|||||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOA, LED_DATA_Pin | LED_CLK_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOA, LED_DATA_Pin|LED_CLK_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin : PC13 */
|
/*Configure GPIO pin : PC13 */
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_13;
|
GPIO_InitStruct.Pin = GPIO_PIN_13;
|
||||||
@ -755,7 +722,7 @@ static void MX_GPIO_Init(void)
|
|||||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : LED_DATA_Pin LED_CLK_Pin */
|
/*Configure GPIO pins : LED_DATA_Pin LED_CLK_Pin */
|
||||||
GPIO_InitStruct.Pin = LED_DATA_Pin | LED_CLK_Pin;
|
GPIO_InitStruct.Pin = LED_DATA_Pin|LED_CLK_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
@ -780,8 +747,8 @@ static void MX_GPIO_Init(void)
|
|||||||
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
|
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
|
||||||
|
|
||||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
/* USER CODE END MX_GPIO_Init_2 */
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
@ -789,9 +756,9 @@ static void MX_GPIO_Init(void)
|
|||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function is executed in case of error occurrence.
|
* @brief This function is executed in case of error occurrence.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void Error_Handler(void)
|
void Error_Handler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
@ -804,14 +771,14 @@ void Error_Handler(void)
|
|||||||
/* USER CODE END Error_Handler_Debug */
|
/* USER CODE END Error_Handler_Debug */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_FULL_ASSERT
|
#ifdef USE_FULL_ASSERT
|
||||||
/**
|
/**
|
||||||
* @brief Reports the name of the source file and the source line number
|
* @brief Reports the name of the source file and the source line number
|
||||||
* where the assert_param error has occurred.
|
* where the assert_param error has occurred.
|
||||||
* @param file: pointer to the source file name
|
* @param file: pointer to the source file name
|
||||||
* @param line: assert_param error line source number
|
* @param line: assert_param error line source number
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void assert_failed(uint8_t *file, uint32_t line)
|
void assert_failed(uint8_t *file, uint32_t line)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN 6 */
|
/* USER CODE BEGIN 6 */
|
||||||
|
@ -348,6 +348,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init(RX_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(RX_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USART3 interrupt Init */
|
||||||
|
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(USART3_IRQn);
|
||||||
/* USER CODE BEGIN USART3_MspInit 1 */
|
/* USER CODE BEGIN USART3_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART3_MspInit 1 */
|
/* USER CODE END USART3_MspInit 1 */
|
||||||
@ -378,6 +381,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOB, TX_Pin|RX_Pin);
|
HAL_GPIO_DeInit(GPIOB, TX_Pin|RX_Pin);
|
||||||
|
|
||||||
|
/* USART3 interrupt DeInit */
|
||||||
|
HAL_NVIC_DisableIRQ(USART3_IRQn);
|
||||||
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART3_MspDeInit 1 */
|
/* USER CODE END USART3_MspDeInit 1 */
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file stm32f1xx_it.c
|
* @file stm32f1xx_it.c
|
||||||
* @brief Interrupt Service Routines.
|
* @brief Interrupt Service Routines.
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* Copyright (c) 2024 STMicroelectronics.
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is licensed under terms that can be found in the LICENSE file
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
* in the root directory of this software component.
|
* in the root directory of this software component.
|
||||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#include "usb_device.h"
|
#include "usb_device.h"
|
||||||
#include "usbd_cdc_if.h"
|
#include "usbd_cdc_if.h"
|
||||||
|
|
||||||
|
#include "GlobalDefines.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@ -46,43 +48,39 @@
|
|||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
extern volatile uint32_t millisCounter;
|
|
||||||
|
|
||||||
uint8_t myi;
|
uint8_t myi;
|
||||||
//uint8_t ticktime = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0,01 <20>
|
// uint8_t ticktime = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0,01 <20>
|
||||||
uint8_t update1 = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD> 1
|
uint8_t update1 = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD> 1
|
||||||
uint8_t update2 = 0;
|
uint8_t update2 = 0;
|
||||||
extern uint16_t vi; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> 0..599
|
extern uint16_t vi; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> 0..599
|
||||||
uint16_t v1[30]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) [0] - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, [1-29] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint16_t v1[30]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) [0] - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, [1-29] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
uint16_t v2[30];
|
uint16_t v2[30];
|
||||||
|
|
||||||
uint32_t vt1 = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
uint32_t vt1 = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
uint32_t vt2 = 0;
|
uint32_t vt2 = 0;
|
||||||
|
|
||||||
uint16_t vs1[4] = {0,0,0,0}; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint16_t vs1[4] = {0, 0, 0, 0}; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
uint16_t vs2[4] = {0,0,0,0}; //[0] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint16_t vs2[4] = {0, 0, 0, 0}; //[0] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
//[1-3] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> vt
|
//[1-3] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> vt
|
||||||
|
|
||||||
uint32_t vsk1 = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
uint32_t vsk1 = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
uint32_t vsk2 = 0;
|
uint32_t vsk2 = 0;
|
||||||
|
|
||||||
uint16_t Vzad1 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint16_t Vzad1 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
uint16_t Vupr1 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint16_t Vupr1 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
uint16_t Vzad2 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
uint16_t Vupr2 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
|
|
||||||
extern uint8_t rejim[60]; // 0 - chislo rejimov, 1-6 - rejim1, 7-12 - rejim2...
|
|
||||||
extern uint8_t avto; // vkl/otkl avtomaticheskoi raboti
|
|
||||||
extern uint8_t rejim_number; // nomer tekyshego rejima
|
|
||||||
|
|
||||||
|
uint16_t Vzad2 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
uint16_t Vupr2 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
extern uint8_t rejim[60]; // 0 - chislo rejimov, 1-6 - rejim1, 7-12 - rejim2...
|
||||||
|
extern uint8_t avto; // vkl/otkl avtomaticheskoi raboti
|
||||||
|
extern uint8_t rejim_number; // nomer tekyshego rejima
|
||||||
|
|
||||||
extern uint8_t initcomlete;
|
extern uint8_t initcomlete;
|
||||||
extern uint16_t timing1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
extern uint16_t timing1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
extern uint16_t timing2; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
extern uint16_t timing2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
extern uint8_t velosety[600]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>
|
extern uint8_t velosety[600]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>
|
||||||
|
|
||||||
extern uint8_t Vz1;
|
extern uint8_t Vz1;
|
||||||
extern uint8_t Vz2;
|
extern uint8_t Vz2;
|
||||||
@ -99,49 +97,84 @@ int32_t computePID2(uint16_t input, uint16_t setpoint);
|
|||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
int32_t computePID1(uint16_t input, uint16_t setpoint)
|
int32_t computePID1(uint16_t input, uint16_t setpoint)
|
||||||
{
|
{
|
||||||
static int32_t integral = 0, prevErr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
static int32_t integral = 0, prevErr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
int32_t err = setpoint - input; //1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int32_t err = setpoint - input; // 1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
integral = integral + err/20; //2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, ki = 5;
|
integral = integral + err / 20; // 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, ki = 5;
|
||||||
|
|
||||||
if (integral > 4000) { integral = 4000;}
|
if (integral > 4000)
|
||||||
if (integral < 0) { integral = 0;}
|
{
|
||||||
|
integral = 4000;
|
||||||
|
}
|
||||||
|
if (integral < 0)
|
||||||
|
{
|
||||||
|
integral = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t D = (err - prevErr); //3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, kd = 0.01
|
int32_t D = (err - prevErr); // 3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, kd = 0.01
|
||||||
if (D > 4000) { D = 4000;}
|
if (D > 4000)
|
||||||
if (D < 0) { D = 0;}
|
{
|
||||||
|
D = 4000;
|
||||||
|
}
|
||||||
|
if (D < 0)
|
||||||
|
{
|
||||||
|
D = 0;
|
||||||
|
}
|
||||||
|
|
||||||
prevErr = err;
|
prevErr = err;
|
||||||
//
|
//
|
||||||
int32_t Rout = ((err * 3)>>1) + integral + D; //4. <20>=1,5 + <20>=5 + <20>=0.01
|
int32_t Rout = ((err * 3) >> 1) + integral + D; // 4. <20>=1,5 + <20>=5 + <20>=0.01
|
||||||
if (Rout > 4000) { Rout = 4000;} //
|
if (Rout > 4000)
|
||||||
if (Rout < 0) { Rout = 0;} //
|
{
|
||||||
|
Rout = 4000;
|
||||||
|
} //
|
||||||
|
if (Rout < 0)
|
||||||
|
{
|
||||||
|
Rout = 0;
|
||||||
|
} //
|
||||||
|
|
||||||
return Rout;
|
return Rout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t computePID2(uint16_t input, uint16_t setpoint)
|
int32_t computePID2(uint16_t input, uint16_t setpoint)
|
||||||
{
|
{
|
||||||
static int32_t integral = 0, prevErr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
static int32_t integral = 0, prevErr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
int32_t err = setpoint - input; //1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int32_t err = setpoint - input; // 1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
integral = integral + err/20; //2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, ki = 5;
|
integral = integral + err / 20; // 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, ki = 5;
|
||||||
if (integral > 4000) { integral = 4000;}
|
if (integral > 4000)
|
||||||
if (integral < 0) { integral = 0;}
|
{
|
||||||
|
integral = 4000;
|
||||||
|
}
|
||||||
|
if (integral < 0)
|
||||||
|
{
|
||||||
|
integral = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t D = (err - prevErr); //3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, kd = 0.01
|
int32_t D = (err - prevErr); // 3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dt = 0.01, kd = 0.01
|
||||||
if (D > 4000) { D = 4000;}
|
if (D > 4000)
|
||||||
if (D < 0) { D = 0;}
|
{
|
||||||
|
D = 4000;
|
||||||
|
}
|
||||||
|
if (D < 0)
|
||||||
|
{
|
||||||
|
D = 0;
|
||||||
|
}
|
||||||
|
|
||||||
prevErr = err;
|
prevErr = err;
|
||||||
//
|
//
|
||||||
int32_t Rout = ((err * 3)>>1) + integral + D; //4. <20>=1,5 + <20>=5 + <20>=0.01
|
int32_t Rout = ((err * 3) >> 1) + integral + D; // 4. <20>=1,5 + <20>=5 + <20>=0.01
|
||||||
if (Rout > 4000) { Rout = 4000;} //
|
if (Rout > 4000)
|
||||||
if (Rout < 0) { Rout = 0;} //
|
{
|
||||||
|
Rout = 4000;
|
||||||
|
} //
|
||||||
|
if (Rout < 0)
|
||||||
|
{
|
||||||
|
Rout = 0;
|
||||||
|
} //
|
||||||
|
|
||||||
return Rout;
|
return Rout;
|
||||||
}
|
}
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
@ -149,6 +182,7 @@ int32_t computePID2(uint16_t input, uint16_t setpoint)
|
|||||||
extern PCD_HandleTypeDef hpcd_USB_FS;
|
extern PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
extern I2C_HandleTypeDef hi2c1;
|
extern I2C_HandleTypeDef hi2c1;
|
||||||
extern TIM_HandleTypeDef htim3;
|
extern TIM_HandleTypeDef htim3;
|
||||||
|
extern UART_HandleTypeDef huart3;
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
|
|
||||||
/* USER CODE END EV */
|
/* USER CODE END EV */
|
||||||
@ -165,7 +199,7 @@ void NMI_Handler(void)
|
|||||||
|
|
||||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||||
@ -277,95 +311,166 @@ void SysTick_Handler(void)
|
|||||||
{
|
{
|
||||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||||
if (v1[0] > 0) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if (v1[0] > 0)
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
vt1 = 0;
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
for (uint8_t i = 1; i <= v1[0]; i++) { vt1 += v1[i]; }
|
vt1 = 0;
|
||||||
vt1 = vt1/v1[0];
|
for (uint8_t i = 1; i <= v1[0]; i++)
|
||||||
//<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
vt1 += v1[i];
|
||||||
}
|
}
|
||||||
else {vt1 = timing1; }
|
vt1 = vt1 / v1[0];
|
||||||
v1[0] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vt1 = timing1;
|
||||||
|
}
|
||||||
|
v1[0] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
|
||||||
|
if (v2[0] > 0)
|
||||||
|
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
vt2 = 0;
|
||||||
|
for (uint8_t i = 1; i <= v2[0]; i++)
|
||||||
|
{
|
||||||
|
vt2 += v2[i];
|
||||||
|
}
|
||||||
|
vt2 = vt2 / v2[0];
|
||||||
|
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vt2 = timing2;
|
||||||
|
}
|
||||||
|
v2[0] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3
|
||||||
if (v2[0] > 0) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if (vs1[0] < 3)
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
{
|
||||||
vt2 = 0;
|
vs1[vs1[0] + 1] = (uint16_t)vt1;
|
||||||
for (uint8_t i = 1; i <= v2[0]; i++) { vt2 += v2[i]; }
|
vs1[0]++;
|
||||||
vt2 = vt2/v2[0];
|
}
|
||||||
//<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
else
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
{
|
||||||
}
|
vs1[0] = 0;
|
||||||
else {vt2 = timing2; }
|
vs1[vs1[0] + 1] = (uint16_t)vt1;
|
||||||
v2[0] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
vs1[0]++;
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
}
|
||||||
|
|
||||||
|
vsk1 = (vs1[1] + vs1[2] + vs1[3]) / 3;
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3
|
if (vs2[0] < 3)
|
||||||
if (vs1[0] < 3) { vs1[vs1[0]+1] = (uint16_t)vt1; vs1[0]++; } else
|
{
|
||||||
{vs1[0] = 0; vs1[vs1[0]+1] = (uint16_t)vt1; vs1[0]++; }
|
vs2[vs2[0] + 1] = (uint16_t)vt2;
|
||||||
|
vs2[0]++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vs2[0] = 0;
|
||||||
|
vs2[vs2[0] + 1] = (uint16_t)vt2;
|
||||||
|
vs2[0]++;
|
||||||
|
}
|
||||||
|
|
||||||
vsk1 = (vs1[1]+vs1[2]+vs1[3])/3;
|
vsk2 = (vs2[1] + vs2[2] + vs2[3]) / 3;
|
||||||
|
|
||||||
if (vs2[0] < 3) { vs2[vs2[0]+1] = (uint16_t)vt2; vs2[0]++; } else
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 60*1000000/(<28>*10)
|
||||||
{vs2[0] = 0; vs2[vs2[0]+1] = (uint16_t)vt2; vs2[0]++; }
|
if (vsk1 != 0)
|
||||||
|
{
|
||||||
|
vsk1 = 6000000 / vsk1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vsk1 = 0;
|
||||||
|
}
|
||||||
|
if (vsk1 > 10000) vsk1 = 10000;
|
||||||
|
if (vsk1 < 150) vsk1 = 0;
|
||||||
|
|
||||||
vsk2 = (vs2[1]+vs2[2]+vs2[3])/3;
|
if (vsk2 != 0)
|
||||||
|
{
|
||||||
|
vsk2 = 6000000 / vsk2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vsk2 = 0;
|
||||||
|
}
|
||||||
|
if (vsk2 > 10000)
|
||||||
|
vsk2 = 10000;
|
||||||
|
if (vsk2 < 150)
|
||||||
|
vsk2 = 0;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 - 200 <20> -8000 ... 8000 <20><>./<2F><><EFBFBD>.
|
||||||
|
if (Vz1 > 100)
|
||||||
|
{
|
||||||
|
Vzad1 = (Vz1 - 100) * 80;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vzad1 = (100 - Vz1) * 80;
|
||||||
|
}
|
||||||
|
if (Vz2 > 100)
|
||||||
|
{
|
||||||
|
Vzad2 = (Vz2 - 100) * 80;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vzad2 = (100 - Vz2) * 80;
|
||||||
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 60*1000000/(<28>*10)
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (vsk1 != 0) {vsk1 = 6000000/vsk1;} else { vsk1 = 0;}
|
Vupr1 = (uint16_t)computePID1(vsk1, Vzad1);
|
||||||
if (vsk1 > 10000) vsk1 = 10000;
|
Vupr2 = (uint16_t)computePID2(vsk2, Vzad2);
|
||||||
if (vsk1 < 150) vsk1 = 0;
|
|
||||||
|
|
||||||
if (vsk2 != 0) {vsk2 = 6000000/vsk2;} else { vsk2 = 0;}
|
if (Vz1 > 100)
|
||||||
if (vsk2 > 10000) vsk2 = 10000;
|
{
|
||||||
if (vsk2 < 150) vsk2 = 0;
|
TIM2->CCR2 = 0;
|
||||||
|
TIM2->CCR1 = Vupr1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIM2->CCR1 = 0;
|
||||||
|
TIM2->CCR2 = Vupr1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Vz2 > 100)
|
||||||
|
{
|
||||||
|
TIM2->CCR3 = 0;
|
||||||
|
TIM2->CCR4 = Vupr2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIM2->CCR4 = 0;
|
||||||
|
TIM2->CCR3 = Vupr2;
|
||||||
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 - 200 <20> -8000 ... 8000 <20><>./<2F><><EFBFBD>.
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>
|
||||||
if (Vz1 > 100) { Vzad1 = (Vz1 - 100)*80; } else { Vzad1 = (100 - Vz1)*80; }
|
if (vi < 600)
|
||||||
if (Vz2 > 100) { Vzad2 = (Vz2 - 100)*80; } else { Vzad2 = (100 - Vz2)*80; }
|
{
|
||||||
|
velosety[vi] = LOBYTE(timing1);
|
||||||
|
velosety[vi + 1] = HIBYTE(timing1);
|
||||||
|
velosety[vi + 2] = LOBYTE(vsk1);
|
||||||
|
velosety[vi + 3] = HIBYTE(vsk1);
|
||||||
|
velosety[vi + 4] = LOBYTE(vsk2);
|
||||||
|
velosety[vi + 5] = HIBYTE(vsk2);
|
||||||
|
vi = vi + 6;
|
||||||
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// else
|
||||||
Vupr1 = (uint16_t)computePID1(vsk1, Vzad1);
|
// {vi = 0;
|
||||||
Vupr2 = (uint16_t)computePID2(vsk2, Vzad2);
|
// velosety[vi] = LOBYTE(timing1);
|
||||||
|
// velosety[vi+1] = HIBYTE(timing1);
|
||||||
|
// velosety[vi+2] = LOBYTE(vt);
|
||||||
|
// velosety[vi+3] = HIBYTE(vt);
|
||||||
|
// velosety[vi+4] = LOBYTE(vsk);
|
||||||
|
// velosety[vi+5] = HIBYTE(vsk);
|
||||||
|
// vi = vi + 6; }
|
||||||
|
|
||||||
if (Vz1 > 100) { TIM2->CCR2 = 0; TIM2->CCR1 = Vupr1;} else
|
|
||||||
{ TIM2->CCR1 = 0; TIM2->CCR2 = Vupr1;}
|
|
||||||
|
|
||||||
if (Vz2 > 100) { TIM2->CCR3 = 0; TIM2->CCR4 = Vupr2;} else
|
|
||||||
{ TIM2->CCR4 = 0; TIM2->CCR3 = Vupr2;}
|
|
||||||
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>
|
|
||||||
if (vi < 600) { velosety[vi] = LOBYTE(timing1);
|
|
||||||
velosety[vi+1] = HIBYTE(timing1);
|
|
||||||
velosety[vi+2] = LOBYTE(vsk1);
|
|
||||||
velosety[vi+3] = HIBYTE(vsk1);
|
|
||||||
velosety[vi+4] = LOBYTE(vsk2);
|
|
||||||
velosety[vi+5] = HIBYTE(vsk2);
|
|
||||||
vi = vi + 6; }
|
|
||||||
|
|
||||||
// else
|
|
||||||
// {vi = 0;
|
|
||||||
// velosety[vi] = LOBYTE(timing1);
|
|
||||||
// velosety[vi+1] = HIBYTE(timing1);
|
|
||||||
// velosety[vi+2] = LOBYTE(vt);
|
|
||||||
// velosety[vi+3] = HIBYTE(vt);
|
|
||||||
// velosety[vi+4] = LOBYTE(vsk);
|
|
||||||
// velosety[vi+5] = HIBYTE(vsk);
|
|
||||||
// vi = vi + 6; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
millisCounter+=10; // костыльная примерная коррекция
|
|
||||||
/* USER CODE END SysTick_IRQn 0 */
|
/* USER CODE END SysTick_IRQn 0 */
|
||||||
HAL_IncTick();
|
HAL_IncTick();
|
||||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||||
@ -386,17 +491,22 @@ if (vi < 600) { velosety[vi] = LOBYTE(timing1);
|
|||||||
void EXTI0_IRQHandler(void)
|
void EXTI0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN EXTI0_IRQn 0 */
|
/* USER CODE BEGIN EXTI0_IRQn 0 */
|
||||||
if (avto == 1) { if (rejim_number < rejim[0]) rejim_number++; else rejim_number = 1;
|
if (avto == 1)
|
||||||
|
{
|
||||||
|
if (rejim_number < rejim[0])
|
||||||
|
rejim_number++;
|
||||||
|
else
|
||||||
|
rejim_number = 1;
|
||||||
|
|
||||||
SetServo(0, rejim[1 + (rejim_number-1)*6] );
|
SetServo(0, rejim[1 + (rejim_number - 1) * 6]);
|
||||||
SetServo(1, rejim[2 + (rejim_number-1)*6] );
|
SetServo(1, rejim[2 + (rejim_number - 1) * 6]);
|
||||||
SetServo(2, rejim[3 + (rejim_number-1)*6] );
|
SetServo(2, rejim[3 + (rejim_number - 1) * 6]);
|
||||||
Vz1 = rejim[4 + (rejim_number-1)*6];
|
Vz1 = rejim[4 + (rejim_number - 1) * 6];
|
||||||
Vz2 = rejim[5 + (rejim_number-1)*6];
|
Vz2 = rejim[5 + (rejim_number - 1) * 6];
|
||||||
TIM1->CCR1 = 0; TIM1->CCR2 = (uint16_t)(40*rejim[6 + (rejim_number-1)*6]);
|
TIM1->CCR1 = 0;
|
||||||
vi = 0; // zapis grafika start
|
TIM1->CCR2 = (uint16_t)(40 * rejim[6 + (rejim_number - 1) * 6]);
|
||||||
|
vi = 0; // zapis grafika start
|
||||||
}
|
}
|
||||||
/* USER CODE END EXTI0_IRQn 0 */
|
/* USER CODE END EXTI0_IRQn 0 */
|
||||||
HAL_GPIO_EXTI_IRQHandler(BALL_EXT_Pin);
|
HAL_GPIO_EXTI_IRQHandler(BALL_EXT_Pin);
|
||||||
/* USER CODE BEGIN EXTI0_IRQn 1 */
|
/* USER CODE BEGIN EXTI0_IRQn 1 */
|
||||||
@ -410,7 +520,7 @@ void EXTI0_IRQHandler(void)
|
|||||||
void EXTI1_IRQHandler(void)
|
void EXTI1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN EXTI1_IRQn 0 */
|
/* USER CODE BEGIN EXTI1_IRQn 0 */
|
||||||
IR_handler();
|
IR_handler();
|
||||||
/* USER CODE END EXTI1_IRQn 0 */
|
/* USER CODE END EXTI1_IRQn 0 */
|
||||||
HAL_GPIO_EXTI_IRQHandler(IR_EXT_Pin);
|
HAL_GPIO_EXTI_IRQHandler(IR_EXT_Pin);
|
||||||
/* USER CODE BEGIN EXTI1_IRQn 1 */
|
/* USER CODE BEGIN EXTI1_IRQn 1 */
|
||||||
@ -439,70 +549,82 @@ void TIM3_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM3_IRQn 0 */
|
/* USER CODE BEGIN TIM3_IRQn 0 */
|
||||||
|
|
||||||
static uint32_t prev_capture1 = 0;
|
static uint32_t prev_capture1 = 0;
|
||||||
static uint32_t prev_capture2 = 0;
|
static uint32_t prev_capture2 = 0;
|
||||||
|
|
||||||
uint32_t current_capture1 = 0;
|
uint32_t current_capture1 = 0;
|
||||||
uint32_t current_capture2 = 0;
|
uint32_t current_capture2 = 0;
|
||||||
uint32_t elapsed_time1 = 0;
|
uint32_t elapsed_time1 = 0;
|
||||||
uint32_t elapsed_time2 = 0;
|
uint32_t elapsed_time2 = 0;
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM3_IRQn 0 */
|
/* USER CODE BEGIN TIM3_IRQn 0 */
|
||||||
|
|
||||||
// Обработка переполнения таймера
|
// Обработка переполнения таймера
|
||||||
if (TIM3->SR & TIM_SR_UIF)
|
if (TIM3->SR & TIM_SR_UIF)
|
||||||
{
|
{
|
||||||
// Сброс флага переполнения
|
// Сброс флага переполнения
|
||||||
TIM3->SR &= ~TIM_SR_UIF;
|
TIM3->SR &= ~TIM_SR_UIF;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обработка захвата сигнала для канала 1
|
// Обработка захвата сигнала для канала 1
|
||||||
if (TIM3->SR & TIM_SR_CC1IF)
|
if (TIM3->SR & TIM_SR_CC1IF)
|
||||||
{
|
{
|
||||||
current_capture1 = TIM3->CCR1;
|
current_capture1 = TIM3->CCR1;
|
||||||
|
|
||||||
if (current_capture1 >= prev_capture1) {
|
if (current_capture1 >= prev_capture1)
|
||||||
elapsed_time1 = current_capture1 - prev_capture1;
|
{
|
||||||
} else {
|
elapsed_time1 = current_capture1 - prev_capture1;
|
||||||
// Учёт переполнения таймера
|
}
|
||||||
elapsed_time1 = (65000 - prev_capture1) + current_capture1 + 1;
|
else
|
||||||
}
|
{
|
||||||
|
// Учёт переполнения таймера
|
||||||
|
elapsed_time1 = (65000 - prev_capture1) + current_capture1 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Ограничение значения для сохранения в 16-битную переменную
|
// Ограничение значения для сохранения в 16-битную переменную
|
||||||
if (elapsed_time1 > 65535) {
|
if (elapsed_time1 > 65535)
|
||||||
timing1 = 65535; // Максимальное значение
|
{
|
||||||
} else {
|
timing1 = 65535; // Максимальное значение
|
||||||
timing1 = (uint16_t)elapsed_time1;
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
timing1 = (uint16_t)elapsed_time1;
|
||||||
|
}
|
||||||
|
|
||||||
prev_capture1 = current_capture1;
|
prev_capture1 = current_capture1;
|
||||||
TIM3->SR &= ~TIM_SR_CC1IF; // Сброс флага захвата сигнала
|
TIM3->SR &= ~TIM_SR_CC1IF; // Сброс флага захвата сигнала
|
||||||
update1 = 0;
|
update1 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обработка захвата сигнала для канала 2
|
// Обработка захвата сигнала для канала 2
|
||||||
if (TIM3->SR & TIM_SR_CC2IF)
|
if (TIM3->SR & TIM_SR_CC2IF)
|
||||||
{
|
{
|
||||||
current_capture2 = TIM3->CCR2;
|
current_capture2 = TIM3->CCR2;
|
||||||
|
|
||||||
if (current_capture2 >= prev_capture2) {
|
if (current_capture2 >= prev_capture2)
|
||||||
elapsed_time2 = current_capture2 - prev_capture2;
|
{
|
||||||
} else {
|
elapsed_time2 = current_capture2 - prev_capture2;
|
||||||
// Учёт переполнения таймера
|
}
|
||||||
elapsed_time2 = (65000 - prev_capture2) + current_capture2 + 1;
|
else
|
||||||
}
|
{
|
||||||
|
// Учёт переполнения таймера
|
||||||
|
elapsed_time2 = (65000 - prev_capture2) + current_capture2 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Ограничение значения для сохранения в 16-битную переменную
|
// Ограничение значения для сохранения в 16-битную переменную
|
||||||
if (elapsed_time2 > 65535) {
|
if (elapsed_time2 > 65535)
|
||||||
timing2 = 65535; // Максимальное значение
|
{
|
||||||
} else {
|
timing2 = 65535; // Максимальное значение
|
||||||
timing2 = (uint16_t)elapsed_time2;
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
timing2 = (uint16_t)elapsed_time2;
|
||||||
|
}
|
||||||
|
|
||||||
prev_capture2 = current_capture2;
|
prev_capture2 = current_capture2;
|
||||||
TIM3->SR &= ~TIM_SR_CC2IF; // Сброс флага захвата сигнала
|
TIM3->SR &= ~TIM_SR_CC2IF; // Сброс флага захвата сигнала
|
||||||
update2 = 0;
|
update2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE END TIM3_IRQn 0 */
|
/* USER CODE END TIM3_IRQn 0 */
|
||||||
HAL_TIM_IRQHandler(&htim3);
|
HAL_TIM_IRQHandler(&htim3);
|
||||||
@ -539,6 +661,22 @@ void I2C1_ER_IRQHandler(void)
|
|||||||
/* USER CODE END I2C1_ER_IRQn 1 */
|
/* USER CODE END I2C1_ER_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles USART3 global interrupt.
|
||||||
|
*/
|
||||||
|
void USART3_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USART3_IRQn 0 */
|
||||||
|
CDC_Transmit_FS(uart_rx_buffer, UART_BUFFER_SIZE);
|
||||||
|
HAL_UART_Receive_IT(&huart3, uart_rx_buffer, UART_BUFFER_SIZE);
|
||||||
|
|
||||||
|
/* USER CODE END USART3_IRQn 0 */
|
||||||
|
HAL_UART_IRQHandler(&huart3);
|
||||||
|
/* USER CODE BEGIN USART3_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USART3_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
@ -69,6 +69,7 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
|||||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||||
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
|
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
PA0-WKUP.GPIOParameters=GPIO_Label
|
PA0-WKUP.GPIOParameters=GPIO_Label
|
||||||
|
Loading…
x
Reference in New Issue
Block a user