HUART2 and HUART3 usable now
This commit is contained in:
@ -10,10 +10,11 @@ SET(CMAKE_SYSTEM_NAME Generic)
|
||||
|
||||
set(COMMON_FLAGS "-mcpu=cortex-m3 -mthumb -Wall -fdata-sections -ffunction-sections")
|
||||
set(CMAKE_ASM_FLAGS "${COMMON_FLAGS} -x assembler-with-cpp")
|
||||
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -std=gnu11")
|
||||
set(CMAKE_CXX_FLAGS "${COMMON_FLAGS} -std=c++17")
|
||||
set(CMAKE_C_FLAGS "${COMMON_FLAGS}")
|
||||
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(CMAKE_EXE_LINKER_FLAGS "${COMMON_LINKER_FLAGS}")
|
||||
@ -34,9 +35,11 @@ include_directories(
|
||||
)
|
||||
|
||||
#add_definitions(-DMOTOR_TEST)
|
||||
#add_definitions(-DFEATURE_IGNORE_OTHER_MOTOR)
|
||||
add_definitions(-DFEATURE_BUTTON)
|
||||
#add_definitions(-DPETERS_PLATINE)
|
||||
add_definitions(-DFEATURE_IGNORE_OTHER_MOTOR)
|
||||
#add_definitions(-DFEATURE_BUTTON)
|
||||
add_definitions(-DPETERS_PLATINE)
|
||||
add_definitions(-DHUARN2)
|
||||
#add_definitions(-DHUARN3)
|
||||
|
||||
add_executable(firmware.elf
|
||||
STM32CubeF1/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c
|
||||
@ -83,7 +86,8 @@ add_custom_target(firmware ALL
|
||||
|
||||
add_custom_target(flash
|
||||
COMMAND st-flash --reset write firmware.bin 0x8000000
|
||||
SOURCES firmware.bin)
|
||||
SOURCES firmware.bin
|
||||
DEPENDS firmware.bin)
|
||||
|
||||
add_custom_target(debug
|
||||
COMMAND openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg)
|
||||
|
8
config.h
8
config.h
@ -6,11 +6,11 @@
|
||||
#define PWM_FREQ 16000 // PWM frequency in Hz
|
||||
#endif
|
||||
#define DEAD_TIME 48 // PWM deadtime
|
||||
//#ifdef MOTOR_TEST
|
||||
// #define DELAY_IN_MAIN_LOOP 10
|
||||
//#else
|
||||
#ifdef MOTOR_TEST
|
||||
#define DELAY_IN_MAIN_LOOP 20
|
||||
#else
|
||||
#define DELAY_IN_MAIN_LOOP 5
|
||||
//#endif
|
||||
#endif
|
||||
#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
|
||||
|
||||
|
385
main.cpp
385
main.cpp
@ -39,14 +39,22 @@ TIM_HandleTypeDef htim_right;
|
||||
TIM_HandleTypeDef htim_left;
|
||||
ADC_HandleTypeDef hadc1;
|
||||
ADC_HandleTypeDef hadc2;
|
||||
#ifdef HUARN2
|
||||
UART_HandleTypeDef huart2;
|
||||
//UART_HandleTypeDef huart3;
|
||||
#endif
|
||||
#ifdef HUARN3
|
||||
UART_HandleTypeDef huart3;
|
||||
#endif
|
||||
|
||||
#ifdef HUARN2
|
||||
DMA_HandleTypeDef hdma_usart2_rx;
|
||||
DMA_HandleTypeDef hdma_usart2_tx;
|
||||
#endif
|
||||
|
||||
//DMA_HandleTypeDef hdma_usart3_rx;
|
||||
//DMA_HandleTypeDef hdma_usart3_tx;
|
||||
#ifdef HUARN3
|
||||
DMA_HandleTypeDef hdma_usart3_rx;
|
||||
DMA_HandleTypeDef hdma_usart3_tx;
|
||||
#endif
|
||||
|
||||
volatile struct {
|
||||
uint16_t dcr;
|
||||
@ -110,9 +118,13 @@ void filtLowPass32(int16_t u, uint16_t coef, int32_t *y);
|
||||
|
||||
void SystemClock_Config();
|
||||
|
||||
#ifdef HUARN2
|
||||
void UART2_Init();
|
||||
#endif
|
||||
|
||||
//void UART3_Init();
|
||||
#ifdef HUARN3
|
||||
void UART3_Init();
|
||||
#endif
|
||||
|
||||
void MX_GPIO_Init();
|
||||
|
||||
@ -213,16 +225,23 @@ int main()
|
||||
}
|
||||
buzzer.state.freq = 0;
|
||||
|
||||
#define UART_DMA_CHANNEL DMA1_Channel7
|
||||
#ifdef HUARN2
|
||||
UART2_Init();
|
||||
//#define UART_DMA_CHANNEL DMA1_Channel2
|
||||
//UART3_Init();
|
||||
#endif
|
||||
#ifdef HUARN3
|
||||
UART3_Init();
|
||||
#endif
|
||||
|
||||
#ifdef MOTOR_TEST
|
||||
int pwm = 0;
|
||||
int8_t dir = 1;
|
||||
#else
|
||||
#ifdef HUARN2
|
||||
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
|
||||
|
||||
for (;;) {
|
||||
@ -247,7 +266,7 @@ int main()
|
||||
right.state.pwm = pwm;
|
||||
right.state.iMotMax = 2;
|
||||
|
||||
constexpr auto pwmMax = 500;
|
||||
constexpr auto pwmMax = 250;
|
||||
|
||||
pwm += dir;
|
||||
if (pwm > pwmMax) {
|
||||
@ -351,8 +370,8 @@ void updateMotors()
|
||||
|
||||
//create square wave for buzzer
|
||||
buzzer.timer++;
|
||||
if (buzzer.state.freq != 0 && (buzzer.timer / 5000) % (buzzer.state.pattern + 1) == 0) {
|
||||
if (buzzer.timer % buzzer.state.freq == 0) {
|
||||
if (buzzer.state.freq != 0 && (buzzer.timer / 1000) % (buzzer.state.pattern + 1) == 0) {
|
||||
if (buzzer.timer % (buzzer.state.freq/2) == 0) {
|
||||
HAL_GPIO_TogglePin(BUZZER_PORT, BUZZER_PIN);
|
||||
}
|
||||
} else {
|
||||
@ -533,6 +552,7 @@ void SystemClock_Config()
|
||||
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
|
||||
}
|
||||
|
||||
#ifdef HUARN2
|
||||
void UART2_Init()
|
||||
{
|
||||
/* 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.Mode = UART_MODE_TX_RX;
|
||||
HAL_UART_Init(&huart2);
|
||||
|
||||
USART2->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS;
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
@ -597,97 +618,90 @@ void UART2_Init()
|
||||
hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
|
||||
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->CNDTR = 0;
|
||||
DMA1->IFCR = DMA_IFCR_CTCIF7 | DMA_IFCR_CHTIF7 | DMA_IFCR_CGIF7;
|
||||
DMA1_Channel7->CPAR = uint64_t(&(USART2->DR));
|
||||
DMA1_Channel7->CNDTR = 0;
|
||||
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 */
|
||||
// // #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
|
||||
// Disable serial interrupt - it is not needed
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel3_IRQn); // Rx Channel
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel2_IRQn); // Tx Channel
|
||||
|
||||
// // Disable serial interrupt - it is not needed
|
||||
// HAL_NVIC_DisableIRQ(DMA1_Channel3_IRQn); // Rx Channel
|
||||
// HAL_NVIC_DisableIRQ(DMA1_Channel2_IRQn); // Tx Channel
|
||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_USART3_CLK_ENABLE();
|
||||
|
||||
// __HAL_RCC_DMA1_CLK_ENABLE();
|
||||
// __HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
// __HAL_RCC_USART3_CLK_ENABLE();
|
||||
huart3.Instance = USART3;
|
||||
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;
|
||||
huart3.Init.Mode = UART_MODE_TX_RX;
|
||||
HAL_UART_Init(&huart3);
|
||||
|
||||
// huart3.Instance = USART3;
|
||||
// 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);
|
||||
USART3->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS;
|
||||
|
||||
// #if defined(FEEDBACK_SERIAL_USART3) || defined(DEBUG_SERIAL_USART3)
|
||||
// USART3->CR3 |= USART_CR3_DMAT; // | USART_CR3_DMAR | USART_CR3_OVRDIS;
|
||||
// #endif
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||
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_10;
|
||||
// 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_InitStruct.Pin = GPIO_PIN_11;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
// #ifdef CONTROL_SERIAL_USART3
|
||||
// GPIO_InitStruct.Pin = GPIO_PIN_11;
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
/* Peripheral DMA init*/
|
||||
hdma_usart3_rx.Instance = DMA1_Channel3;
|
||||
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
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_rx.Instance = DMA1_Channel3;
|
||||
// hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
// 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);
|
||||
// #endif
|
||||
hdma_usart3_tx.Instance = DMA1_Channel2;
|
||||
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);
|
||||
|
||||
// hdma_usart3_tx.Instance = DMA1_Channel2;
|
||||
// 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);
|
||||
__HAL_LINKDMA(&huart3, hdmatx, hdma_usart3_tx);
|
||||
|
||||
// #ifdef CONTROL_SERIAL_USART3
|
||||
// __HAL_LINKDMA(&huart3, hdmatx, hdma_usart3_tx);
|
||||
// #endif
|
||||
// #if defined(FEEDBACK_SERIAL_USART3) || defined(DEBUG_SERIAL_USART3)
|
||||
// DMA1_Channel2->CPAR = (uint32_t) & (USART3->DR);
|
||||
// DMA1_Channel2->CNDTR = 0;
|
||||
// DMA1->IFCR = DMA_IFCR_CTCIF2 | DMA_IFCR_CHTIF2 | DMA_IFCR_CGIF2;
|
||||
// #endif
|
||||
//}
|
||||
DMA1_Channel2->CPAR = (uint32_t) & (USART3->DR);
|
||||
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 Ports Clock Enable */
|
||||
@ -804,7 +818,8 @@ void MX_GPIO_Init() {
|
||||
HAL_GPIO_Init(RIGHT_TIM_WL_PORT, &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
void MX_TIM_Init() {
|
||||
void MX_TIM_Init()
|
||||
{
|
||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
||||
__HAL_RCC_TIM8_CLK_ENABLE();
|
||||
|
||||
@ -917,7 +932,8 @@ void MX_TIM_Init() {
|
||||
__HAL_TIM_ENABLE(&htim_right);
|
||||
}
|
||||
|
||||
void MX_ADC1_Init() {
|
||||
void MX_ADC1_Init()
|
||||
{
|
||||
ADC_MultiModeTypeDef multimode;
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
|
||||
@ -984,7 +1000,8 @@ void MX_ADC1_Init() {
|
||||
}
|
||||
|
||||
/* ADC2 init function */
|
||||
void MX_ADC2_Init() {
|
||||
void MX_ADC2_Init()
|
||||
{
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
|
||||
__HAL_RCC_ADC2_CLK_ENABLE();
|
||||
@ -1031,7 +1048,8 @@ void MX_ADC2_Init() {
|
||||
__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
|
||||
buzzer.state.pattern = 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
|
||||
if (main_loop_counter % 25 == 0)
|
||||
{
|
||||
#ifdef HUARN2
|
||||
HAL_UART_DMAStop(&huart2);
|
||||
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()
|
||||
{
|
||||
if (main_loop_counter % 50 == 0) { // Send data periodically
|
||||
if(UART_DMA_CHANNEL->CNDTR == 0) {
|
||||
if (main_loop_counter % 50 == 0) // Send data periodically
|
||||
{
|
||||
#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.left.angle = left.rtY.a_elecAngle;
|
||||
@ -1134,8 +1167,10 @@ void sendFeedback()
|
||||
feedback.checksum = calculateChecksum(feedback);
|
||||
|
||||
UART_DMA_CHANNEL->CCR &= ~DMA_CCR_EN;
|
||||
UART_DMA_CHANNEL->CNDTR = sizeof(feedback);
|
||||
UART_DMA_CHANNEL->CMAR = uint64_t(&feedback);
|
||||
//UART_DMA_CHANNEL->CNDTR = sizeof(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;
|
||||
}
|
||||
}
|
||||
@ -1150,38 +1185,39 @@ void sendFeedback()
|
||||
/**
|
||||
* @brief This function handles Non maskable interrupt.
|
||||
*/
|
||||
extern "C" void NMI_Handler() {
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
extern "C" void NMI_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* 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.
|
||||
*/
|
||||
extern "C" void HardFault_Handler() {
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
extern "C" void HardFault_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
while(1) {
|
||||
}
|
||||
/* USER CODE BEGIN HardFault_IRQn 1 */
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
while (true);
|
||||
/* 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.
|
||||
*/
|
||||
extern "C" void MemManage_Handler() {
|
||||
extern "C" void MemManage_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */
|
||||
while(1) {
|
||||
}
|
||||
while (true);
|
||||
/* USER CODE BEGIN 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.
|
||||
*/
|
||||
extern "C" void BusFault_Handler() {
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
extern "C" void BusFault_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
while(1) {
|
||||
}
|
||||
/* USER CODE BEGIN BusFault_IRQn 1 */
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
while (true);
|
||||
/* 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.
|
||||
*/
|
||||
extern "C" void UsageFault_Handler() {
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
extern "C" void UsageFault_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
while(1) {
|
||||
}
|
||||
/* USER CODE BEGIN UsageFault_IRQn 1 */
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
while (true);
|
||||
/* 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.
|
||||
*/
|
||||
extern "C" void SVC_Handler() {
|
||||
/* USER CODE BEGIN SVCall_IRQn 0 */
|
||||
extern "C" void SVC_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN SVCall_IRQn 0 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 0 */
|
||||
/* USER CODE BEGIN SVCall_IRQn 1 */
|
||||
/* USER CODE END SVCall_IRQn 0 */
|
||||
/* USER CODE BEGIN SVCall_IRQn 1 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 1 */
|
||||
/* USER CODE END SVCall_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor.
|
||||
*/
|
||||
extern "C" void DebugMon_Handler() {
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
extern "C" void DebugMon_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* 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.
|
||||
*/
|
||||
extern "C" void PendSV_Handler() {
|
||||
extern "C" void PendSV_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN PendSV_IRQn 0 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 0 */
|
||||
@ -1251,24 +1290,16 @@ extern "C" void PendSV_Handler() {
|
||||
/* USER CODE END PendSV_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System tick timer.
|
||||
*/
|
||||
#ifdef CONTROL_PPM
|
||||
extern "C" void PPM_SysTick_Callback();
|
||||
#endif
|
||||
extern "C" void SysTick_Handler()
|
||||
{
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
extern "C" void SysTick_Handler() {
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
HAL_IncTick();
|
||||
HAL_SYSTICK_IRQHandler();
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
HAL_IncTick();
|
||||
HAL_SYSTICK_IRQHandler();
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
#ifdef CONTROL_PPM
|
||||
PPM_SysTick_Callback();
|
||||
#endif
|
||||
/* USER CODE END SysTick_IRQn 1 */
|
||||
/* USER CODE END SysTick_IRQn 1 */
|
||||
}
|
||||
|
||||
// =================================
|
||||
@ -1279,15 +1310,16 @@ extern "C" void DMA1_Channel1_IRQHandler()
|
||||
updateMotors();
|
||||
}
|
||||
|
||||
#ifdef HUARN2
|
||||
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 */
|
||||
HAL_DMA_IRQHandler(&hdma_usart2_rx);
|
||||
/* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
|
||||
/* USER CODE END DMA1_Channel4_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_usart2_rx);
|
||||
/* 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()
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
|
||||
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA1_Channel5_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_usart2_tx);
|
||||
/* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
|
||||
/* USER CODE END DMA1_Channel5_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_usart2_tx);
|
||||
/* 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
|
||||
|
Reference in New Issue
Block a user