Compare commits
2 Commits
e82a79f1c3
...
a76a286859
Author | SHA1 | Date | |
---|---|---|---|
|
a76a286859 | ||
|
e1c3c733f0 |
13
CAR.ioc
13
CAR.ioc
|
@ -3,7 +3,8 @@ CAD.formats=
|
|||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
Dma.Request0=USART2_RX
|
||||
Dma.RequestsNb=1
|
||||
Dma.Request1=USART2_TX
|
||||
Dma.RequestsNb=2
|
||||
Dma.USART2_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
||||
Dma.USART2_RX.0.Instance=DMA1_Channel6
|
||||
Dma.USART2_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
|
@ -13,6 +14,15 @@ Dma.USART2_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|||
Dma.USART2_RX.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.USART2_RX.0.Priority=DMA_PRIORITY_HIGH
|
||||
Dma.USART2_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
Dma.USART2_TX.1.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.USART2_TX.1.Instance=DMA1_Channel7
|
||||
Dma.USART2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.USART2_TX.1.MemInc=DMA_MINC_ENABLE
|
||||
Dma.USART2_TX.1.Mode=DMA_NORMAL
|
||||
Dma.USART2_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.USART2_TX.1.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.USART2_TX.1.Priority=DMA_PRIORITY_MEDIUM
|
||||
Dma.USART2_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Group By Peripherals
|
||||
KeepUserPlacement=false
|
||||
|
@ -72,6 +82,7 @@ MxCube.Version=6.12.0
|
|||
MxDb.Version=DB.6.0.120
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.DMA1_Channel6_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.DMA1_Channel7_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.EXTI15_10_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.ForceEnableDMAVector=false
|
||||
|
|
|
@ -56,6 +56,7 @@ void DebugMon_Handler(void);
|
|||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void DMA1_Channel6_IRQHandler(void);
|
||||
void DMA1_Channel7_IRQHandler(void);
|
||||
void TIM2_IRQHandler(void);
|
||||
void TIM4_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
|
|
|
@ -46,6 +46,9 @@ void MX_DMA_Init(void)
|
|||
/* DMA1_Channel6_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 3, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
||||
/* DMA1_Channel7_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
extern TIM_HandleTypeDef htim2;
|
||||
extern TIM_HandleTypeDef htim4;
|
||||
extern DMA_HandleTypeDef hdma_usart2_rx;
|
||||
extern DMA_HandleTypeDef hdma_usart2_tx;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
@ -216,6 +217,20 @@ void DMA1_Channel6_IRQHandler(void)
|
|||
/* USER CODE END DMA1_Channel6_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA1 channel7 global interrupt.
|
||||
*/
|
||||
void DMA1_Channel7_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA1_Channel7_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_usart2_tx);
|
||||
/* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA1_Channel7_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM2 global interrupt.
|
||||
*/
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
UART_HandleTypeDef huart1;
|
||||
UART_HandleTypeDef huart2;
|
||||
DMA_HandleTypeDef hdma_usart2_rx;
|
||||
DMA_HandleTypeDef hdma_usart2_tx;
|
||||
|
||||
/* USART1 init function */
|
||||
|
||||
|
@ -161,6 +162,22 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||
|
||||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
|
||||
|
||||
/* USART2_TX Init */
|
||||
hdma_usart2_tx.Instance = DMA1_Channel7;
|
||||
hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||
hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||
hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
hdma_usart2_tx.Init.Mode = DMA_NORMAL;
|
||||
hdma_usart2_tx.Init.Priority = DMA_PRIORITY_MEDIUM;
|
||||
if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
|
||||
|
||||
/* USART2 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART2_IRQn, 3, 0);
|
||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||
|
@ -209,6 +226,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||
|
||||
/* USART2 DMA DeInit */
|
||||
HAL_DMA_DeInit(uartHandle->hdmarx);
|
||||
HAL_DMA_DeInit(uartHandle->hdmatx);
|
||||
|
||||
/* USART2 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
|
|
@ -4,5 +4,6 @@
|
|||
#include "main.h"
|
||||
|
||||
void BLUETOOTH_Init(void);
|
||||
void BLUETOOTH_Send(const char *str, ...);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
extern uint8_t mode;
|
||||
|
||||
void CONTROL_CommonCmd(uint8_t type, uint8_t state);
|
||||
void CONTROL_Servo(uint8_t degree);
|
||||
void CONTROL_RGB(uint8_t r, uint8_t g, uint8_t b);
|
||||
void CONTROL_Mode(uint8_t new_mode, uint8_t state);
|
||||
|
||||
|
|
|
@ -1,33 +1,50 @@
|
|||
#include "bluetooth.h"
|
||||
#include "usart.h"
|
||||
#include "control.h"
|
||||
#include "line_seek.h"
|
||||
#include "infrared.h"
|
||||
#include "hcsr04.h"
|
||||
#include "timer.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "syscalls.h"
|
||||
#include <stdarg.h>
|
||||
#include <math.h>
|
||||
|
||||
#define BUFFER_SIZE 100
|
||||
#define BUFFER_SIZE 255
|
||||
#define MESSAGE_SIZE 19
|
||||
#define CMD_NUM 9
|
||||
|
||||
static int8_t rxBuffer[BUFFER_SIZE], txBuffer[10000];
|
||||
static int8_t rxBuffer[BUFFER_SIZE], txBuffer[BUFFER_SIZE];
|
||||
static uint16_t txLen;
|
||||
static uint8_t cmdIndex;
|
||||
|
||||
void sendSensor(void)
|
||||
{
|
||||
static uint8_t line_seek[5];
|
||||
strcpy(line_seek, LineSeek_GetStatusStr());
|
||||
for (uint8_t i = 0; i < 5; ++i)
|
||||
line_seek[i] ^= 1;
|
||||
BLUETOOTH_Send("$4WD,CSB%u,PV-,GS-,LF%s,HW%hhu%hhu,GM-#",
|
||||
(uint32_t)round((double)sonor_distance / 10),
|
||||
line_seek,
|
||||
!INFRARED_GetL(),
|
||||
!INFRARED_GetR());
|
||||
}
|
||||
|
||||
void BLUETOOTH_Init(void)
|
||||
{
|
||||
HAL_UARTEx_ReceiveToIdle_IT(&huart2, rxBuffer, 100);
|
||||
// HAL_UART_Receive_IT(&huart2, txBuffer + txLen, 1);
|
||||
TIMER_AddLoopEvent(EVENT_BLUETOOTH, sendSensor, 200);
|
||||
}
|
||||
|
||||
// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
// {
|
||||
// if (huart == &huart2)
|
||||
// {
|
||||
// ++txLen;
|
||||
// if (txLen == 10000)
|
||||
// txLen = 0;
|
||||
// }
|
||||
// }
|
||||
void BLUETOOTH_Send(const char *str, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, str);
|
||||
vsprintf(txBuffer, str, args);
|
||||
va_end(args);
|
||||
HAL_UART_Transmit_DMA(&huart2, txBuffer, strlen(txBuffer));
|
||||
}
|
||||
|
||||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
||||
{
|
||||
|
@ -65,6 +82,8 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
|||
break;
|
||||
// 舵机云台
|
||||
case 'P':
|
||||
sscanf(rxBuffer + 5, "%*3s%hu", num);
|
||||
CONTROL_Servo(180 - num[0]);
|
||||
break;
|
||||
// 七彩灯
|
||||
case 'C':
|
||||
|
@ -73,15 +92,6 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
|||
break;
|
||||
}
|
||||
}
|
||||
// my_printf(&huart2, rxBuffer);
|
||||
// strcpy(txBuffer + txLen, rxBuffer);
|
||||
// if (txLen + Size >= 9999)
|
||||
// txLen = 0;
|
||||
// else
|
||||
// txLen += Size;
|
||||
// txBuffer[txLen] = '\0';
|
||||
// if (strcmp(rxBuffer, "$send#") == 0)
|
||||
// my_printf(&huart2, txBuffer);
|
||||
BLUETOOTH_Init();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,10 +11,16 @@ inline void BUZZER_Start()
|
|||
inline void BUZZER_Stop()
|
||||
{
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET);
|
||||
if (state == 1)
|
||||
{
|
||||
state = 0;
|
||||
TIMER_DelLoopEvent(EVENT_BUZZER);
|
||||
}
|
||||
}
|
||||
|
||||
void BUZZER_StartTimed(uint8_t time)
|
||||
{
|
||||
state = 1;
|
||||
BUZZER_Start();
|
||||
TIMER_AddLoopEvent(EVENT_BUZZER, BUZZER_Stop, time * 100);
|
||||
}
|
||||
|
|
|
@ -2,16 +2,18 @@
|
|||
#include "hcsr04.h"
|
||||
#include "led.h"
|
||||
#include "motor.h"
|
||||
#include "buzzer.h"
|
||||
#include "servo.h"
|
||||
|
||||
#define CMD_MOVE 0
|
||||
#define CMD_ROTATE 1
|
||||
#define CMD_BUZZER 2
|
||||
#define CMD_SPEED 3
|
||||
// #define CMD_SHAKE 4
|
||||
#define CMD_SERVO 4
|
||||
// #define CMD_SING 5
|
||||
#define CMD_LED 6
|
||||
// #define CMD_FIRE 7
|
||||
// #define CMD_SERVO 8
|
||||
#define CMD_SERVO_RESET 8
|
||||
|
||||
// 小车默认速度
|
||||
static int8_t speed = 20;
|
||||
|
@ -21,11 +23,10 @@ void carMove(uint8_t state);
|
|||
void carSpin(uint8_t state);
|
||||
void callBuzzer(uint8_t state);
|
||||
void setSpeed(uint8_t state);
|
||||
// void shake(uint8_t state);
|
||||
void setServo(uint8_t state);
|
||||
// void sing(uint8_t state);
|
||||
void setLed(uint8_t state);
|
||||
// void fire(uint8_t state);
|
||||
// void servo(uint8_t state);
|
||||
|
||||
void CONTROL_CommonCmd(uint8_t type, uint8_t state)
|
||||
{
|
||||
|
@ -43,21 +44,28 @@ void CONTROL_CommonCmd(uint8_t type, uint8_t state)
|
|||
case CMD_SPEED:
|
||||
setSpeed(state);
|
||||
break;
|
||||
// case CMD_SHAKE:
|
||||
// break;
|
||||
case CMD_SERVO:
|
||||
setServo(state);
|
||||
break;
|
||||
// case CMD_SING:
|
||||
// break;
|
||||
case CMD_LED:
|
||||
setLed(state);
|
||||
break;
|
||||
// case CMD_FIRE:
|
||||
// break;
|
||||
// case CMD_SERVO:
|
||||
// break;
|
||||
// case CMD_FIRE:
|
||||
// break;
|
||||
case CMD_SERVO_RESET:
|
||||
SERVO_Init();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CONTROL_RGB(uint8_t r, uint8_t g, uint8_t b)
|
||||
inline void CONTROL_Servo(uint8_t degree)
|
||||
{
|
||||
SERVO_Rotate(degree);
|
||||
}
|
||||
|
||||
inline void CONTROL_RGB(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
LED_Start(LED_ALL);
|
||||
LED_SetDuty(r, g, b);
|
||||
|
@ -121,7 +129,7 @@ void carMove(uint8_t state)
|
|||
}
|
||||
}
|
||||
|
||||
void carSpin(uint8_t state)
|
||||
inline void carSpin(uint8_t state)
|
||||
{
|
||||
if (state == 1)
|
||||
MOTOR_SetDuty(speed, -speed);
|
||||
|
@ -129,11 +137,9 @@ void carSpin(uint8_t state)
|
|||
MOTOR_SetDuty(-speed, speed);
|
||||
}
|
||||
|
||||
void callBuzzer(uint8_t state)
|
||||
inline void callBuzzer(uint8_t state)
|
||||
{
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_RESET);
|
||||
HAL_Delay(200);
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET);
|
||||
BUZZER_StartTimed(5);
|
||||
}
|
||||
|
||||
void setSpeed(uint8_t state)
|
||||
|
@ -148,6 +154,14 @@ void setSpeed(uint8_t state)
|
|||
speed = 20;
|
||||
}
|
||||
|
||||
void setServo(uint8_t state)
|
||||
{
|
||||
if (state == 1)
|
||||
SERVO_Rotate(180);
|
||||
else if (state == 2)
|
||||
SERVO_Rotate(0);
|
||||
}
|
||||
|
||||
void setLed(uint8_t state)
|
||||
{
|
||||
LED_Start(LED_ALL);
|
||||
|
|
|
@ -66,6 +66,6 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
|||
// 测距完毕回调,执行完自定义任务后将sonor_state置0
|
||||
__attribute__((weak)) void Sonar_CP_Callback()
|
||||
{
|
||||
my_printf(HUART2, "distance = %d (mm)\n", sonor_distance);
|
||||
my_printf(HUART1, "distance = %d (mm)\n", sonor_distance);
|
||||
sonor_state = 0;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#define EVENT_LED 0
|
||||
#define EVENT_BUZZER 1
|
||||
#define EVENT_HCSR04 2
|
||||
#define EVENT_BLUETOOTH 2
|
||||
#define EVENT_SERVO 3
|
||||
#define EVENT_MAX 4
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ void TIMER_AddLoopEvent(uint8_t type, void (*func)(void), uint16_t loop_time)
|
|||
void TIMER_DelLoopEvent(uint8_t type)
|
||||
{
|
||||
event[type].enabled = 0;
|
||||
time_lcm /= event[type].time;
|
||||
}
|
||||
|
||||
void TIMER_Count(void)
|
||||
|
|
Loading…
Reference in New Issue
Block a user