HUART2 and HUART3 usable now

This commit is contained in:
2021-05-14 20:46:53 +02:00
parent f232660cc0
commit 6ec3740aaf
3 changed files with 239 additions and 172 deletions

View File

@ -10,10 +10,11 @@ SET(CMAKE_SYSTEM_NAME Generic)
set(COMMON_FLAGS "-mcpu=cortex-m3 -mthumb -Wall -fdata-sections -ffunction-sections") set(COMMON_FLAGS "-mcpu=cortex-m3 -mthumb -Wall -fdata-sections -ffunction-sections")
set(CMAKE_ASM_FLAGS "${COMMON_FLAGS} -x assembler-with-cpp") set(CMAKE_ASM_FLAGS "${COMMON_FLAGS} -x assembler-with-cpp")
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -std=gnu11") set(CMAKE_C_FLAGS "${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS "${COMMON_FLAGS} -std=c++17") set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}")
set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 20)
set(COMMON_LINKER_FLAGS "-specs=nosys.specs -T${CMAKE_SOURCE_DIR}/STM32F103RCTx_FLASH.ld -lc -lm -lnosys -lstdc++ -Wl,--gc-sections -Wl,-Map=${CMAKE_BINARY_DIR}/hover.map,--cref") set(COMMON_LINKER_FLAGS "-specs=nosys.specs -T${CMAKE_SOURCE_DIR}/STM32F103RCTx_FLASH.ld -lc -lm -lnosys -lstdc++ -Wl,--gc-sections -Wl,-Map=${CMAKE_BINARY_DIR}/hover.map,--cref")
set(CMAKE_EXE_LINKER_FLAGS "${COMMON_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${COMMON_LINKER_FLAGS}")
@ -34,9 +35,11 @@ include_directories(
) )
#add_definitions(-DMOTOR_TEST) #add_definitions(-DMOTOR_TEST)
#add_definitions(-DFEATURE_IGNORE_OTHER_MOTOR) add_definitions(-DFEATURE_IGNORE_OTHER_MOTOR)
add_definitions(-DFEATURE_BUTTON) #add_definitions(-DFEATURE_BUTTON)
#add_definitions(-DPETERS_PLATINE) add_definitions(-DPETERS_PLATINE)
add_definitions(-DHUARN2)
#add_definitions(-DHUARN3)
add_executable(firmware.elf add_executable(firmware.elf
STM32CubeF1/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c STM32CubeF1/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c
@ -83,7 +86,8 @@ add_custom_target(firmware ALL
add_custom_target(flash add_custom_target(flash
COMMAND st-flash --reset write firmware.bin 0x8000000 COMMAND st-flash --reset write firmware.bin 0x8000000
SOURCES firmware.bin) SOURCES firmware.bin
DEPENDS firmware.bin)
add_custom_target(debug add_custom_target(debug
COMMAND openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg) COMMAND openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg)

View File

@ -6,11 +6,11 @@
#define PWM_FREQ 16000 // PWM frequency in Hz #define PWM_FREQ 16000 // PWM frequency in Hz
#endif #endif
#define DEAD_TIME 48 // PWM deadtime #define DEAD_TIME 48 // PWM deadtime
//#ifdef MOTOR_TEST #ifdef MOTOR_TEST
// #define DELAY_IN_MAIN_LOOP 10 #define DELAY_IN_MAIN_LOOP 20
//#else #else
#define DELAY_IN_MAIN_LOOP 5 #define DELAY_IN_MAIN_LOOP 5
//#endif #endif
#define TIMEOUT 5 // number of wrong / missing input commands before emergency off #define TIMEOUT 5 // number of wrong / missing input commands before emergency off
#define A2BIT_CONV 50 // A to bit for current conversion on ADC. Example: 1 A = 50, 2 A = 100, etc #define A2BIT_CONV 50 // A to bit for current conversion on ADC. Example: 1 A = 50, 2 A = 100, etc

385
main.cpp
View File

@ -39,14 +39,22 @@ TIM_HandleTypeDef htim_right;
TIM_HandleTypeDef htim_left; TIM_HandleTypeDef htim_left;
ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc2; ADC_HandleTypeDef hadc2;
#ifdef HUARN2
UART_HandleTypeDef huart2; UART_HandleTypeDef huart2;
//UART_HandleTypeDef huart3; #endif
#ifdef HUARN3
UART_HandleTypeDef huart3;
#endif
#ifdef HUARN2
DMA_HandleTypeDef hdma_usart2_rx; DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart2_tx; DMA_HandleTypeDef hdma_usart2_tx;
#endif
//DMA_HandleTypeDef hdma_usart3_rx; #ifdef HUARN3
//DMA_HandleTypeDef hdma_usart3_tx; DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;
#endif
volatile struct { volatile struct {
uint16_t dcr; uint16_t dcr;
@ -110,9 +118,13 @@ void filtLowPass32(int16_t u, uint16_t coef, int32_t *y);
void SystemClock_Config(); void SystemClock_Config();
#ifdef HUARN2
void UART2_Init(); void UART2_Init();
#endif
//void UART3_Init(); #ifdef HUARN3
void UART3_Init();
#endif
void MX_GPIO_Init(); void MX_GPIO_Init();
@ -213,16 +225,23 @@ int main()
} }
buzzer.state.freq = 0; buzzer.state.freq = 0;
#define UART_DMA_CHANNEL DMA1_Channel7 #ifdef HUARN2
UART2_Init(); UART2_Init();
//#define UART_DMA_CHANNEL DMA1_Channel2 #endif
//UART3_Init(); #ifdef HUARN3
UART3_Init();
#endif
#ifdef MOTOR_TEST #ifdef MOTOR_TEST
int pwm = 0; int pwm = 0;
int8_t dir = 1; int8_t dir = 1;
#else #else
#ifdef HUARN2
HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command)); HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command));
#endif
#ifdef HUARN3
HAL_UART_Receive_DMA(&huart3, (uint8_t *)&command, sizeof(command));
#endif
#endif #endif
for (;;) { for (;;) {
@ -247,7 +266,7 @@ int main()
right.state.pwm = pwm; right.state.pwm = pwm;
right.state.iMotMax = 2; right.state.iMotMax = 2;
constexpr auto pwmMax = 500; constexpr auto pwmMax = 250;
pwm += dir; pwm += dir;
if (pwm > pwmMax) { if (pwm > pwmMax) {
@ -351,8 +370,8 @@ void updateMotors()
//create square wave for buzzer //create square wave for buzzer
buzzer.timer++; buzzer.timer++;
if (buzzer.state.freq != 0 && (buzzer.timer / 5000) % (buzzer.state.pattern + 1) == 0) { if (buzzer.state.freq != 0 && (buzzer.timer / 1000) % (buzzer.state.pattern + 1) == 0) {
if (buzzer.timer % buzzer.state.freq == 0) { if (buzzer.timer % (buzzer.state.freq/2) == 0) {
HAL_GPIO_TogglePin(BUZZER_PORT, BUZZER_PIN); HAL_GPIO_TogglePin(BUZZER_PORT, BUZZER_PIN);
} }
} else { } else {
@ -533,6 +552,7 @@ void SystemClock_Config()
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
} }
#ifdef HUARN2
void UART2_Init() void UART2_Init()
{ {
/* The code below is commented out - otwerwise Serial Receive does not work */ /* The code below is commented out - otwerwise Serial Receive does not work */
@ -562,6 +582,7 @@ void UART2_Init()
huart2.Init.OverSampling = UART_OVERSAMPLING_16; huart2.Init.OverSampling = UART_OVERSAMPLING_16;
huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart2); HAL_UART_Init(&huart2);
USART2->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS; USART2->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS;
GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitTypeDef GPIO_InitStruct;
@ -597,97 +618,90 @@ void UART2_Init()
hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(&hdma_usart2_tx); HAL_DMA_Init(&hdma_usart2_tx);
__HAL_LINKDMA(&huart2, hdmatx, hdma_usart2_tx); __HAL_LINKDMA(&huart2, hdmatx, hdma_usart2_tx);
DMA1_Channel7->CPAR = uint64_t(&(USART2->DR)); DMA1_Channel7->CPAR = uint64_t(&(USART2->DR));
DMA1_Channel7->CNDTR = 0; DMA1_Channel7->CNDTR = 0;
DMA1->IFCR = DMA_IFCR_CTCIF7 | DMA_IFCR_CHTIF7 | DMA_IFCR_CGIF7; DMA1->IFCR = DMA_IFCR_CTCIF7 | DMA_IFCR_CHTIF7 | DMA_IFCR_CGIF7;
} }
#endif
//void UART3_Init() { #ifdef HUARN3
void UART3_Init()
{
/* The code below is commented out - otwerwise Serial Receive does not work */
// #ifdef CONTROL_SERIAL_USART3
// /* DMA1_Channel3_IRQn interrupt configuration */
// HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 3);
// HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
// /* DMA1_Channel2_IRQn interrupt configuration */
// HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 5, 2);
// HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
// #endif
// /* The code below is commented out - otwerwise Serial Receive does not work */ // Disable serial interrupt - it is not needed
// // #ifdef CONTROL_SERIAL_USART3 HAL_NVIC_DisableIRQ(DMA1_Channel3_IRQn); // Rx Channel
// // /* DMA1_Channel3_IRQn interrupt configuration */ HAL_NVIC_DisableIRQ(DMA1_Channel2_IRQn); // Tx Channel
// // HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 3);
// // HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
// // /* DMA1_Channel2_IRQn interrupt configuration */
// // HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 5, 2);
// // HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
// // #endif
// // Disable serial interrupt - it is not needed __HAL_RCC_DMA1_CLK_ENABLE();
// HAL_NVIC_DisableIRQ(DMA1_Channel3_IRQn); // Rx Channel __HAL_RCC_GPIOB_CLK_ENABLE();
// HAL_NVIC_DisableIRQ(DMA1_Channel2_IRQn); // Tx Channel __HAL_RCC_USART3_CLK_ENABLE();
// __HAL_RCC_DMA1_CLK_ENABLE(); huart3.Instance = USART3;
// __HAL_RCC_GPIOB_CLK_ENABLE(); huart3.Init.BaudRate = USART3_BAUD;
// __HAL_RCC_USART3_CLK_ENABLE(); huart3.Init.WordLength = USART3_WORDLENGTH;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart3);
// huart3.Instance = USART3; USART3->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS;
// huart3.Init.BaudRate = USART3_BAUD;
// huart3.Init.WordLength = USART3_WORDLENGTH;
// huart3.Init.StopBits = UART_STOPBITS_1;
// huart3.Init.Parity = UART_PARITY_NONE;
// huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
// huart3.Init.OverSampling = UART_OVERSAMPLING_16;
// #if defined(CONTROL_SERIAL_USART3)
// huart3.Init.Mode = UART_MODE_TX_RX;
// #elif defined(DEBUG_SERIAL_USART3)
// huart3.Init.Mode = UART_MODE_TX;
// #endif
// HAL_UART_Init(&huart3);
// #if defined(FEEDBACK_SERIAL_USART3) || defined(DEBUG_SERIAL_USART3) GPIO_InitTypeDef GPIO_InitStruct;
// USART3->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS; GPIO_InitStruct.Pin = GPIO_PIN_10;
// #endif GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_11;
// GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
// GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// #ifdef CONTROL_SERIAL_USART3 /* Peripheral DMA init*/
// GPIO_InitStruct.Pin = GPIO_PIN_11; hdma_usart3_rx.Instance = DMA1_Channel3;
// GPIO_InitStruct.Mode = GPIO_MODE_INPUT; hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_rx.Init.Mode = DMA_CIRCULAR; //DMA_NORMAL;
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(&hdma_usart3_rx);
__HAL_LINKDMA(&huart3, hdmarx, hdma_usart3_rx);
// /* Peripheral DMA init*/ hdma_usart3_tx.Instance = DMA1_Channel2;
// hdma_usart3_rx.Instance = DMA1_Channel3; hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
// hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
// hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
// hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
// hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
// hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart3_tx.Init.Mode = DMA_NORMAL;
// hdma_usart3_rx.Init.Mode = DMA_CIRCULAR; //DMA_NORMAL; hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
// hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_usart3_tx);
// HAL_DMA_Init(&hdma_usart3_rx);
// __HAL_LINKDMA(&huart3, hdmarx, hdma_usart3_rx);
// #endif
// hdma_usart3_tx.Instance = DMA1_Channel2; __HAL_LINKDMA(&huart3, hdmatx, hdma_usart3_tx);
// hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
// hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
// hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
// hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
// hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
// hdma_usart3_tx.Init.Mode = DMA_NORMAL;
// hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
// HAL_DMA_Init(&hdma_usart3_tx);
// #ifdef CONTROL_SERIAL_USART3 DMA1_Channel2->CPAR = (uint32_t) & (USART3->DR);
// __HAL_LINKDMA(&huart3, hdmatx, hdma_usart3_tx); DMA1_Channel2->CNDTR = 0;
// #endif DMA1->IFCR = DMA_IFCR_CTCIF2 | DMA_IFCR_CHTIF2 | DMA_IFCR_CGIF2;
// #if defined(FEEDBACK_SERIAL_USART3) || defined(DEBUG_SERIAL_USART3) }
// DMA1_Channel2->CPAR = (uint32_t) & (USART3->DR); #endif
// DMA1_Channel2->CNDTR = 0;
// DMA1->IFCR = DMA_IFCR_CTCIF2 | DMA_IFCR_CHTIF2 | DMA_IFCR_CGIF2;
// #endif
//}
void MX_GPIO_Init() { void MX_GPIO_Init()
{
GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */ /* GPIO Ports Clock Enable */
@ -804,7 +818,8 @@ void MX_GPIO_Init() {
HAL_GPIO_Init(RIGHT_TIM_WL_PORT, &GPIO_InitStruct); HAL_GPIO_Init(RIGHT_TIM_WL_PORT, &GPIO_InitStruct);
} }
void MX_TIM_Init() { void MX_TIM_Init()
{
__HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM1_CLK_ENABLE();
__HAL_RCC_TIM8_CLK_ENABLE(); __HAL_RCC_TIM8_CLK_ENABLE();
@ -917,7 +932,8 @@ void MX_TIM_Init() {
__HAL_TIM_ENABLE(&htim_right); __HAL_TIM_ENABLE(&htim_right);
} }
void MX_ADC1_Init() { void MX_ADC1_Init()
{
ADC_MultiModeTypeDef multimode; ADC_MultiModeTypeDef multimode;
ADC_ChannelConfTypeDef sConfig; ADC_ChannelConfTypeDef sConfig;
@ -984,7 +1000,8 @@ void MX_ADC1_Init() {
} }
/* ADC2 init function */ /* ADC2 init function */
void MX_ADC2_Init() { void MX_ADC2_Init()
{
ADC_ChannelConfTypeDef sConfig; ADC_ChannelConfTypeDef sConfig;
__HAL_RCC_ADC2_CLK_ENABLE(); __HAL_RCC_ADC2_CLK_ENABLE();
@ -1031,7 +1048,8 @@ void MX_ADC2_Init() {
__HAL_ADC_ENABLE(&hadc2); __HAL_ADC_ENABLE(&hadc2);
} }
void poweroff() { void poweroff()
{
// if (abs(speed) < 20) { // wait for the speed to drop, then shut down -> this is commented out for SAFETY reasons // if (abs(speed) < 20) { // wait for the speed to drop, then shut down -> this is commented out for SAFETY reasons
buzzer.state.pattern = 0; buzzer.state.pattern = 0;
left.state.enable = right.state.enable = 0; left.state.enable = right.state.enable = 0;
@ -1090,8 +1108,14 @@ void parseCommand()
// Check periodically the received Start Frame. Try to re-sync by reseting the DMA // Check periodically the received Start Frame. Try to re-sync by reseting the DMA
if (main_loop_counter % 25 == 0) if (main_loop_counter % 25 == 0)
{ {
#ifdef HUARN2
HAL_UART_DMAStop(&huart2); HAL_UART_DMAStop(&huart2);
HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command)); HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command));
#endif
#ifdef HUARN3
HAL_UART_DMAStop(&huart3);
HAL_UART_Receive_DMA(&huart3, (uint8_t *)&command, sizeof(command));
#endif
} }
} }
} }
@ -1099,8 +1123,17 @@ void parseCommand()
void sendFeedback() void sendFeedback()
{ {
if (main_loop_counter % 50 == 0) { // Send data periodically if (main_loop_counter % 50 == 0) // Send data periodically
if(UART_DMA_CHANNEL->CNDTR == 0) { {
#ifdef HUARN2
#define UART_DMA_CHANNEL DMA1_Channel7
#endif
#ifdef HUARN3
#define UART_DMA_CHANNEL DMA1_Channel2
#endif
if (UART_DMA_CHANNEL->CNDTR == 0)
{
feedback.start = Feedback::VALID_HEADER; feedback.start = Feedback::VALID_HEADER;
feedback.left.angle = left.rtY.a_elecAngle; feedback.left.angle = left.rtY.a_elecAngle;
@ -1134,8 +1167,10 @@ void sendFeedback()
feedback.checksum = calculateChecksum(feedback); feedback.checksum = calculateChecksum(feedback);
UART_DMA_CHANNEL->CCR &= ~DMA_CCR_EN; UART_DMA_CHANNEL->CCR &= ~DMA_CCR_EN;
UART_DMA_CHANNEL->CNDTR = sizeof(feedback); //UART_DMA_CHANNEL->CNDTR = sizeof(feedback);
UART_DMA_CHANNEL->CMAR = uint64_t(&feedback); //UART_DMA_CHANNEL->CMAR = uint64_t(&feedback);
UART_DMA_CHANNEL->CNDTR = 21;
UART_DMA_CHANNEL->CMAR = uint64_t((const char *)"Sending feedback...\r\n");
UART_DMA_CHANNEL->CCR |= DMA_CCR_EN; UART_DMA_CHANNEL->CCR |= DMA_CCR_EN;
} }
} }
@ -1150,38 +1185,39 @@ void sendFeedback()
/** /**
* @brief This function handles Non maskable interrupt. * @brief This function handles Non maskable interrupt.
*/ */
extern "C" void NMI_Handler() { extern "C" void NMI_Handler()
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */ {
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
/* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE END NonMaskableInt_IRQn 0 */
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
/* USER CODE END NonMaskableInt_IRQn 1 */ /* USER CODE END NonMaskableInt_IRQn 1 */
} }
/** /**
* @brief This function handles Hard fault interrupt. * @brief This function handles Hard fault interrupt.
*/ */
extern "C" void HardFault_Handler() { extern "C" void HardFault_Handler()
/* USER CODE BEGIN HardFault_IRQn 0 */ {
/* USER CODE BEGIN HardFault_IRQn 0 */
/* USER CODE END HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */
while(1) { while (true);
} /* USER CODE BEGIN HardFault_IRQn 1 */
/* USER CODE BEGIN HardFault_IRQn 1 */
/* USER CODE END HardFault_IRQn 1 */ /* USER CODE END HardFault_IRQn 1 */
} }
/** /**
* @brief This function handles Memory management fault. * @brief This function handles Memory management fault.
*/ */
extern "C" void MemManage_Handler() { extern "C" void MemManage_Handler()
{
/* USER CODE BEGIN MemoryManagement_IRQn 0 */ /* USER CODE BEGIN MemoryManagement_IRQn 0 */
/* USER CODE END MemoryManagement_IRQn 0 */ /* USER CODE END MemoryManagement_IRQn 0 */
while(1) { while (true);
}
/* USER CODE BEGIN MemoryManagement_IRQn 1 */ /* USER CODE BEGIN MemoryManagement_IRQn 1 */
/* USER CODE END MemoryManagement_IRQn 1 */ /* USER CODE END MemoryManagement_IRQn 1 */
@ -1190,59 +1226,62 @@ extern "C" void MemManage_Handler() {
/** /**
* @brief This function handles Prefetch fault, memory access fault. * @brief This function handles Prefetch fault, memory access fault.
*/ */
extern "C" void BusFault_Handler() { extern "C" void BusFault_Handler()
/* USER CODE BEGIN BusFault_IRQn 0 */ {
/* USER CODE BEGIN BusFault_IRQn 0 */
/* USER CODE END BusFault_IRQn 0 */ /* USER CODE END BusFault_IRQn 0 */
while(1) { while (true);
} /* USER CODE BEGIN BusFault_IRQn 1 */
/* USER CODE BEGIN BusFault_IRQn 1 */
/* USER CODE END BusFault_IRQn 1 */ /* USER CODE END BusFault_IRQn 1 */
} }
/** /**
* @brief This function handles Undefined instruction or illegal state. * @brief This function handles Undefined instruction or illegal state.
*/ */
extern "C" void UsageFault_Handler() { extern "C" void UsageFault_Handler()
/* USER CODE BEGIN UsageFault_IRQn 0 */ {
/* USER CODE BEGIN UsageFault_IRQn 0 */
/* USER CODE END UsageFault_IRQn 0 */ /* USER CODE END UsageFault_IRQn 0 */
while(1) { while (true);
} /* USER CODE BEGIN UsageFault_IRQn 1 */
/* USER CODE BEGIN UsageFault_IRQn 1 */
/* USER CODE END UsageFault_IRQn 1 */ /* USER CODE END UsageFault_IRQn 1 */
} }
/** /**
* @brief This function handles System service call via SWI instruction. * @brief This function handles System service call via SWI instruction.
*/ */
extern "C" void SVC_Handler() { extern "C" void SVC_Handler()
/* USER CODE BEGIN SVCall_IRQn 0 */ {
/* USER CODE BEGIN SVCall_IRQn 0 */
/* USER CODE END SVCall_IRQn 0 */ /* USER CODE END SVCall_IRQn 0 */
/* USER CODE BEGIN SVCall_IRQn 1 */ /* USER CODE BEGIN SVCall_IRQn 1 */
/* USER CODE END SVCall_IRQn 1 */ /* USER CODE END SVCall_IRQn 1 */
} }
/** /**
* @brief This function handles Debug monitor. * @brief This function handles Debug monitor.
*/ */
extern "C" void DebugMon_Handler() { extern "C" void DebugMon_Handler()
/* USER CODE BEGIN DebugMonitor_IRQn 0 */ {
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
/* USER CODE END DebugMonitor_IRQn 0 */ /* USER CODE END DebugMonitor_IRQn 0 */
/* USER CODE BEGIN DebugMonitor_IRQn 1 */ /* USER CODE BEGIN DebugMonitor_IRQn 1 */
/* USER CODE END DebugMonitor_IRQn 1 */ /* USER CODE END DebugMonitor_IRQn 1 */
} }
/** /**
* @brief This function handles Pendable request for system service. * @brief This function handles Pendable request for system service.
*/ */
extern "C" void PendSV_Handler() { extern "C" void PendSV_Handler()
{
/* USER CODE BEGIN PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV_IRQn 0 */
/* USER CODE END PendSV_IRQn 0 */ /* USER CODE END PendSV_IRQn 0 */
@ -1251,24 +1290,16 @@ extern "C" void PendSV_Handler() {
/* USER CODE END PendSV_IRQn 1 */ /* USER CODE END PendSV_IRQn 1 */
} }
/** extern "C" void SysTick_Handler()
* @brief This function handles System tick timer. {
*/ /* USER CODE BEGIN SysTick_IRQn 0 */
#ifdef CONTROL_PPM
extern "C" void PPM_SysTick_Callback();
#endif
extern "C" void SysTick_Handler() { /* USER CODE END SysTick_IRQn 0 */
/* USER CODE BEGIN SysTick_IRQn 0 */ HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 1 */
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */
#ifdef CONTROL_PPM
PPM_SysTick_Callback();
#endif
/* USER CODE END SysTick_IRQn 1 */
} }
// ================================= // =================================
@ -1279,15 +1310,16 @@ extern "C" void DMA1_Channel1_IRQHandler()
updateMotors(); updateMotors();
} }
#ifdef HUARN2
extern "C" void DMA1_Channel6_IRQHandler() extern "C" void DMA1_Channel6_IRQHandler()
{ {
/* USER CODE BEGIN DMA1_Channel4_IRQn 0 */ /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
/* USER CODE END DMA1_Channel4_IRQn 0 */ /* USER CODE END DMA1_Channel4_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart2_rx); HAL_DMA_IRQHandler(&hdma_usart2_rx);
/* USER CODE BEGIN DMA1_Channel4_IRQn 1 */ /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
/* USER CODE END DMA1_Channel4_IRQn 1 */ /* USER CODE END DMA1_Channel4_IRQn 1 */
} }
/** /**
@ -1295,11 +1327,42 @@ extern "C" void DMA1_Channel6_IRQHandler()
*/ */
extern "C" void DMA1_Channel7_IRQHandler() extern "C" void DMA1_Channel7_IRQHandler()
{ {
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */ /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
/* USER CODE END DMA1_Channel5_IRQn 0 */ /* USER CODE END DMA1_Channel5_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart2_tx); HAL_DMA_IRQHandler(&hdma_usart2_tx);
/* USER CODE BEGIN DMA1_Channel5_IRQn 1 */ /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
/* USER CODE END DMA1_Channel5_IRQn 1 */ /* USER CODE END DMA1_Channel5_IRQn 1 */
} }
#endif
#ifdef HUARN3
/**
* @brief This function handles DMA1 channel2 global interrupt.
*/
extern "C" void DMA1_Channel2_IRQHandler()
{
/* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
/* USER CODE END DMA1_Channel2_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart3_tx);
/* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
/* USER CODE END DMA1_Channel2_IRQn 1 */
}
/**
* @brief This function handles DMA1 channel3 global interrupt.
*/
extern "C" void DMA1_Channel3_IRQHandler()
{
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
/* USER CODE END DMA1_Channel3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart3_rx);
/* USER CODE BEGIN DMA1_Channel3_IRQn 1 */
/* USER CODE END DMA1_Channel3_IRQn 1 */
}
#endif