Compare commits
11 Commits
d3746f5a80
...
e518c278d7
Author | SHA1 | Date | |
---|---|---|---|
e518c278d7 | |||
|
a76a286859 | ||
|
e1c3c733f0 | ||
|
e82a79f1c3 | ||
|
cf240a9d5c | ||
|
000d9e9e4e | ||
|
89b22e459b | ||
|
76690e0a58 | ||
3a7c8d8e4b | |||
f97607d366 | |||
|
4ea2f46a10 |
32
.mxproject
32
.mxproject
File diff suppressed because one or more lines are too long
8
App/Inc/app_bus.h
Normal file
8
App/Inc/app_bus.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#ifndef __APP_BUS_H
|
||||
#define __APP_BUS_H
|
||||
|
||||
void BlockDetect_Init();
|
||||
void App_Bus(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -3,8 +3,13 @@
|
|||
|
||||
#include "tim.h"
|
||||
|
||||
extern int beep_time;
|
||||
|
||||
void LineSeek_Init(void);
|
||||
void LineSeek_Start(void);
|
||||
void LineSeek_Stop(void);
|
||||
void App_LineSeek(void);
|
||||
void Hanlde_Crossroad(void);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
98
App/Src/app_bus.c
Normal file
98
App/Src/app_bus.c
Normal file
|
@ -0,0 +1,98 @@
|
|||
#include "app_bus.h"
|
||||
|
||||
#include "app_line_seek.h"
|
||||
#include "block_detect.h"
|
||||
#include "buzzer.h"
|
||||
#include "led.h"
|
||||
#include "line_seek.h"
|
||||
#include "motor.h"
|
||||
#include "path_plan.h"
|
||||
#include "syn6288.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RUNNING, // 按路线运营
|
||||
READY_TO_PARK, // 准备进站停车(或者准备左转)
|
||||
PARKING, // 进站停车
|
||||
WAIT_PASSENGER, // 等候乘客
|
||||
STOP // 停车
|
||||
} BusState;
|
||||
|
||||
static BusState state;
|
||||
|
||||
static int current_station;
|
||||
char* stations[] = {"太平园站", "西南交大站", "新业北街站", "终点站"};
|
||||
|
||||
void App_Bus(void)
|
||||
{
|
||||
// printf("bus_state:%d\n", state);
|
||||
|
||||
LineSeek_GetStatusStr();
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case RUNNING: // 按路线运营
|
||||
{
|
||||
LineSeek_Start();
|
||||
if (Has_Block(FRONT)) // 前方有障碍物,停车
|
||||
{
|
||||
state = STOP;
|
||||
}
|
||||
else if (Has_Block(RIGHT_FRONT)) // 右前方有障碍物,准备停车或者左转避障
|
||||
{
|
||||
state = READY_TO_PARK;
|
||||
// state = WAIT_PASSENGER;
|
||||
}
|
||||
else if (Has_Block(LEFT_FRONT)) // 左前方有障碍物,右转避障
|
||||
{
|
||||
Direction nextDirs[] = {RIGHT, RIGHT};
|
||||
ReplacePathStep(nextDirs, 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case READY_TO_PARK: // 准备进站停车,或者准备左转避障
|
||||
{
|
||||
if (LineSeek_Equals("0xxx")) // 左方有路线,左转
|
||||
{
|
||||
Direction nextDirs[] = {LEFT, LEFT};
|
||||
ReplacePathStep(nextDirs, 2);
|
||||
state = RUNNING;
|
||||
}
|
||||
else if (LineSeek_Equals("xxx0")) // 右方有路线,右转进站
|
||||
{
|
||||
Direction nextDirs[] = {RIGHT, RIGHT};
|
||||
ReplacePathStep(nextDirs, 2);
|
||||
state = PARKING;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PARKING: // 进站停车
|
||||
{
|
||||
if (Has_Block(RIGHT_FRONT)) // 右前方有障碍物,停车
|
||||
{
|
||||
state = WAIT_PASSENGER;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WAIT_PASSENGER: // 等候乘客
|
||||
{
|
||||
// TODO: 添加乘客等待逻辑
|
||||
LineSeek_Stop();
|
||||
SYN_FrameInfo(0, stations[current_station]);
|
||||
BUZZER_StartNTimes(3, 500, 500);
|
||||
MOTOR_Stop();
|
||||
HAL_Delay(5000);
|
||||
current_station++;
|
||||
state = RUNNING;
|
||||
break;
|
||||
}
|
||||
case STOP: // 停车
|
||||
{
|
||||
LineSeek_Stop();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
App_LineSeek();
|
||||
}
|
|
@ -1,6 +1,9 @@
|
|||
|
||||
#include "app_line_seek.h"
|
||||
|
||||
#include "bluetooth.h"
|
||||
#include "buzzer.h"
|
||||
#include "led.h"
|
||||
#include "line_seek.h"
|
||||
#include "main.h"
|
||||
#include "motor.h"
|
||||
|
@ -8,16 +11,15 @@
|
|||
#include "stm32f1xx_hal_tim.h"
|
||||
#include "syscalls.h"
|
||||
#include "tim.h"
|
||||
#include "timer.h"
|
||||
|
||||
#define LOW_TUNE_SPEED -5
|
||||
#define LOW_SPEED 35
|
||||
#define MID_SPEED 40
|
||||
#define HIGH_SPEED 45
|
||||
#define MIN_TURN_TIME 300 // 最小转直角时间
|
||||
#define MIN_CROSSING_TIME 200 // 最小走十字路口时间
|
||||
#define MIN_CROSSING_STRAIGHT_TIME 50 // 最小走十字路口时间
|
||||
#define MIN_TUNE_TIME 40 // 最小微调时间
|
||||
#define MAX_TURN_TIME 4000 // 最大转弯时间
|
||||
#define MIN_TURN_TIME 200 // 最小转直角时间
|
||||
#define MIN_CROSSING_TIME 300 // 最小走十字路口时间
|
||||
#define MIN_TUNE_TIME 30 // 最小微调时间
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
@ -27,41 +29,53 @@ typedef enum
|
|||
TUNE_LEFT, // 左微调
|
||||
TUNE_RIGHT, // 右微调
|
||||
TURN_LEFT_BIG,
|
||||
TURN_RIGHT_BIG
|
||||
TURN_RIGHT_BIG,
|
||||
MOVE_STOP
|
||||
} MoveState;
|
||||
|
||||
MoveState state, preState; // 运动状态
|
||||
int turn_time; // 转弯时间
|
||||
int beep_time; // 蜂鸣器鸣叫时间
|
||||
int is_crossing; // 是否正在走十字路口
|
||||
static MoveState state, preState; // 运动状态
|
||||
int turn_time; // 转弯时间
|
||||
int is_crossing; // 是否正在走十字路口
|
||||
static timer_event_id = -1;
|
||||
|
||||
void LINESEEK_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
|
||||
// 每1ms一次回调
|
||||
void LINESEEK_TURN_TIME()
|
||||
{
|
||||
if (turn_time < INT16_MAX)
|
||||
{
|
||||
turn_time++; // 每1ms自增一
|
||||
}
|
||||
|
||||
if (beep_time++ > 100)
|
||||
{
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET);
|
||||
turn_time++;
|
||||
}
|
||||
}
|
||||
|
||||
// 巡线功能初始化
|
||||
void LineSeek_Init(void)
|
||||
{
|
||||
// 注册定时器中断溢出回调
|
||||
HAL_TIM_RegisterCallback(&htim4, HAL_TIM_PERIOD_ELAPSED_CB_ID, LINESEEK_HAL_TIM_PeriodElapsedCallback);
|
||||
HAL_TIM_Base_Start_IT(&htim4);
|
||||
// 注册定时器事件
|
||||
timer_event_id = TIMER_AddInfiniteLoopEvent(timer_event_id, LINESEEK_TURN_TIME, 1);
|
||||
}
|
||||
|
||||
void LineSeek_Start(void)
|
||||
{
|
||||
if (state == MOVE_STOP)
|
||||
{
|
||||
state = MOVE_STRAIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
void LineSeek_Stop(void)
|
||||
{
|
||||
state = MOVE_STOP;
|
||||
}
|
||||
|
||||
void App_LineSeek(void)
|
||||
{
|
||||
int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1;
|
||||
// LineSeek_GetStatusStr();
|
||||
|
||||
// LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态
|
||||
|
||||
LineSeek_GetStatusStr();
|
||||
// if (state != MOVE_STOP)
|
||||
// {
|
||||
// BLUETOOTH_Send("line_seek state:%d, line_seek: %s\n", state, LineSeek_Status);
|
||||
// // BLUETOOTH_Send("line_seek: %s \n", LineSeek_Status);
|
||||
// }
|
||||
// printf("%s %d \n", LineSeek_Status, turn_time);
|
||||
|
||||
// return;
|
||||
|
@ -77,15 +91,19 @@ void App_LineSeek(void)
|
|||
LineSeek_Status[3] = '1';
|
||||
}
|
||||
|
||||
if (LineSeek_Equals("0000") && !is_crossing && state != MOVE_STOP) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case MOVE_STRAIGHT: // 直行
|
||||
LED_Stop(LED_ALL);
|
||||
LED_Start(LED_R);
|
||||
MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED);
|
||||
if (LineSeek_Equals("0000")) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("1011")) // 左微调
|
||||
if (LineSeek_Equals("1011")) // 左微调
|
||||
{
|
||||
state = TUNE_LEFT;
|
||||
}
|
||||
|
@ -117,18 +135,24 @@ void App_LineSeek(void)
|
|||
}
|
||||
break;
|
||||
case TURN_LEFT: // 左直角
|
||||
|
||||
LED_Stop(LED_ALL);
|
||||
LED_Start(LED_G);
|
||||
MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED);
|
||||
if (LineSeek_Equals("0000")) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("1001") &&
|
||||
((preState != TUNE_LEFT && turn_time >= MIN_TURN_TIME - 1) ||
|
||||
(preState == TUNE_LEFT && turn_time >= MIN_TUNE_TIME))) // 直行
|
||||
if (LineSeek_Equals("1001") &&
|
||||
((preState != TUNE_LEFT && turn_time >= MIN_TURN_TIME - 1) ||
|
||||
(preState == TUNE_LEFT && turn_time >= MIN_TUNE_TIME))) // 直行
|
||||
{
|
||||
state = MOVE_STRAIGHT;
|
||||
preState = TURN_LEFT;
|
||||
is_crossing = 0;
|
||||
LED_Stop(LED_ALL);
|
||||
LED_Start(LED_B);
|
||||
}
|
||||
else if (LineSeek_Equals("xxx0") && turn_time < MIN_TURN_TIME && !is_crossing) // 侧丁字路口
|
||||
{
|
||||
preState = TUNE_RIGHT;
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("xxx0") && !is_crossing) // 转过头了
|
||||
{
|
||||
|
@ -139,18 +163,19 @@ void App_LineSeek(void)
|
|||
break;
|
||||
case TURN_RIGHT: // 右直角
|
||||
MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED);
|
||||
if (LineSeek_Equals("0000")) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("1001") &&
|
||||
((preState != TUNE_RIGHT && turn_time >= MIN_TURN_TIME - 1) ||
|
||||
(preState == TUNE_RIGHT && turn_time >= MIN_TUNE_TIME))) // 直行
|
||||
if (LineSeek_Equals("1001") &&
|
||||
((preState != TUNE_RIGHT && turn_time >= MIN_TURN_TIME - 1) ||
|
||||
(preState == TUNE_RIGHT && turn_time >= MIN_TUNE_TIME))) // 直行
|
||||
{
|
||||
state = MOVE_STRAIGHT;
|
||||
preState = TURN_RIGHT;
|
||||
is_crossing = 0;
|
||||
}
|
||||
else if (LineSeek_Equals("0xxx") && turn_time < MIN_TURN_TIME && !is_crossing) // 侧丁字路口
|
||||
{
|
||||
preState = TUNE_LEFT;
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("0xxx") && !is_crossing) // 转过头了
|
||||
{
|
||||
turn_time = MIN_TURN_TIME;
|
||||
|
@ -160,11 +185,7 @@ void App_LineSeek(void)
|
|||
break;
|
||||
case TURN_LEFT_BIG: // 左锐角
|
||||
MOTOR_SetDuty(-MID_SPEED, MID_SPEED);
|
||||
if (LineSeek_Equals("0000")) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("0001")) // 左直角
|
||||
if (LineSeek_Equals("0001")) // 左直角
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_LEFT;
|
||||
|
@ -178,11 +199,7 @@ void App_LineSeek(void)
|
|||
break;
|
||||
case TURN_RIGHT_BIG: // 右锐角
|
||||
MOTOR_SetDuty(MID_SPEED, -MID_SPEED);
|
||||
if (LineSeek_Equals("0000")) // 十字路口
|
||||
{
|
||||
Hanlde_Crossroad();
|
||||
}
|
||||
else if (LineSeek_Equals("1000")) // 右直角
|
||||
if (LineSeek_Equals("1000")) // 右直角
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_RIGHT;
|
||||
|
@ -200,13 +217,13 @@ void App_LineSeek(void)
|
|||
{
|
||||
state = MOVE_STRAIGHT;
|
||||
}
|
||||
else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转
|
||||
else if (LineSeek_Equals("0xx1")) // 左转
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_LEFT;
|
||||
preState = TUNE_LEFT;
|
||||
}
|
||||
else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转
|
||||
else if (LineSeek_Equals("1xx0")) // 右转
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_RIGHT;
|
||||
|
@ -219,47 +236,35 @@ void App_LineSeek(void)
|
|||
{
|
||||
state = MOVE_STRAIGHT;
|
||||
}
|
||||
else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转
|
||||
else if (LineSeek_Equals("0xx1")) // 左转
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_LEFT;
|
||||
preState = TUNE_RIGHT;
|
||||
}
|
||||
else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转
|
||||
else if (LineSeek_Equals("1xx0")) // 右转
|
||||
{
|
||||
turn_time = 0;
|
||||
state = TURN_RIGHT;
|
||||
preState = TUNE_RIGHT;
|
||||
}
|
||||
break;
|
||||
case MOVE_STOP:
|
||||
MOTOR_Stop();
|
||||
break;
|
||||
default:
|
||||
state = MOVE_STRAIGHT;
|
||||
MOTOR_SetDuty(MID_SPEED, MID_SPEED);
|
||||
break;
|
||||
}
|
||||
|
||||
// if (turn_time >= MAX_TURN_TIME)
|
||||
// {
|
||||
// // state = MOVE_STRAIGHT;
|
||||
// MOTOR_SetDuty(0, 0);
|
||||
// }
|
||||
|
||||
// printf("curr state: %d \n", state);
|
||||
}
|
||||
|
||||
void Hanlde_Crossroad(void)
|
||||
{
|
||||
if (is_crossing)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
beep_time = 0;
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_RESET);
|
||||
// state = MOVE_STRAIGHT;
|
||||
// buzzer(1);
|
||||
// HAL_Delay(50);
|
||||
// buzzer(0);
|
||||
// 开启蜂鸣器
|
||||
BUZZER_StartTimed(1);
|
||||
|
||||
// 根据规划的路径进行决断
|
||||
is_crossing = 1;
|
||||
|
@ -281,4 +286,4 @@ void Hanlde_Crossroad(void)
|
|||
break;
|
||||
}
|
||||
// printf("state: %d, dir: %d \n", state, direction);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
|
||||
#include "app_line_seek.h"
|
||||
|
||||
#include "line_seek.h"
|
||||
#include "main.h"
|
||||
#include "motor.h"
|
||||
#include "path_plan.h"
|
||||
#include "syscalls.h"
|
||||
|
||||
// #define LOW_SPEED 30
|
||||
// #define MID_SPEED 35
|
||||
// #define HIGH_SPEED 40
|
||||
|
||||
#define LOW_SPEED 25
|
||||
#define MID_SPEED 30
|
||||
#define HIGH_SPEED 35
|
||||
|
||||
|
||||
void App_LineSeek(void)
|
||||
{
|
||||
int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1;
|
||||
|
||||
LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态
|
||||
|
||||
LineSeek_GetStatusStr();
|
||||
printf("%s\n", LineSeek_Status);
|
||||
|
||||
// return;
|
||||
|
||||
if (LineSeek_Equals("0000")) // 丁字(十字)路口
|
||||
{
|
||||
buzzer(1);
|
||||
|
||||
// 根据规划的路径进行决断
|
||||
switch (GetNextDirection())
|
||||
{
|
||||
case STRAIGHT:
|
||||
MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); // 直走
|
||||
break;
|
||||
case LEFT:
|
||||
MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 左转
|
||||
break;
|
||||
case RIGHT:
|
||||
MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 右转
|
||||
break;
|
||||
default:
|
||||
MOTOR_Stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buzzer(0);
|
||||
}
|
||||
|
||||
if (LineSeek_Equals("1000")) // 右直角
|
||||
{
|
||||
MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 右旋
|
||||
// HAL_Delay(80);
|
||||
}
|
||||
else if (LineSeek_Equals("0001")) // 左直角
|
||||
{
|
||||
MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 左旋;
|
||||
// HAL_Delay(80);
|
||||
}
|
||||
else if (LineSeek_Equals("0xx1")) // 左最外侧检测(锐角)
|
||||
{
|
||||
MOTOR_SetDuty(-HIGH_SPEED, MID_SPEED); // 左旋
|
||||
// HAL_Delay(80);
|
||||
}
|
||||
else if (LineSeek_Equals("1xx0")) // 右最外侧检测(锐角)
|
||||
{
|
||||
MOTOR_SetDuty(MID_SPEED, -HIGH_SPEED); // 右旋
|
||||
// HAL_Delay(80);
|
||||
}
|
||||
else if (LineSeek_Equals("x01x")) // 中间黑线上的传感器微调车左转
|
||||
{
|
||||
MOTOR_SetDuty(0, LOW_SPEED); // 左转
|
||||
}
|
||||
else if (LineSeek_Equals("x10x")) // 中间黑线上的传感器微调车右转
|
||||
{
|
||||
MOTOR_SetDuty(LOW_SPEED, 0); // 右转
|
||||
}
|
||||
else if (LineSeek_Equals("x00x")) // 都是黑色, 加速前进
|
||||
{
|
||||
MOTOR_SetDuty(MID_SPEED, MID_SPEED); // 直走
|
||||
}
|
||||
}
|
|
@ -35,7 +35,8 @@ int APP_Find_Direction(void)
|
|||
else if(left_block < BLOCK_DISTANCE && right_block < BLOCK_DISTANCE && straight_block < BLOCK_DISTANCE)// 前左右均有障碍物,停止并鸣笛
|
||||
{
|
||||
LED_SetDuty(255,0,0);
|
||||
return STOP;
|
||||
// return STOP;
|
||||
return -1;
|
||||
}
|
||||
else if(straight_block < BLOCK_DISTANCE && left_block < BLOCK_DISTANCE)// 前左有障碍物,右转
|
||||
{
|
||||
|
|
116
CAR.ioc
116
CAR.ioc
|
@ -3,7 +3,18 @@ CAD.formats=
|
|||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
Dma.Request0=USART2_RX
|
||||
Dma.RequestsNb=1
|
||||
Dma.Request1=USART2_TX
|
||||
Dma.Request2=USART1_TX
|
||||
Dma.RequestsNb=3
|
||||
Dma.USART1_TX.2.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.USART1_TX.2.Instance=DMA1_Channel4
|
||||
Dma.USART1_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.USART1_TX.2.MemInc=DMA_MINC_ENABLE
|
||||
Dma.USART1_TX.2.Mode=DMA_NORMAL
|
||||
Dma.USART1_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.USART1_TX.2.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.USART1_TX.2.Priority=DMA_PRIORITY_LOW
|
||||
Dma.USART1_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
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,23 +24,31 @@ 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
|
||||
Mcu.CPN=STM32F103C8T6
|
||||
Mcu.Family=STM32F1
|
||||
Mcu.IP0=DMA
|
||||
Mcu.IP1=I2C2
|
||||
Mcu.IP10=USART2
|
||||
Mcu.IP2=NVIC
|
||||
Mcu.IP3=RCC
|
||||
Mcu.IP4=SYS
|
||||
Mcu.IP5=TIM1
|
||||
Mcu.IP6=TIM2
|
||||
Mcu.IP7=TIM3
|
||||
Mcu.IP8=TIM4
|
||||
Mcu.IP9=USART1
|
||||
Mcu.IPNb=11
|
||||
Mcu.IP1=NVIC
|
||||
Mcu.IP2=RCC
|
||||
Mcu.IP3=SYS
|
||||
Mcu.IP4=TIM1
|
||||
Mcu.IP5=TIM2
|
||||
Mcu.IP6=TIM3
|
||||
Mcu.IP7=TIM4
|
||||
Mcu.IP8=USART1
|
||||
Mcu.IP9=USART2
|
||||
Mcu.IPNb=10
|
||||
Mcu.Name=STM32F103C(8-B)Tx
|
||||
Mcu.Package=LQFP48
|
||||
Mcu.Pin0=PC13-TAMPER-RTC
|
||||
|
@ -38,45 +57,43 @@ Mcu.Pin10=PA6
|
|||
Mcu.Pin11=PA7
|
||||
Mcu.Pin12=PB0
|
||||
Mcu.Pin13=PB1
|
||||
Mcu.Pin14=PB10
|
||||
Mcu.Pin15=PB11
|
||||
Mcu.Pin16=PB12
|
||||
Mcu.Pin17=PA9
|
||||
Mcu.Pin18=PA10
|
||||
Mcu.Pin19=PA11
|
||||
Mcu.Pin14=PB12
|
||||
Mcu.Pin15=PA9
|
||||
Mcu.Pin16=PA10
|
||||
Mcu.Pin17=PA11
|
||||
Mcu.Pin18=PA12
|
||||
Mcu.Pin19=PA13
|
||||
Mcu.Pin2=PC15-OSC32_OUT
|
||||
Mcu.Pin20=PA12
|
||||
Mcu.Pin21=PA13
|
||||
Mcu.Pin22=PA14
|
||||
Mcu.Pin23=PA15
|
||||
Mcu.Pin24=PB4
|
||||
Mcu.Pin25=PB5
|
||||
Mcu.Pin26=PB6
|
||||
Mcu.Pin27=PB7
|
||||
Mcu.Pin28=PB8
|
||||
Mcu.Pin29=PB9
|
||||
Mcu.Pin20=PA14
|
||||
Mcu.Pin21=PA15
|
||||
Mcu.Pin22=PB4
|
||||
Mcu.Pin23=PB5
|
||||
Mcu.Pin24=PB6
|
||||
Mcu.Pin25=PB7
|
||||
Mcu.Pin26=PB8
|
||||
Mcu.Pin27=PB9
|
||||
Mcu.Pin28=VP_SYS_VS_Systick
|
||||
Mcu.Pin29=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin3=PD0-OSC_IN
|
||||
Mcu.Pin30=VP_SYS_VS_Systick
|
||||
Mcu.Pin31=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin32=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin33=VP_TIM3_VS_ClockSourceINT
|
||||
Mcu.Pin34=VP_TIM4_VS_ClockSourceINT
|
||||
Mcu.Pin30=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin31=VP_TIM3_VS_ClockSourceINT
|
||||
Mcu.Pin32=VP_TIM4_VS_ClockSourceINT
|
||||
Mcu.Pin4=PD1-OSC_OUT
|
||||
Mcu.Pin5=PA0-WKUP
|
||||
Mcu.Pin6=PA1
|
||||
Mcu.Pin7=PA2
|
||||
Mcu.Pin8=PA3
|
||||
Mcu.Pin9=PA4
|
||||
Mcu.PinsNb=35
|
||||
Mcu.PinsNb=33
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F103C8Tx
|
||||
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\:0\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.DMA1_Channel6_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.EXTI15_10_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.EXTI15_10_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.ForceEnableDMAVector=false
|
||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
|
@ -84,10 +101,9 @@ NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
|||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_2
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.SysTick_IRQn=true\:2\:0\:true\:false\:true\:false\:true\:false
|
||||
NVIC.SysTick_IRQn=true\:3\:3\:true\:false\:true\:false\:true\:false
|
||||
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM4_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM4_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.USART1_IRQn=true\:3\:1\:true\:false\:true\:true\:true\:true
|
||||
NVIC.USART2_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
|
@ -148,16 +164,6 @@ PB1.GPIOParameters=GPIO_Label
|
|||
PB1.GPIO_Label=LED_R_TIM3CH4
|
||||
PB1.Locked=true
|
||||
PB1.Signal=S_TIM3_CH4
|
||||
PB10.GPIOParameters=GPIO_Label
|
||||
PB10.GPIO_Label=MPU6050_SCL
|
||||
PB10.Locked=true
|
||||
PB10.Mode=I2C
|
||||
PB10.Signal=I2C2_SCL
|
||||
PB11.GPIOParameters=GPIO_Label
|
||||
PB11.GPIO_Label=MPU6050_SDA
|
||||
PB11.Locked=true
|
||||
PB11.Mode=I2C
|
||||
PB11.Signal=I2C2_SDA
|
||||
PB12.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PB12.GPIO_Label=LineSeek_R2
|
||||
PB12.GPIO_PuPd=GPIO_PULLUP
|
||||
|
@ -231,12 +237,12 @@ ProjectManager.ProjectName=CAR
|
|||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=TIM
|
||||
ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=MDK-ARM V5.32
|
||||
ProjectManager.TargetToolchain=Makefile
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
ProjectManager.UAScriptBeforePath=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_I2C2_Init-I2C2-false-HAL-true,5-MX_TIM1_Init-TIM1-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM3_Init-TIM3-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_USART2_UART_Init-USART2-false-HAL-true
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM1_Init-TIM1-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_TIM3_Init-TIM3-false-HAL-true,7-MX_TIM4_Init-TIM4-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true,9-MX_USART2_UART_Init-USART2-false-HAL-true
|
||||
RCC.ADCFreqValue=36000000
|
||||
RCC.AHBFreq_Value=72000000
|
||||
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
||||
|
@ -295,11 +301,11 @@ TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
|||
TIM4.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||
TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||
TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2,AutoReloadPreload
|
||||
TIM4.Period=100
|
||||
TIM4.Period=100 - 1
|
||||
TIM4.Prescaler=720 - 1
|
||||
TIM4.Pulse-PWM\ Generation1\ CH1=100
|
||||
TIM4.Pulse-PWM\ Generation2\ CH2=100
|
||||
USART1.BaudRate=115200
|
||||
TIM4.Pulse-PWM\ Generation1\ CH1=0
|
||||
TIM4.Pulse-PWM\ Generation2\ CH2=0
|
||||
USART1.BaudRate=9600
|
||||
USART1.IPParameters=VirtualMode,BaudRate,Parity,WordLength
|
||||
USART1.Parity=PARITY_NONE
|
||||
USART1.VirtualMode=VM_ASYNC
|
||||
|
|
10
Core/Inc/delay.h
Normal file
10
Core/Inc/delay.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ifndef __DELAY_H
|
||||
#define __DELAY_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
extern void delay_init(void);
|
||||
extern void delay_us(uint32_t nus);
|
||||
extern void delay_ms(uint32_t nms);
|
||||
|
||||
#endif
|
|
@ -1,52 +0,0 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file i2c.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the i2c.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __I2C_H__
|
||||
#define __I2C_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern I2C_HandleTypeDef hi2c2;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_I2C2_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __I2C_H__ */
|
||||
|
|
@ -77,10 +77,6 @@ void Error_Handler(void);
|
|||
#define LED_G_TIM3CH3_GPIO_Port GPIOB
|
||||
#define LED_R_TIM3CH4_Pin GPIO_PIN_1
|
||||
#define LED_R_TIM3CH4_GPIO_Port GPIOB
|
||||
#define MPU6050_SCL_Pin GPIO_PIN_10
|
||||
#define MPU6050_SCL_GPIO_Port GPIOB
|
||||
#define MPU6050_SDA_Pin GPIO_PIN_11
|
||||
#define MPU6050_SDA_GPIO_Port GPIOB
|
||||
#define LineSeek_R2_Pin GPIO_PIN_12
|
||||
#define LineSeek_R2_GPIO_Port GPIOB
|
||||
#define SERVO_Pin GPIO_PIN_11
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
/*#define HAL_ETH_MODULE_ENABLED */
|
||||
/*#define HAL_FLASH_MODULE_ENABLED */
|
||||
#define HAL_GPIO_MODULE_ENABLED
|
||||
#define HAL_I2C_MODULE_ENABLED
|
||||
/*#define HAL_I2C_MODULE_ENABLED */
|
||||
/*#define HAL_I2S_MODULE_ENABLED */
|
||||
/*#define HAL_IRDA_MODULE_ENABLED */
|
||||
/*#define HAL_IWDG_MODULE_ENABLED */
|
||||
|
@ -129,7 +129,7 @@
|
|||
* @brief This is the HAL system configuration section
|
||||
*/
|
||||
#define VDD_VALUE 3300U /*!< Value of VDD in mv */
|
||||
#define TICK_INT_PRIORITY 2U /*!< tick interrupt priority (lowest by default) */
|
||||
#define TICK_INT_PRIORITY 3U /*!< tick interrupt priority (lowest by default) */
|
||||
#define USE_RTOS 0U
|
||||
#define PREFETCH_ENABLE 1U
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@ 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 TIM3_IRQHandler(void);
|
||||
void TIM4_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
void USART2_IRQHandler(void);
|
||||
|
|
|
@ -8,11 +8,19 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "usart.h"
|
||||
|
||||
#define DEFAULT_HUART 1
|
||||
#define HUART1 (&huart1)
|
||||
#define HUART2 (&huart2)
|
||||
|
||||
#if DEFAULT_HUART == 1
|
||||
#define HUART HUART1
|
||||
#else
|
||||
#define HUART HUART2
|
||||
#endif
|
||||
|
||||
// 条件编译,适配不同平台 (GNU, GCC)
|
||||
#ifdef __GNUC__
|
||||
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
|
||||
|
@ -25,10 +33,7 @@
|
|||
int _read(int file, char *ptr, int len);
|
||||
int _write(int file, char *ptr, int len);
|
||||
|
||||
PUTCHAR_PROTOTYPE;
|
||||
GETCHAR_PROTOTYPE;
|
||||
|
||||
void delay_us(uint16_t us);
|
||||
int myprintf(const char *format, ...);
|
||||
void my_printf(UART_HandleTypeDef *huart, const char *buf, ...);
|
||||
|
||||
#endif
|
||||
|
|
127
Core/Src/delay.c
Normal file
127
Core/Src/delay.c
Normal file
|
@ -0,0 +1,127 @@
|
|||
#include "main.h"
|
||||
|
||||
#define USE_HAL_LEGACY
|
||||
#include "stm32_hal_legacy.h"
|
||||
|
||||
#define Timebase_Source_is_SysTick 1 //当Timebase Source为SysTick时改为1
|
||||
//#define Timebase_Source_is_SysTick 0 //当使用FreeRTOS,Timebase Source为其他定时器时改为0
|
||||
|
||||
#if (!Timebase_Source_is_SysTick)
|
||||
extern TIM_HandleTypeDef htimx; //当使用FreeRTOS,Timebase Source为其他定时器时,修改为对应的定时器
|
||||
#define Timebase_htim htimx
|
||||
|
||||
#define Delay_GetCounter() __HAL_TIM_GetCounter(&Timebase_htim)
|
||||
#define Delay_GetAutoreload() __HAL_TIM_GetAutoreload(&Timebase_htim)
|
||||
#else
|
||||
#define Delay_GetCounter() (SysTick->VAL)
|
||||
#define Delay_GetAutoreload() (SysTick->LOAD)
|
||||
#endif
|
||||
|
||||
static uint16_t fac_us = 0;
|
||||
static uint32_t fac_ms = 0;
|
||||
|
||||
/*初始化*/
|
||||
void delay_init(void)
|
||||
{
|
||||
#if (!Timebase_Source_is_SysTick)
|
||||
fac_ms = 1000000; //作为时基的计数器时钟频率在HAL_InitTick()中被设为了1MHz
|
||||
fac_us = fac_ms / 1000;
|
||||
#else
|
||||
fac_ms = SystemCoreClock / 1000;
|
||||
fac_us = fac_ms / 1000;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*微秒级延时*/
|
||||
void delay_us(uint32_t nus)
|
||||
{
|
||||
uint32_t ticks = 0;
|
||||
uint32_t told = 0;
|
||||
uint32_t tnow = 0;
|
||||
uint32_t tcnt = 0;
|
||||
uint32_t reload = 0;
|
||||
|
||||
reload = Delay_GetAutoreload();
|
||||
|
||||
ticks = nus * fac_us;
|
||||
|
||||
told = Delay_GetCounter();
|
||||
|
||||
while (1)
|
||||
{
|
||||
tnow = Delay_GetCounter();
|
||||
|
||||
if (tnow != told)
|
||||
{
|
||||
if (tnow < told)
|
||||
{
|
||||
tcnt += told - tnow;
|
||||
}
|
||||
else
|
||||
{
|
||||
tcnt += reload - tnow + told;
|
||||
}
|
||||
told = tnow;
|
||||
if (tcnt >= ticks)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*毫秒级延时*/
|
||||
void delay_ms(uint32_t nms)
|
||||
{
|
||||
uint32_t ticks = 0;
|
||||
uint32_t told = 0;
|
||||
uint32_t tnow = 0;
|
||||
uint32_t tcnt = 0;
|
||||
uint32_t reload = 0;
|
||||
|
||||
reload = Delay_GetAutoreload();
|
||||
|
||||
ticks = nms * fac_ms;
|
||||
|
||||
told = Delay_GetCounter();
|
||||
|
||||
while (1)
|
||||
{
|
||||
tnow = Delay_GetCounter();
|
||||
|
||||
if (tnow != told)
|
||||
{
|
||||
if (tnow < told)
|
||||
{
|
||||
tcnt += told - tnow;
|
||||
}
|
||||
else
|
||||
{
|
||||
tcnt += reload - tnow + told;
|
||||
}
|
||||
told = tnow;
|
||||
if (tcnt >= ticks)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*重写HAL_Delay*/
|
||||
void HAL_Delay(uint32_t Delay)
|
||||
{
|
||||
uint32_t tickstart = HAL_GetTick();
|
||||
uint32_t wait = Delay;
|
||||
|
||||
/*不太明白官方源码为啥这么写,会多延时1ms,注释掉后更准*/
|
||||
// /* Add a freq to guarantee minimum wait */
|
||||
// if (wait < HAL_MAX_DELAY)
|
||||
// {
|
||||
// wait += (uint32_t)(uwTickFreq);
|
||||
// }
|
||||
|
||||
while ((HAL_GetTick() - tickstart) < wait)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -44,8 +44,11 @@ void MX_DMA_Init(void)
|
|||
|
||||
/* DMA interrupt init */
|
||||
/* DMA1_Channel6_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ void MX_GPIO_Init(void)
|
|||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* EXTI interrupt init*/
|
||||
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 1, 0);
|
||||
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
|
||||
|
||||
}
|
||||
|
|
114
Core/Src/i2c.c
114
Core/Src/i2c.c
|
@ -1,114 +0,0 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file i2c.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the I2C instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "i2c.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
I2C_HandleTypeDef hi2c2;
|
||||
|
||||
/* I2C2 init function */
|
||||
void MX_I2C2_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN I2C2_Init 0 */
|
||||
|
||||
/* USER CODE END I2C2_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN I2C2_Init 1 */
|
||||
|
||||
/* USER CODE END I2C2_Init 1 */
|
||||
hi2c2.Instance = I2C2;
|
||||
hi2c2.Init.ClockSpeed = 100000;
|
||||
hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||
hi2c2.Init.OwnAddress1 = 0;
|
||||
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||
hi2c2.Init.OwnAddress2 = 0;
|
||||
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
||||
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
||||
if (HAL_I2C_Init(&hi2c2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN I2C2_Init 2 */
|
||||
|
||||
/* USER CODE END I2C2_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(i2cHandle->Instance==I2C2)
|
||||
{
|
||||
/* USER CODE BEGIN I2C2_MspInit 0 */
|
||||
|
||||
/* USER CODE END I2C2_MspInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**I2C2 GPIO Configuration
|
||||
PB10 ------> I2C2_SCL
|
||||
PB11 ------> I2C2_SDA
|
||||
*/
|
||||
GPIO_InitStruct.Pin = MPU6050_SCL_Pin|MPU6050_SDA_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* I2C2 clock enable */
|
||||
__HAL_RCC_I2C2_CLK_ENABLE();
|
||||
/* USER CODE BEGIN I2C2_MspInit 1 */
|
||||
|
||||
/* USER CODE END I2C2_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
|
||||
{
|
||||
|
||||
if(i2cHandle->Instance==I2C2)
|
||||
{
|
||||
/* USER CODE BEGIN I2C2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END I2C2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_I2C2_CLK_DISABLE();
|
||||
|
||||
/**I2C2 GPIO Configuration
|
||||
PB10 ------> I2C2_SCL
|
||||
PB11 ------> I2C2_SDA
|
||||
*/
|
||||
HAL_GPIO_DeInit(MPU6050_SCL_GPIO_Port, MPU6050_SCL_Pin);
|
||||
|
||||
HAL_GPIO_DeInit(MPU6050_SDA_GPIO_Port, MPU6050_SDA_Pin);
|
||||
|
||||
/* USER CODE BEGIN I2C2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END I2C2_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
|
@ -21,19 +21,24 @@
|
|||
|
||||
#include "dma.h"
|
||||
#include "gpio.h"
|
||||
#include "i2c.h"
|
||||
#include "tim.h"
|
||||
#include "usart.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "app_bus.h"
|
||||
#include "app_line_seek.h"
|
||||
#include "block_detect.h"
|
||||
#include "bluetooth.h"
|
||||
#include "buzzer.h"
|
||||
#include "delay.h"
|
||||
#include "hcsr04.h"
|
||||
#include "led.h"
|
||||
#include "motor.h"
|
||||
#include "path_plan.h"
|
||||
#include "servo.h"
|
||||
#include "syscalls.h"
|
||||
#include "timer.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
@ -54,7 +59,11 @@
|
|||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
int printf_event_id = -1;
|
||||
void Print(uint16_t time)
|
||||
{
|
||||
printf("timed print: %d\n", time);
|
||||
}
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
|
@ -78,8 +87,8 @@ void SystemClock_Config(void);
|
|||
int main(void)
|
||||
{
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
uint8_t pData[10] = {1, 2, 3};
|
||||
int i = 0;
|
||||
char pData[] = "hello world";
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
|
@ -101,42 +110,63 @@ int main(void)
|
|||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_I2C2_Init();
|
||||
MX_TIM1_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_TIM3_Init();
|
||||
MX_TIM4_Init();
|
||||
MX_USART1_UART_Init();
|
||||
// MX_USART2_UART_Init();
|
||||
// MX_USART1_UART_Init();
|
||||
MX_USART2_UART_Init();
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
HAL_Delay(500);
|
||||
|
||||
delay_init();
|
||||
TIMER_Init();
|
||||
HC_SR04_Init();
|
||||
BLUETOOTH_Init();
|
||||
MOTOR_Init();
|
||||
PathPlanner_Init();
|
||||
LineSeek_Init();
|
||||
BlockDetect_Init();
|
||||
SERVO_Init();
|
||||
SERVO_Rotate(90);
|
||||
|
||||
HAL_Delay(2000);
|
||||
|
||||
// BUZZER_StartNTimes(20, 500, 500);
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
// my_printf(HUART1, "%s\r\n", *pData);
|
||||
// printf("printf: %s \r\n", pData);
|
||||
// myprintf("myprintf: %s \r\n", pData);
|
||||
// BUZZER_StartTimed(5);
|
||||
// HAL_Delay(1000);
|
||||
// my_printf(HUART1, "HUART1: %s \r\n", pData);
|
||||
// my_printf(HUART2, "HUART2: %s \r\n", pData);
|
||||
|
||||
// if (HAL_OK == HAL_UART_Receive(&huart2, (uint8_t *)pData, 2, 1000))
|
||||
// {
|
||||
// HAL_UART_Transmit(&huart2, (uint8_t *)pData, sizeof(pData), 1000);
|
||||
// HAL_Delay(500);
|
||||
// HAL_UART_Transmit(&huart1, (uint8_t *)pData, sizeof(pData), 1000);
|
||||
// HAL_Delay(500);
|
||||
// }
|
||||
|
||||
// HAL_Delay(2000);
|
||||
// printf("printf: %s \r\n", pData);
|
||||
App_Bus();
|
||||
|
||||
App_LineSeek();
|
||||
// BUZZER_StartTimed(1000);
|
||||
// HAL_Delay(3000);
|
||||
// printf("ruunning\n");
|
||||
// BUZZER_StartNTimes(5, 500, 500);
|
||||
// HAL_Delay(5000);
|
||||
|
||||
// App_LineSeek();
|
||||
|
||||
// MOTOR_SetDuty(-20,20);
|
||||
|
||||
// HAL_Delay(300); // 延时300毫秒
|
||||
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
|
|
|
@ -56,9 +56,9 @@
|
|||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
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 */
|
||||
|
@ -217,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.
|
||||
*/
|
||||
|
@ -231,20 +245,6 @@ void TIM2_IRQHandler(void)
|
|||
/* USER CODE END TIM2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM3 global interrupt.
|
||||
*/
|
||||
void TIM3_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM3_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM3_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim3);
|
||||
/* USER CODE BEGIN TIM3_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM3_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM4 global interrupt.
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
#include "syscalls.h"
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
volatile uint8_t usart_dma_tx_over = 1;
|
||||
|
||||
// 条件编译,适配不同平台 (GNU, GCC)
|
||||
#ifdef __GNUC__
|
||||
|
@ -42,7 +42,7 @@ __attribute__((weak)) int _write(int file, char *ptr, int len)
|
|||
*/
|
||||
PUTCHAR_PROTOTYPE
|
||||
{
|
||||
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); // 阻塞式无限等待
|
||||
HAL_UART_Transmit(HUART, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
|
||||
return ch;
|
||||
}
|
||||
|
||||
|
@ -58,20 +58,47 @@ PUTCHAR_PROTOTYPE
|
|||
GETCHAR_PROTOTYPE
|
||||
{
|
||||
uint8_t ch = 0;
|
||||
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
|
||||
HAL_UART_Receive(HUART, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
|
||||
return ch;
|
||||
}
|
||||
|
||||
void delay_us(uint16_t us)
|
||||
// 串口发送完毕回调函数,设置usart_dma_tx_over标志为1
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
|
||||
while (delay--);
|
||||
#if DEFAULT_HUART == 1
|
||||
if (huart->Instance == USART1)
|
||||
#else
|
||||
if (huart->Instance == USART2)
|
||||
#endif
|
||||
{
|
||||
usart_dma_tx_over = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 自定义printf
|
||||
* @param huart, buf
|
||||
* @return void
|
||||
* @brief 自定义printf,串口使用头文件定义的DEFAULT_HUART,DMA串口中断方式发送
|
||||
*
|
||||
* @usage my_printf(HUART1, "USART1_Target:\r\n");
|
||||
*/
|
||||
int myprintf(const char *format, ...)
|
||||
{
|
||||
va_list arg;
|
||||
static char SendBuff[256] = {0};
|
||||
int rv;
|
||||
while (!usart_dma_tx_over); // 等待前一次DMA发送完成
|
||||
|
||||
va_start(arg, format);
|
||||
rv = vsnprintf((char *)SendBuff, sizeof(SendBuff) + 1, (char *)format, arg);
|
||||
va_end(arg);
|
||||
|
||||
HAL_UART_Transmit_DMA(HUART, (uint8_t *)SendBuff, rv);
|
||||
usart_dma_tx_over = 0; // 清0全局标志,发送完成后重新置1
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 自定义printf, 需指定发送串口
|
||||
*
|
||||
* @usage my_printf(HUART1, "USART1_Target:\r\n");
|
||||
*/
|
||||
|
|
|
@ -218,7 +218,7 @@ void MX_TIM4_Init(void)
|
|||
htim4.Instance = TIM4;
|
||||
htim4.Init.Prescaler = 720 - 1;
|
||||
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim4.Init.Period = 100;
|
||||
htim4.Init.Period = 100 - 1;
|
||||
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||
|
@ -241,7 +241,7 @@ void MX_TIM4_Init(void)
|
|||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 100;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||
|
@ -295,10 +295,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||
/* USER CODE END TIM3_MspInit 0 */
|
||||
/* TIM3 clock enable */
|
||||
__HAL_RCC_TIM3_CLK_ENABLE();
|
||||
|
||||
/* TIM3 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM3_IRQn);
|
||||
/* USER CODE BEGIN TIM3_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM3_MspInit 1 */
|
||||
|
@ -312,7 +308,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||
__HAL_RCC_TIM4_CLK_ENABLE();
|
||||
|
||||
/* TIM4 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
|
||||
HAL_NVIC_SetPriority(TIM4_IRQn, 1, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM4_IRQn);
|
||||
/* USER CODE BEGIN TIM4_MspInit 1 */
|
||||
|
||||
|
@ -426,9 +422,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||
/* USER CODE END TIM3_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM3_CLK_DISABLE();
|
||||
|
||||
/* TIM3 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(TIM3_IRQn);
|
||||
/* USER CODE BEGIN TIM3_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM3_MspDeInit 1 */
|
||||
|
|
|
@ -26,7 +26,9 @@
|
|||
|
||||
UART_HandleTypeDef huart1;
|
||||
UART_HandleTypeDef huart2;
|
||||
DMA_HandleTypeDef hdma_usart1_tx;
|
||||
DMA_HandleTypeDef hdma_usart2_rx;
|
||||
DMA_HandleTypeDef hdma_usart2_tx;
|
||||
|
||||
/* USART1 init function */
|
||||
|
||||
|
@ -41,7 +43,7 @@ void MX_USART1_UART_Init(void)
|
|||
|
||||
/* USER CODE END USART1_Init 1 */
|
||||
huart1.Instance = USART1;
|
||||
huart1.Init.BaudRate = 115200;
|
||||
huart1.Init.BaudRate = 9600;
|
||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||
huart1.Init.Parity = UART_PARITY_NONE;
|
||||
|
@ -114,6 +116,23 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USART1 DMA Init */
|
||||
/* USART1_TX Init */
|
||||
hdma_usart1_tx.Instance = DMA1_Channel4;
|
||||
hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||
hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||
hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
hdma_usart1_tx.Init.Mode = DMA_NORMAL;
|
||||
hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
|
||||
if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);
|
||||
|
||||
/* USART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART1_IRQn, 3, 1);
|
||||
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
||||
|
@ -161,6 +180,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);
|
||||
|
@ -187,6 +222,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
|
||||
|
||||
/* USART1 DMA DeInit */
|
||||
HAL_DMA_DeInit(uartHandle->hdmatx);
|
||||
|
||||
/* USART1 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
|
@ -209,6 +247,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);
|
||||
|
|
|
@ -1,738 +0,0 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f1xx_hal_i2c.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of I2C HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F1xx_HAL_I2C_H
|
||||
#define __STM32F1xx_HAL_I2C_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f1xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup I2C
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup I2C_Exported_Types I2C Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition
|
||||
* @brief I2C Configuration Structure definition
|
||||
* @{
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t ClockSpeed; /*!< Specifies the clock frequency.
|
||||
This parameter must be set to a value lower than 400kHz */
|
||||
|
||||
uint32_t DutyCycle; /*!< Specifies the I2C fast mode duty cycle.
|
||||
This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
|
||||
|
||||
uint32_t OwnAddress1; /*!< Specifies the first device own address.
|
||||
This parameter can be a 7-bit or 10-bit address. */
|
||||
|
||||
uint32_t AddressingMode; /*!< Specifies if 7-bit or 10-bit addressing mode is selected.
|
||||
This parameter can be a value of @ref I2C_addressing_mode */
|
||||
|
||||
uint32_t DualAddressMode; /*!< Specifies if dual addressing mode is selected.
|
||||
This parameter can be a value of @ref I2C_dual_addressing_mode */
|
||||
|
||||
uint32_t OwnAddress2; /*!< Specifies the second device own address if dual addressing mode is selected
|
||||
This parameter can be a 7-bit address. */
|
||||
|
||||
uint32_t GeneralCallMode; /*!< Specifies if general call mode is selected.
|
||||
This parameter can be a value of @ref I2C_general_call_addressing_mode */
|
||||
|
||||
uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected.
|
||||
This parameter can be a value of @ref I2C_nostretch_mode */
|
||||
|
||||
} I2C_InitTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup HAL_state_structure_definition HAL state structure definition
|
||||
* @brief HAL State structure definition
|
||||
* @note HAL I2C State value coding follow below described bitmap :
|
||||
* b7-b6 Error information
|
||||
* 00 : No Error
|
||||
* 01 : Abort (Abort user request on going)
|
||||
* 10 : Timeout
|
||||
* 11 : Error
|
||||
* b5 Peripheral initialization status
|
||||
* 0 : Reset (Peripheral not initialized)
|
||||
* 1 : Init done (Peripheral initialized and ready to use. HAL I2C Init function called)
|
||||
* b4 (not used)
|
||||
* x : Should be set to 0
|
||||
* b3
|
||||
* 0 : Ready or Busy (No Listen mode ongoing)
|
||||
* 1 : Listen (Peripheral in Address Listen Mode)
|
||||
* b2 Intrinsic process state
|
||||
* 0 : Ready
|
||||
* 1 : Busy (Peripheral busy with some configuration or internal operations)
|
||||
* b1 Rx state
|
||||
* 0 : Ready (no Rx operation ongoing)
|
||||
* 1 : Busy (Rx operation ongoing)
|
||||
* b0 Tx state
|
||||
* 0 : Ready (no Tx operation ongoing)
|
||||
* 1 : Busy (Tx operation ongoing)
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */
|
||||
HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */
|
||||
HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */
|
||||
HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */
|
||||
HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */
|
||||
HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */
|
||||
HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission
|
||||
process is ongoing */
|
||||
HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception
|
||||
process is ongoing */
|
||||
HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */
|
||||
HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */
|
||||
HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */
|
||||
|
||||
} HAL_I2C_StateTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup HAL_mode_structure_definition HAL mode structure definition
|
||||
* @brief HAL Mode structure definition
|
||||
* @note HAL I2C Mode value coding follow below described bitmap :\n
|
||||
* b7 (not used)\n
|
||||
* x : Should be set to 0\n
|
||||
* b6\n
|
||||
* 0 : None\n
|
||||
* 1 : Memory (HAL I2C communication is in Memory Mode)\n
|
||||
* b5\n
|
||||
* 0 : None\n
|
||||
* 1 : Slave (HAL I2C communication is in Slave Mode)\n
|
||||
* b4\n
|
||||
* 0 : None\n
|
||||
* 1 : Master (HAL I2C communication is in Master Mode)\n
|
||||
* b3-b2-b1-b0 (not used)\n
|
||||
* xxxx : Should be set to 0000
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */
|
||||
HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */
|
||||
HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */
|
||||
HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */
|
||||
|
||||
} HAL_I2C_ModeTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_Error_Code_definition I2C Error Code definition
|
||||
* @brief I2C Error Code definition
|
||||
* @{
|
||||
*/
|
||||
#define HAL_I2C_ERROR_NONE 0x00000000U /*!< No error */
|
||||
#define HAL_I2C_ERROR_BERR 0x00000001U /*!< BERR error */
|
||||
#define HAL_I2C_ERROR_ARLO 0x00000002U /*!< ARLO error */
|
||||
#define HAL_I2C_ERROR_AF 0x00000004U /*!< AF error */
|
||||
#define HAL_I2C_ERROR_OVR 0x00000008U /*!< OVR error */
|
||||
#define HAL_I2C_ERROR_DMA 0x00000010U /*!< DMA transfer error */
|
||||
#define HAL_I2C_ERROR_TIMEOUT 0x00000020U /*!< Timeout Error */
|
||||
#define HAL_I2C_ERROR_SIZE 0x00000040U /*!< Size Management error */
|
||||
#define HAL_I2C_ERROR_DMA_PARAM 0x00000080U /*!< DMA Parameter Error */
|
||||
#define HAL_I2C_WRONG_START 0x00000200U /*!< Wrong start Error */
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
#define HAL_I2C_ERROR_INVALID_CALLBACK 0x00000100U /*!< Invalid Callback error */
|
||||
#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition
|
||||
* @brief I2C handle Structure definition
|
||||
* @{
|
||||
*/
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
typedef struct __I2C_HandleTypeDef
|
||||
#else
|
||||
typedef struct
|
||||
#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
|
||||
{
|
||||
I2C_TypeDef *Instance; /*!< I2C registers base address */
|
||||
|
||||
I2C_InitTypeDef Init; /*!< I2C communication parameters */
|
||||
|
||||
uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */
|
||||
|
||||
uint16_t XferSize; /*!< I2C transfer size */
|
||||
|
||||
__IO uint16_t XferCount; /*!< I2C transfer counter */
|
||||
|
||||
__IO uint32_t XferOptions; /*!< I2C transfer options */
|
||||
|
||||
__IO uint32_t PreviousState; /*!< I2C communication Previous state and mode
|
||||
context for internal usage */
|
||||
|
||||
DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */
|
||||
|
||||
DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */
|
||||
|
||||
HAL_LockTypeDef Lock; /*!< I2C locking object */
|
||||
|
||||
__IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */
|
||||
|
||||
__IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */
|
||||
|
||||
__IO uint32_t ErrorCode; /*!< I2C Error code */
|
||||
|
||||
__IO uint32_t Devaddress; /*!< I2C Target device address */
|
||||
|
||||
__IO uint32_t Memaddress; /*!< I2C Target memory address */
|
||||
|
||||
__IO uint32_t MemaddSize; /*!< I2C Target memory address size */
|
||||
|
||||
__IO uint32_t EventCount; /*!< I2C Event counter */
|
||||
|
||||
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Master Tx Transfer completed callback */
|
||||
void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Master Rx Transfer completed callback */
|
||||
void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Slave Tx Transfer completed callback */
|
||||
void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Slave Rx Transfer completed callback */
|
||||
void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Listen Complete callback */
|
||||
void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Memory Tx Transfer completed callback */
|
||||
void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Memory Rx Transfer completed callback */
|
||||
void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Error callback */
|
||||
void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Abort callback */
|
||||
|
||||
void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*!< I2C Slave Address Match callback */
|
||||
|
||||
void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Msp Init callback */
|
||||
void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Msp DeInit callback */
|
||||
|
||||
#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
|
||||
} I2C_HandleTypeDef;
|
||||
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
/**
|
||||
* @brief HAL I2C Callback ID enumeration definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_I2C_MASTER_TX_COMPLETE_CB_ID = 0x00U, /*!< I2C Master Tx Transfer completed callback ID */
|
||||
HAL_I2C_MASTER_RX_COMPLETE_CB_ID = 0x01U, /*!< I2C Master Rx Transfer completed callback ID */
|
||||
HAL_I2C_SLAVE_TX_COMPLETE_CB_ID = 0x02U, /*!< I2C Slave Tx Transfer completed callback ID */
|
||||
HAL_I2C_SLAVE_RX_COMPLETE_CB_ID = 0x03U, /*!< I2C Slave Rx Transfer completed callback ID */
|
||||
HAL_I2C_LISTEN_COMPLETE_CB_ID = 0x04U, /*!< I2C Listen Complete callback ID */
|
||||
HAL_I2C_MEM_TX_COMPLETE_CB_ID = 0x05U, /*!< I2C Memory Tx Transfer callback ID */
|
||||
HAL_I2C_MEM_RX_COMPLETE_CB_ID = 0x06U, /*!< I2C Memory Rx Transfer completed callback ID */
|
||||
HAL_I2C_ERROR_CB_ID = 0x07U, /*!< I2C Error callback ID */
|
||||
HAL_I2C_ABORT_CB_ID = 0x08U, /*!< I2C Abort callback ID */
|
||||
|
||||
HAL_I2C_MSPINIT_CB_ID = 0x09U, /*!< I2C Msp Init callback ID */
|
||||
HAL_I2C_MSPDEINIT_CB_ID = 0x0AU /*!< I2C Msp DeInit callback ID */
|
||||
|
||||
} HAL_I2C_CallbackIDTypeDef;
|
||||
|
||||
/**
|
||||
* @brief HAL I2C Callback pointer definition
|
||||
*/
|
||||
typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); /*!< pointer to an I2C callback function */
|
||||
typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*!< pointer to an I2C Address Match callback function */
|
||||
|
||||
#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup I2C_Exported_Constants I2C Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_duty_cycle_in_fast_mode I2C duty cycle in fast mode
|
||||
* @{
|
||||
*/
|
||||
#define I2C_DUTYCYCLE_2 0x00000000U
|
||||
#define I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_addressing_mode I2C addressing mode
|
||||
* @{
|
||||
*/
|
||||
#define I2C_ADDRESSINGMODE_7BIT 0x00004000U
|
||||
#define I2C_ADDRESSINGMODE_10BIT (I2C_OAR1_ADDMODE | 0x00004000U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_dual_addressing_mode I2C dual addressing mode
|
||||
* @{
|
||||
*/
|
||||
#define I2C_DUALADDRESS_DISABLE 0x00000000U
|
||||
#define I2C_DUALADDRESS_ENABLE I2C_OAR2_ENDUAL
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_general_call_addressing_mode I2C general call addressing mode
|
||||
* @{
|
||||
*/
|
||||
#define I2C_GENERALCALL_DISABLE 0x00000000U
|
||||
#define I2C_GENERALCALL_ENABLE I2C_CR1_ENGC
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_nostretch_mode I2C nostretch mode
|
||||
* @{
|
||||
*/
|
||||
#define I2C_NOSTRETCH_DISABLE 0x00000000U
|
||||
#define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_Memory_Address_Size I2C Memory Address Size
|
||||
* @{
|
||||
*/
|
||||
#define I2C_MEMADD_SIZE_8BIT 0x00000001U
|
||||
#define I2C_MEMADD_SIZE_16BIT 0x00000010U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_XferDirection_definition I2C XferDirection definition
|
||||
* @{
|
||||
*/
|
||||
#define I2C_DIRECTION_RECEIVE 0x00000000U
|
||||
#define I2C_DIRECTION_TRANSMIT 0x00000001U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_XferOptions_definition I2C XferOptions definition
|
||||
* @{
|
||||
*/
|
||||
#define I2C_FIRST_FRAME 0x00000001U
|
||||
#define I2C_FIRST_AND_NEXT_FRAME 0x00000002U
|
||||
#define I2C_NEXT_FRAME 0x00000004U
|
||||
#define I2C_FIRST_AND_LAST_FRAME 0x00000008U
|
||||
#define I2C_LAST_FRAME_NO_STOP 0x00000010U
|
||||
#define I2C_LAST_FRAME 0x00000020U
|
||||
|
||||
/* List of XferOptions in usage of :
|
||||
* 1- Restart condition in all use cases (direction change or not)
|
||||
*/
|
||||
#define I2C_OTHER_FRAME (0x00AA0000U)
|
||||
#define I2C_OTHER_AND_LAST_FRAME (0xAA000000U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition
|
||||
* @brief I2C Interrupt definition
|
||||
* Elements values convention: 0xXXXXXXXX
|
||||
* - XXXXXXXX : Interrupt control mask
|
||||
* @{
|
||||
*/
|
||||
#define I2C_IT_BUF I2C_CR2_ITBUFEN
|
||||
#define I2C_IT_EVT I2C_CR2_ITEVTEN
|
||||
#define I2C_IT_ERR I2C_CR2_ITERREN
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup I2C_Flag_definition I2C Flag definition
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define I2C_FLAG_OVR 0x00010800U
|
||||
#define I2C_FLAG_AF 0x00010400U
|
||||
#define I2C_FLAG_ARLO 0x00010200U
|
||||
#define I2C_FLAG_BERR 0x00010100U
|
||||
#define I2C_FLAG_TXE 0x00010080U
|
||||
#define I2C_FLAG_RXNE 0x00010040U
|
||||
#define I2C_FLAG_STOPF 0x00010010U
|
||||
#define I2C_FLAG_ADD10 0x00010008U
|
||||
#define I2C_FLAG_BTF 0x00010004U
|
||||
#define I2C_FLAG_ADDR 0x00010002U
|
||||
#define I2C_FLAG_SB 0x00010001U
|
||||
#define I2C_FLAG_DUALF 0x00100080U
|
||||
#define I2C_FLAG_GENCALL 0x00100010U
|
||||
#define I2C_FLAG_TRA 0x00100004U
|
||||
#define I2C_FLAG_BUSY 0x00100002U
|
||||
#define I2C_FLAG_MSL 0x00100001U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
|
||||
/** @defgroup I2C_Exported_Macros I2C Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Reset I2C handle state.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @retval None
|
||||
*/
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
||||
(__HANDLE__)->State = HAL_I2C_STATE_RESET; \
|
||||
(__HANDLE__)->MspInitCallback = NULL; \
|
||||
(__HANDLE__)->MspDeInitCallback = NULL; \
|
||||
} while(0)
|
||||
#else
|
||||
#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
|
||||
#endif
|
||||
|
||||
/** @brief Enable or disable the specified I2C interrupts.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @param __INTERRUPT__ specifies the interrupt source to enable or disable.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg I2C_IT_BUF: Buffer interrupt enable
|
||||
* @arg I2C_IT_EVT: Event interrupt enable
|
||||
* @arg I2C_IT_ERR: Error interrupt enable
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2,(__INTERRUPT__))
|
||||
#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
|
||||
|
||||
/** @brief Checks if the specified I2C interrupt source is enabled or disabled.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @param __INTERRUPT__ specifies the I2C interrupt source to check.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg I2C_IT_BUF: Buffer interrupt enable
|
||||
* @arg I2C_IT_EVT: Event interrupt enable
|
||||
* @arg I2C_IT_ERR: Error interrupt enable
|
||||
* @retval The new state of __INTERRUPT__ (TRUE or FALSE).
|
||||
*/
|
||||
#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
|
||||
|
||||
/** @brief Checks whether the specified I2C flag is set or not.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @param __FLAG__ specifies the flag to check.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg I2C_FLAG_OVR: Overrun/Underrun flag
|
||||
* @arg I2C_FLAG_AF: Acknowledge failure flag
|
||||
* @arg I2C_FLAG_ARLO: Arbitration lost flag
|
||||
* @arg I2C_FLAG_BERR: Bus error flag
|
||||
* @arg I2C_FLAG_TXE: Data register empty flag
|
||||
* @arg I2C_FLAG_RXNE: Data register not empty flag
|
||||
* @arg I2C_FLAG_STOPF: Stop detection flag
|
||||
* @arg I2C_FLAG_ADD10: 10-bit header sent flag
|
||||
* @arg I2C_FLAG_BTF: Byte transfer finished flag
|
||||
* @arg I2C_FLAG_ADDR: Address sent flag
|
||||
* Address matched flag
|
||||
* @arg I2C_FLAG_SB: Start bit flag
|
||||
* @arg I2C_FLAG_DUALF: Dual flag
|
||||
* @arg I2C_FLAG_GENCALL: General call header flag
|
||||
* @arg I2C_FLAG_TRA: Transmitter/Receiver flag
|
||||
* @arg I2C_FLAG_BUSY: Bus busy flag
|
||||
* @arg I2C_FLAG_MSL: Master/Slave flag
|
||||
* @retval The new state of __FLAG__ (TRUE or FALSE).
|
||||
*/
|
||||
#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16U)) == 0x01U) ? \
|
||||
(((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET) : \
|
||||
(((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET))
|
||||
|
||||
/** @brief Clears the I2C pending flags which are cleared by writing 0 in a specific bit.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @param __FLAG__ specifies the flag to clear.
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode)
|
||||
* @arg I2C_FLAG_AF: Acknowledge failure flag
|
||||
* @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode)
|
||||
* @arg I2C_FLAG_BERR: Bus error flag
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR1 = ~((__FLAG__) & I2C_FLAG_MASK))
|
||||
|
||||
/** @brief Clears the I2C ADDR pending flag.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) \
|
||||
do{ \
|
||||
__IO uint32_t tmpreg = 0x00U; \
|
||||
tmpreg = (__HANDLE__)->Instance->SR1; \
|
||||
tmpreg = (__HANDLE__)->Instance->SR2; \
|
||||
UNUSED(tmpreg); \
|
||||
} while(0)
|
||||
|
||||
/** @brief Clears the I2C STOPF pending flag.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__) \
|
||||
do{ \
|
||||
__IO uint32_t tmpreg = 0x00U; \
|
||||
tmpreg = (__HANDLE__)->Instance->SR1; \
|
||||
SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE); \
|
||||
UNUSED(tmpreg); \
|
||||
} while(0)
|
||||
|
||||
/** @brief Enable the specified I2C peripheral.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)
|
||||
|
||||
/** @brief Disable the specified I2C peripheral.
|
||||
* @param __HANDLE__ specifies the I2C Handle.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_I2C_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @addtogroup I2C_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions
|
||||
* @{
|
||||
*/
|
||||
/* Initialization and de-initialization functions******************************/
|
||||
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
|
||||
HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
|
||||
|
||||
/* Callbacks Register/UnRegister functions ***********************************/
|
||||
#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
|
||||
HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback);
|
||||
HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID);
|
||||
|
||||
HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback);
|
||||
HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c);
|
||||
#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions
|
||||
* @{
|
||||
*/
|
||||
/* IO operation functions ****************************************************/
|
||||
/******* Blocking mode: Polling */
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);
|
||||
|
||||
/******* Non-Blocking mode: Interrupt */
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);
|
||||
HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);
|
||||
|
||||
/******* Non-Blocking mode: DMA */
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks
|
||||
* @{
|
||||
*/
|
||||
/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */
|
||||
void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);
|
||||
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions
|
||||
* @{
|
||||
*/
|
||||
/* Peripheral State, Mode and Error functions *********************************/
|
||||
HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);
|
||||
HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c);
|
||||
uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/** @defgroup I2C_Private_Constants I2C Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define I2C_FLAG_MASK 0x0000FFFFU
|
||||
#define I2C_MIN_PCLK_FREQ_STANDARD 2000000U /*!< 2 MHz */
|
||||
#define I2C_MIN_PCLK_FREQ_FAST 4000000U /*!< 4 MHz */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup I2C_Private_Macros I2C Private Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define I2C_MIN_PCLK_FREQ(__PCLK__, __SPEED__) (((__SPEED__) <= 100000U) ? ((__PCLK__) < I2C_MIN_PCLK_FREQ_STANDARD) : ((__PCLK__) < I2C_MIN_PCLK_FREQ_FAST))
|
||||
#define I2C_CCR_CALCULATION(__PCLK__, __SPEED__, __COEFF__) (((((__PCLK__) - 1U)/((__SPEED__) * (__COEFF__))) + 1U) & I2C_CCR_CCR)
|
||||
#define I2C_FREQRANGE(__PCLK__) ((__PCLK__)/1000000U)
|
||||
#define I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (((__SPEED__) <= 100000U) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U))
|
||||
#define I2C_SPEED_STANDARD(__PCLK__, __SPEED__) ((I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U) < 4U)? 4U:I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U))
|
||||
#define I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 3U) : (I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 25U) | I2C_DUTYCYCLE_16_9))
|
||||
#define I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__SPEED__) <= 100000U)? (I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \
|
||||
((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0U)? 1U : \
|
||||
((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS))
|
||||
|
||||
#define I2C_7BIT_ADD_WRITE(__ADDRESS__) ((uint8_t)((__ADDRESS__) & (uint8_t)(~I2C_OAR1_ADD0)))
|
||||
#define I2C_7BIT_ADD_READ(__ADDRESS__) ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0))
|
||||
|
||||
#define I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)0x00FF)))
|
||||
#define I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0x0300)) >> 7) | (uint16_t)0x00F0)))
|
||||
#define I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0x0300)) >> 7) | (uint16_t)(0x00F1))))
|
||||
|
||||
#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0xFF00)) >> 8)))
|
||||
#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)0x00FF)))
|
||||
|
||||
/** @defgroup I2C_IS_RTC_Definitions I2C Private macros to check input parameters
|
||||
* @{
|
||||
*/
|
||||
#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \
|
||||
((CYCLE) == I2C_DUTYCYCLE_16_9))
|
||||
#define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \
|
||||
((ADDRESS) == I2C_ADDRESSINGMODE_10BIT))
|
||||
#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \
|
||||
((ADDRESS) == I2C_DUALADDRESS_ENABLE))
|
||||
#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \
|
||||
((CALL) == I2C_GENERALCALL_ENABLE))
|
||||
#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \
|
||||
((STRETCH) == I2C_NOSTRETCH_ENABLE))
|
||||
#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
|
||||
((SIZE) == I2C_MEMADD_SIZE_16BIT))
|
||||
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0U) && ((SPEED) <= 400000U))
|
||||
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & 0xFFFFFC00U) == 0U)
|
||||
#define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & 0xFFFFFF01U) == 0U)
|
||||
#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \
|
||||
((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \
|
||||
((REQUEST) == I2C_NEXT_FRAME) || \
|
||||
((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \
|
||||
((REQUEST) == I2C_LAST_FRAME) || \
|
||||
((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \
|
||||
IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST))
|
||||
|
||||
#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \
|
||||
((REQUEST) == I2C_OTHER_AND_LAST_FRAME))
|
||||
|
||||
#define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET)
|
||||
#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/** @defgroup I2C_Private_Functions I2C Private Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __STM32F1xx_HAL_I2C_H */
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -12,7 +12,7 @@
|
|||
<lExt>*.lib</lExt>
|
||||
<tExt>*.txt; *.h; *.inc; *.md</tExt>
|
||||
<pExt>*.plm</pExt>
|
||||
<CppX>*.cpp</CppX>
|
||||
<CppX>*.cpp; *.cc; *.cxx</CppX>
|
||||
<nMigrate>0</nMigrate>
|
||||
</Extensions>
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
|||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>1</tRfunc>
|
||||
<tRfunc>0</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
|
@ -135,7 +135,7 @@
|
|||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>CMSIS_AGDI</Key>
|
||||
<Name>-X"CMSIS-DAP_LU" -ULU_2022_8888 -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
<Name>-X"CMSIS-DAP_LU" -ULU_2022_8888 -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
|
@ -147,35 +147,14 @@
|
|||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>34</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134226582</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\Peripheral\Src\bluetooth.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\CAR\../Peripheral/Src/bluetooth.c\34</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>32</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134221102</Address>
|
||||
<Address>134222756</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
|
@ -187,36 +166,52 @@
|
|||
<Expression>\\CAR\../Peripheral/Src/control.c\32</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>2</Number>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>24</LineNumber>
|
||||
<LineNumber>15</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<Address>134222672</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\Peripheral\Src\bluetooth.c</Filename>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\Peripheral\Src\buzzer.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
<Expression>\\CAR\../Peripheral/Src/buzzer.c\15</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>2</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>135</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134239198</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\Service\Src\timer.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\CAR\../Service/Src/timer.c\135</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>3</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>99</LineNumber>
|
||||
<LineNumber>145</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<Address>134239330</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>../Core/Src/main.c</Filename>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\Service\Src\timer.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
<Expression>\\CAR\../Service/Src/timer.c\145</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>4</Number>
|
||||
|
@ -230,7 +225,23 @@
|
|||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>../Core/Src/main.c</Filename>
|
||||
<Filename>startup_stm32f103xb.s</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>5</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>99</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>startup_stm32f103xb.s</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
|
@ -263,7 +274,7 @@
|
|||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<periodic>0</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
|
@ -282,7 +293,7 @@
|
|||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>1</StkLoc>
|
||||
<StkLoc>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
|
@ -332,7 +343,7 @@
|
|||
|
||||
<Group>
|
||||
<GroupName>Application/User/App</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
@ -364,7 +375,7 @@
|
|||
|
||||
<Group>
|
||||
<GroupName>Application/User/Core</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
@ -384,7 +395,7 @@
|
|||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/main.c</PathWithFileName>
|
||||
|
@ -423,18 +434,6 @@
|
|||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/i2c.c</PathWithFileName>
|
||||
<FilenameWithoutPath>i2c.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/tim.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tim.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
@ -442,7 +441,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -454,7 +453,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -466,7 +465,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -476,6 +475,62 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Src\delay.c</PathWithFileName>
|
||||
<FilenameWithoutPath>delay.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Application/User/Service</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Service\Src\path_plan.c</PathWithFileName>
|
||||
<FilenameWithoutPath>path_plan.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Service\Src\timer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>timer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Service\Src\block_detect.c</PathWithFileName>
|
||||
<FilenameWithoutPath>block_detect.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -485,8 +540,8 @@
|
|||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -497,8 +552,20 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Peripheral\Src\buzzer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>buzzer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -509,8 +576,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -521,8 +588,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -533,8 +600,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -545,8 +612,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -557,8 +624,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -569,8 +636,8 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -580,6 +647,18 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Peripheral\Src\syn6288.c</PathWithFileName>
|
||||
<FilenameWithoutPath>syn6288.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -589,8 +668,8 @@
|
|||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -601,152 +680,20 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_i2c.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_gpio.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_dma.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_cortex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_pwr.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_exti.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_tim.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -757,12 +704,132 @@
|
|||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_gpio.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_dma.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_cortex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_pwr.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_exti.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_uart.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
@ -772,13 +839,13 @@
|
|||
|
||||
<Group>
|
||||
<GroupName>Drivers/CMSIS</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
<TargetName>CAR</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
|
||||
<uAC6>1</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F103C8</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F1xx_DFP.2.4.1</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -81,7 +81,7 @@
|
|||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<RunUserProg2>1</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
|
@ -137,7 +137,7 @@
|
|||
<DriverSelection>4101</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>BIN\UL2V8M.DLL</Flash2>
|
||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||
<Flash3>"" ()</Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
|
@ -313,7 +313,7 @@
|
|||
</ArmAdsMisc>
|
||||
<Cads>
|
||||
<interw>1</interw>
|
||||
<Optim>4</Optim>
|
||||
<Optim>1</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
|
@ -322,13 +322,13 @@
|
|||
<PlainCh>0</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>2</wLevel>
|
||||
<wLevel>3</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
<uGnu>0</uGnu>
|
||||
<useXO>0</useXO>
|
||||
<v6Lang>5</v6Lang>
|
||||
<v6Lang>3</v6Lang>
|
||||
<v6LangP>3</v6LangP>
|
||||
<vShortEn>1</vShortEn>
|
||||
<vShortWch>1</vShortWch>
|
||||
|
@ -339,7 +339,7 @@
|
|||
<MiscControls></MiscControls>
|
||||
<Define>USE_HAL_DRIVER,STM32F103xB</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>../App/Inc;../Core/Inc;../Peripheral/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include</IncludePath>
|
||||
<IncludePath>../App/Inc;../Core/Inc;../Service/Inc;../Peripheral/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
|
@ -428,11 +428,6 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/dma.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>i2c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
@ -453,6 +448,31 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/stm32f1xx_hal_msp.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>delay.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Src\delay.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Application/User/Service</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>path_plan.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Service\Src\path_plan.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>timer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Service\Src\timer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>block_detect.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Service\Src\block_detect.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
@ -463,6 +483,11 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Peripheral\Src\bluetooth.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>buzzer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Peripheral\Src\buzzer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>control.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
@ -498,6 +523,11 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Peripheral\Src\servo.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>syn6288.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Peripheral\Src\syn6288.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
@ -509,9 +539,14 @@
|
|||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_i2c.c</FileName>
|
||||
<FileName>stm32f1xx_hal_tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</FilePath>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_tim_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal.c</FileName>
|
||||
|
@ -563,16 +598,6 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_tim_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_uart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
|
15
Makefile
15
Makefile
|
@ -1,5 +1,5 @@
|
|||
##########################################################################################################################
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Wed Jul 17 21:44:09 CST 2024]
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Fri Jul 19 12:38:57 CST 2024]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
|
@ -38,15 +38,14 @@ BUILD_DIR = build
|
|||
C_SOURCES = \
|
||||
Core/Src/main.c \
|
||||
Core/Src/gpio.c \
|
||||
Core/Src/i2c.c \
|
||||
Core/Src/syscalls.c \
|
||||
Core/Src/tim.c \
|
||||
Core/Src/dma.c \
|
||||
Core/Src/usart.c \
|
||||
Core/Src/stm32f1xx_it.c \
|
||||
Core/Src/stm32f1xx_hal_msp.c \
|
||||
Core/Src/delay.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \
|
||||
|
@ -68,11 +67,16 @@ Peripheral/Src/led.c \
|
|||
Peripheral/Src/bluetooth.c \
|
||||
Peripheral/Src/control.c \
|
||||
Peripheral/Src/line_seek.c \
|
||||
Peripheral/Src/path_plan.c \
|
||||
Peripheral/Src/servo.c \
|
||||
Peripheral/Src/infrared.c \
|
||||
Peripheral/Src/syn6288.c \
|
||||
Peripheral/Src/buzzer.c \
|
||||
App/Src/app_line_seek.c \
|
||||
App/Src/app_ultrasonic.c
|
||||
App/Src/app_ultrasonic.c \
|
||||
App/Src/app_bus.c \
|
||||
Service/Src/path_plan.c \
|
||||
Service/Src/timer.c \
|
||||
Service/Src/block_detect.c
|
||||
|
||||
|
||||
# ASM sources
|
||||
|
@ -134,6 +138,7 @@ AS_INCLUDES =
|
|||
# C includes
|
||||
C_INCLUDES = \
|
||||
-ICore/Inc \
|
||||
-IService/Inc \
|
||||
-IPeripheral/Inc \
|
||||
-IApp/Inc \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc \
|
||||
|
|
|
@ -4,5 +4,6 @@
|
|||
#include "main.h"
|
||||
|
||||
void BLUETOOTH_Init(void);
|
||||
void BLUETOOTH_Send(const char *str, ...);
|
||||
|
||||
#endif
|
||||
|
|
15
Peripheral/Inc/buzzer.h
Normal file
15
Peripheral/Inc/buzzer.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef __BUZZER_H
|
||||
#define __BUZZER_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
extern int timed_beep_event_id;
|
||||
extern int times_beep_event_id;
|
||||
|
||||
void BUZZER_Start();
|
||||
void BUZZER_Stop();
|
||||
|
||||
void BUZZER_StartTimed(uint16_t time);
|
||||
void BUZZER_StartNTimes(uint8_t n, uint16_t on_time, uint16_t off_time);
|
||||
|
||||
#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);
|
||||
|
||||
|
|
|
@ -11,6 +11,10 @@
|
|||
void LED_Start(uint8_t led);
|
||||
void LED_Stop(uint8_t led);
|
||||
|
||||
|
||||
void LED_StartTimed(uint8_t led, uint16_t time);
|
||||
void LED_StartNTimes(uint8_t led, uint16_t on_time, uint16_t off_time);
|
||||
|
||||
// duty in [0, 255]
|
||||
void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
|
|
|
@ -7,4 +7,4 @@ void LineSeek_GetStatus(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2);
|
|||
char *LineSeek_GetStatusStr();
|
||||
int LineSeek_Equals(const char *expression);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
9
Peripheral/Inc/syn6288.h
Normal file
9
Peripheral/Inc/syn6288.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef __SYN6288_H
|
||||
#define __SYN6288_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata);
|
||||
void YS_SYN_Set(uint8_t *Info_data);
|
||||
|
||||
#endif
|
|
@ -1,33 +1,52 @@
|
|||
#include "bluetooth.h"
|
||||
#include "usart.h"
|
||||
#include "control.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "syscalls.h"
|
||||
|
||||
#define BUFFER_SIZE 100
|
||||
#include "control.h"
|
||||
#include "hcsr04.h"
|
||||
#include "infrared.h"
|
||||
#include "line_seek.h"
|
||||
#include "timer.h"
|
||||
#include "usart.h"
|
||||
|
||||
#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;
|
||||
static uint8_t timer_event_id = -1;
|
||||
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_event_id = TIMER_AddInfiniteLoopEvent(timer_event_id, sendSensor, 1);
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
|
@ -60,28 +79,21 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
|||
else if (mode == MODE_REMOTE)
|
||||
switch (rxBuffer[5])
|
||||
{
|
||||
// 机械手
|
||||
case 'S':
|
||||
break;
|
||||
// 舵机云台
|
||||
case 'P':
|
||||
break;
|
||||
// 七彩灯
|
||||
case 'C':
|
||||
sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2);
|
||||
CONTROL_RGB(num[0], num[1], num[2]);
|
||||
break;
|
||||
// 机械手
|
||||
case 'S':
|
||||
break;
|
||||
// 舵机云台
|
||||
case 'P':
|
||||
sscanf(rxBuffer + 5, "%*3s%hu", num);
|
||||
CONTROL_Servo(180 - num[0]);
|
||||
break;
|
||||
// 七彩灯
|
||||
case 'C':
|
||||
sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2);
|
||||
CONTROL_RGB(num[0], num[1], num[2]);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
32
Peripheral/Src/buzzer.c
Normal file
32
Peripheral/Src/buzzer.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
#include "buzzer.h"
|
||||
|
||||
#include "timer.h"
|
||||
|
||||
int timed_beep_event_id = -1;
|
||||
int times_beep_event_id = -1;
|
||||
|
||||
inline void BUZZER_Start()
|
||||
{
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
inline void BUZZER_Stop()
|
||||
{
|
||||
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
/// @brief 启动蜂鸣器鸣叫
|
||||
/// @param time 鸣叫时间,单位1毫秒
|
||||
void BUZZER_StartTimed(uint16_t time)
|
||||
{
|
||||
BUZZER_Start();
|
||||
timed_beep_event_id = TIMER_AddDelayEvent(timed_beep_event_id, BUZZER_Stop, time);
|
||||
}
|
||||
|
||||
/// @brief 启动蜂鸣器鸣叫n次,每次叫on_time毫秒,停off_time毫秒
|
||||
/// @param on_time 鸣叫时间,单位1毫秒
|
||||
/// @param off_time 停止鸣叫时间,单位1毫秒
|
||||
void BUZZER_StartNTimes(uint8_t n, uint16_t on_time, uint16_t off_time)
|
||||
{
|
||||
times_beep_event_id = TIMER_AddFiniteLoopEventWithParam(times_beep_event_id, BUZZER_StartTimed, on_time + off_time, n, on_time);
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
#include "hcsr04.h"
|
||||
#include "tim.h"
|
||||
#include "syscalls.h"
|
||||
|
||||
static uint64_t time_start; // 声明变量,用来计时
|
||||
static uint64_t time_end; // 声明变量,存储回波信号时间
|
||||
uint8_t sonor_state; // 测距状态变量,0:未测量,1:正在测量,2:已测量
|
||||
uint32_t sonor_distance; // 测量出的距离,单位mm
|
||||
#include "syscalls.h"
|
||||
#include "delay.h"
|
||||
#include "tim.h"
|
||||
|
||||
static uint64_t time_start; // 声明变量,用来计时
|
||||
static uint64_t time_end; // 声明变量,存储回波信号时间
|
||||
uint8_t sonor_state; // 测距状态变量,0:未测量,1:正在测量,2:已测量
|
||||
uint32_t sonor_distance = INT32_MAX; // 测量出的距离,单位mm
|
||||
|
||||
void HCSR04_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
|
||||
|
||||
|
@ -18,6 +20,8 @@ void HC_SR04_Init(void)
|
|||
|
||||
// 注册定时器中断溢出回调
|
||||
HAL_TIM_RegisterCallback(&htim2, HAL_TIM_PERIOD_ELAPSED_CB_ID, HCSR04_HAL_TIM_PeriodElapsedCallback);
|
||||
|
||||
sonor_distance = INT32_MAX;
|
||||
}
|
||||
|
||||
// 启动测距,单位:mm
|
||||
|
@ -27,11 +31,7 @@ uint32_t sonar_mm(void)
|
|||
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET); // 输出高电平
|
||||
delay_us(15); // 延时15微秒
|
||||
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET); // 输出低电平
|
||||
if (time_end / 100 < 38)
|
||||
{ // 判断是否小于38毫秒,大于38毫秒的就是超时,直接调到下面返回0
|
||||
sonor_distance = (time_end * 346) / 2; // 计算距离,25°C空气中的音速为346m/s
|
||||
sonor_distance = sonor_distance / 100; // 因为上面的time_end的单位是10微秒,所以要得出单位为毫米的距离结果,还得除以100
|
||||
}
|
||||
|
||||
return sonor_distance;
|
||||
}
|
||||
|
||||
|
@ -58,14 +58,15 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
|||
time_end = time_start;
|
||||
HAL_TIM_Base_Stop_IT(&htim2);
|
||||
sonor_state = 2;
|
||||
sonor_distance = (time_end / 100 < 38) ? (time_end * 346) / 200 : INT32_MAX;
|
||||
Sonar_CP_Callback();
|
||||
sonor_state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 测距完毕回调,执行完自定义任务后将sonor_state置0
|
||||
// 测距完毕回调,执行完自定义任务后会将sonor_state置0
|
||||
__attribute__((weak)) void Sonar_CP_Callback()
|
||||
{
|
||||
my_printf(HUART2, "distance = %d (mm)\n", sonor_distance);
|
||||
sonor_state = 0;
|
||||
}
|
||||
|
|
|
@ -1,34 +1,49 @@
|
|||
#include "led.h"
|
||||
|
||||
#include "tim.h"
|
||||
#include "timer.h"
|
||||
|
||||
#define LED_TIM (&htim3)
|
||||
#define LED_R_CHAN TIM_CHANNEL_4
|
||||
#define LED_G_CHAN TIM_CHANNEL_3
|
||||
#define LED_B_CHAN TIM_CHANNEL_2
|
||||
|
||||
static led_timed_id = -1;
|
||||
static led_times_id = -1;
|
||||
|
||||
void LED_Start(uint8_t led)
|
||||
{
|
||||
if (led & LED_R)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_R_CHAN);
|
||||
if (led & LED_G)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_G_CHAN);
|
||||
if (led & LED_B)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_B_CHAN);
|
||||
if (led & LED_R)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_R_CHAN);
|
||||
if (led & LED_G)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_G_CHAN);
|
||||
if (led & LED_B)
|
||||
HAL_TIM_PWM_Start(LED_TIM, LED_B_CHAN);
|
||||
}
|
||||
|
||||
void LED_Stop(uint8_t led)
|
||||
{
|
||||
if (led & LED_R)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_R_CHAN);
|
||||
if (led & LED_G)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_G_CHAN);
|
||||
if (led & LED_B)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_B_CHAN);
|
||||
if (led & LED_R)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_R_CHAN);
|
||||
if (led & LED_G)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_G_CHAN);
|
||||
if (led & LED_B)
|
||||
HAL_TIM_PWM_Stop(LED_TIM, LED_B_CHAN);
|
||||
}
|
||||
|
||||
void LED_StartTimed(uint8_t led, uint16_t time)
|
||||
{
|
||||
led_timed_id = TIMER_AddDelayEvent(led_timed_id, LED_Stop, time);
|
||||
}
|
||||
|
||||
void LED_StartNTimes(uint8_t led, uint16_t on_time, uint16_t off_time)
|
||||
{
|
||||
// led_times_id = TIMER_AddFiniteLoopEvent(led_times_id, LED_Stop, time);
|
||||
}
|
||||
|
||||
void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_R_CHAN, r);
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_G_CHAN, g);
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_B_CHAN, b);
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_R_CHAN, r);
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_G_CHAN, g);
|
||||
__HAL_TIM_SetCompare(LED_TIM, LED_B_CHAN, b);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "line_seek.h"
|
||||
|
||||
#include "main.h"
|
||||
#include <stdio.h>
|
||||
|
||||
char LineSeek_Status[5];
|
||||
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
|
||||
#include "path_plan.h"
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
// 全局路径规划器
|
||||
PathPlanner pathPlanner;
|
||||
|
||||
// 初始化路径规划器
|
||||
void PathPlanner_Init()
|
||||
{
|
||||
pathPlanner.currentStep = -1;
|
||||
pathPlanner.path = NULL;
|
||||
pathPlanner.pathLength = 0;
|
||||
SetPath();
|
||||
}
|
||||
|
||||
// 设置自定义路径
|
||||
void SetPath()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 100; i++)
|
||||
{
|
||||
AddPathStep(LEFT);
|
||||
AddPathStep(RIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前方向
|
||||
Direction GetCurrentDirection()
|
||||
{
|
||||
return pathPlanner.path[pathPlanner.currentStep];
|
||||
}
|
||||
|
||||
// 获取下一步方向
|
||||
Direction GetNextDirection()
|
||||
{
|
||||
if (pathPlanner.currentStep >= pathPlanner.pathLength)
|
||||
{
|
||||
pathPlanner.currentStep = -1;
|
||||
}
|
||||
return pathPlanner.path[++pathPlanner.currentStep];
|
||||
}
|
||||
|
||||
// 添加路径
|
||||
void AddPathStep(Direction step)
|
||||
{
|
||||
pathPlanner.path = realloc(pathPlanner.path, ++pathPlanner.pathLength * sizeof(Direction));
|
||||
pathPlanner.path[pathPlanner.pathLength - 1] = step;
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
void SERVO_Init()
|
||||
{
|
||||
__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_4, 150);
|
||||
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
|
||||
}
|
||||
|
||||
|
|
58
Peripheral/Src/syn6288.c
Normal file
58
Peripheral/Src/syn6288.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "syn6288.h"
|
||||
#include "usart.h"
|
||||
#include "string.h"
|
||||
|
||||
uint8_t SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
|
||||
uint8_t SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
|
||||
uint8_t SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
|
||||
uint8_t SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
|
||||
uint8_t SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN状态命令
|
||||
|
||||
//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
|
||||
void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata)
|
||||
{
|
||||
/****************需要发送的文本**********************************/
|
||||
unsigned char Frame_Info[50];
|
||||
unsigned char HZ_Length;
|
||||
unsigned char ecc = 0; //定义校验字节
|
||||
unsigned int i = 0;
|
||||
HZ_Length = strlen((char*)HZdata); //需要发送文本的长度
|
||||
|
||||
/*****************帧固定配置信息**************************************/
|
||||
Frame_Info[0] = 0xFD ; //构造帧头FD
|
||||
Frame_Info[1] = 0x00 ; //构造数据区长度的高字节
|
||||
Frame_Info[2] = HZ_Length + 3; //构造数据区长度的低字节
|
||||
Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令
|
||||
Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定
|
||||
|
||||
/*******************校验码计算***************************************/
|
||||
for(i = 0; i < 5; i++) //依次发送构造好的5个帧头字节
|
||||
{
|
||||
ecc = ecc ^ (Frame_Info[i]); //对发送的字节进行异或校验
|
||||
}
|
||||
|
||||
for(i = 0; i < HZ_Length; i++) //依次发送待合成的文本数据
|
||||
{
|
||||
ecc = ecc ^ (HZdata[i]); //对发送的字节进行异或校验
|
||||
}
|
||||
/*******************发送帧信息***************************************/
|
||||
memcpy(&Frame_Info[5], HZdata, HZ_Length);
|
||||
Frame_Info[5 + HZ_Length] = ecc;
|
||||
HAL_UART_Transmit(&huart2,Frame_Info,5 + HZ_Length + 1,10000);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************
|
||||
* 名 称: YS_SYN_Set(u8 *Info_data)
|
||||
* 功 能: 主函数 程序入口
|
||||
* 入口参数: *Info_data:固定的配置信息变量
|
||||
* 出口参数:
|
||||
* 说 明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
|
||||
* 调用方法:通过调用已经定义的相关数组进行配置。
|
||||
**********************************************************/
|
||||
void YS_SYN_Set(uint8_t *Info_data)
|
||||
{
|
||||
uint8_t Com_Len;
|
||||
Com_Len = strlen((char*)Info_data);
|
||||
HAL_UART_Transmit(&huart2,Info_data,Com_Len,10000);
|
||||
}
|
|
@ -36,10 +36,12 @@ BUILD_DIR = build
|
|||
######################################
|
||||
# C sources
|
||||
C_SOURCES = \
|
||||
App/Src/app_bus.c \
|
||||
App/Src/app_line_seek.c \
|
||||
App/Src/app_ultrasonic.c \
|
||||
Core/Src/delay.c \
|
||||
Core/Src/dma.c \
|
||||
Core/Src/gpio.c \
|
||||
Core/Src/i2c.c \
|
||||
Core/Src/main.c \
|
||||
Core/Src/stm32f1xx_hal_msp.c \
|
||||
Core/Src/stm32f1xx_it.c \
|
||||
|
@ -56,20 +58,25 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \
|
|||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \
|
||||
User/Src/bluetooth.c \
|
||||
User/Src/control.c \
|
||||
User/Src/hcsr04.c \
|
||||
User/Src/led.c \
|
||||
User/Src/line_seek.c \
|
||||
User/Src/motor.c \
|
||||
User/Src/path_plan.c
|
||||
Peripheral/Src/bluetooth.c \
|
||||
Peripheral/Src/buzzer.c \
|
||||
Peripheral/Src/control.c \
|
||||
Peripheral/Src/hcsr04.c \
|
||||
Peripheral/Src/infrared.c \
|
||||
Peripheral/Src/led.c \
|
||||
Peripheral/Src/line_seek.c \
|
||||
Peripheral/Src/motor.c \
|
||||
Peripheral/Src/servo.c \
|
||||
Peripheral/Src/syn6288.c \
|
||||
Service/Src/block_detect.c \
|
||||
Service/Src/path_plan.c \
|
||||
Service/Src/timer.c
|
||||
|
||||
|
||||
CPP_SOURCES = \
|
||||
|
@ -147,7 +154,8 @@ C_INCLUDES = \
|
|||
-IDrivers/CMSIS/Include \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \
|
||||
-IUser/Inc
|
||||
-IPeripheral/Inc \
|
||||
-IService/Inc
|
||||
|
||||
|
||||
|
||||
|
|
15
Service/Inc/block_detect.h
Normal file
15
Service/Inc/block_detect.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef __BLOCK_DETECT_H
|
||||
#define __BLOCK_DETECT_H
|
||||
|
||||
// 定义障碍方向枚举
|
||||
typedef enum
|
||||
{
|
||||
FRONT,
|
||||
LEFT_FRONT,
|
||||
RIGHT_FRONT
|
||||
} BlockDirection;
|
||||
|
||||
void BlockDetect_Init();
|
||||
int Has_Block(BlockDirection direction);
|
||||
|
||||
#endif
|
|
@ -6,24 +6,13 @@ typedef enum
|
|||
{
|
||||
STRAIGHT,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
STOP
|
||||
RIGHT
|
||||
} Direction;
|
||||
|
||||
// 定义路径规划器结构
|
||||
typedef struct
|
||||
{
|
||||
int currentStep;
|
||||
Direction* path;
|
||||
int pathLength;
|
||||
} PathPlanner;
|
||||
|
||||
// 全局路径规划器
|
||||
extern PathPlanner pathPlanner;
|
||||
|
||||
void PathPlanner_Init();
|
||||
Direction GetCurrentDirection();
|
||||
Direction GetNextDirection();
|
||||
void AddPathStep(Direction step);
|
||||
void ReplacePathStep(Direction* step, int n);
|
||||
|
||||
#endif
|
15
Service/Inc/timer.h
Normal file
15
Service/Inc/timer.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef __TIMER_H
|
||||
#define __TIMER_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define EVENT_MAX 20
|
||||
|
||||
void TIMER_Init(void);
|
||||
int8_t TIMER_AddInfiniteLoopEvent(int8_t id, void (*func)(void), uint16_t loop_time);
|
||||
int8_t TIMER_AddFiniteLoopEvent(int8_t id, void (*func)(void), uint16_t loop_time, uint16_t loop_cnt);
|
||||
int8_t TIMER_AddFiniteLoopEventWithParam(int8_t event_id, void (*func)(uint16_t param), uint16_t loop_time, uint16_t loop_cnt, uint16_t param);
|
||||
int8_t TIMER_AddDelayEvent(int8_t id, void (*func)(void), uint16_t delay_time);
|
||||
void TIMER_DelLoopEvent(int8_t id);
|
||||
|
||||
#endif
|
64
Service/Src/block_detect.c
Normal file
64
Service/Src/block_detect.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
#include "block_detect.h"
|
||||
|
||||
#include "bluetooth.h"
|
||||
#include "buzzer.h"
|
||||
#include "hcsr04.h"
|
||||
#include "infrared.h"
|
||||
#include "syscalls.h"
|
||||
#include "timer.h"
|
||||
|
||||
int has_block_front;
|
||||
int has_block_left;
|
||||
int has_block_right;
|
||||
static uint8_t timer_event_id = -1;
|
||||
static uint8_t timer_event_id2 = -1;
|
||||
|
||||
void INFRARED_Detect();
|
||||
void Sonar_Detect();
|
||||
|
||||
// 避障检测初始化
|
||||
void BlockDetect_Init()
|
||||
{
|
||||
timer_event_id = TIMER_AddInfiniteLoopEvent(timer_event_id, INFRARED_Detect, 20);
|
||||
timer_event_id2 = TIMER_AddInfiniteLoopEvent(timer_event_id2, Sonar_Detect, 150);
|
||||
}
|
||||
|
||||
// 每20ms红外检测一次障碍物
|
||||
void INFRARED_Detect()
|
||||
{
|
||||
has_block_left = INFRARED_GetL() == INFRARED_MEET;
|
||||
has_block_right = INFRARED_GetR() == INFRARED_MEET;
|
||||
}
|
||||
|
||||
// 每100ms超声波检测一次障碍物
|
||||
void Sonar_Detect()
|
||||
{
|
||||
if (sonor_state == 0) sonar_mm();
|
||||
}
|
||||
|
||||
// 超声波测距完毕回调
|
||||
void Sonar_CP_Callback()
|
||||
{
|
||||
// BLUETOOTH_Send("f: %d, l: %d, r: %d\n sonar distance = %d (mm)\n", has_block_front, has_block_left, has_block_right, sonor_distance);
|
||||
has_block_front = sonor_distance < 200;
|
||||
}
|
||||
|
||||
int Has_Block(BlockDirection direction)
|
||||
{
|
||||
switch (direction)
|
||||
{
|
||||
case FRONT:
|
||||
BUZZER_StartTimed(10);
|
||||
return has_block_front;
|
||||
break;
|
||||
case LEFT_FRONT:
|
||||
BUZZER_StartTimed(2);
|
||||
return has_block_left;
|
||||
break;
|
||||
case RIGHT_FRONT:
|
||||
BUZZER_StartTimed(2);
|
||||
return has_block_right;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
101
Service/Src/path_plan.c
Normal file
101
Service/Src/path_plan.c
Normal file
|
@ -0,0 +1,101 @@
|
|||
|
||||
#include "path_plan.h"
|
||||
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
// 定义路径规划器结构
|
||||
typedef struct
|
||||
{
|
||||
int currentStep;
|
||||
Direction* path;
|
||||
int pathLength;
|
||||
} PathPlanner;
|
||||
|
||||
// 路径规划器
|
||||
static PathPlanner pathPlanner;
|
||||
|
||||
void SetPath();
|
||||
|
||||
// 初始化路径规划器
|
||||
void PathPlanner_Init()
|
||||
{
|
||||
pathPlanner.currentStep = -1;
|
||||
pathPlanner.path = NULL;
|
||||
pathPlanner.pathLength = 0;
|
||||
SetPath();
|
||||
}
|
||||
|
||||
// 设置自定义路径
|
||||
void SetPath()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 100; i++)
|
||||
{
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(RIGHT);
|
||||
AddPathStep(LEFT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(LEFT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(STRAIGHT);
|
||||
AddPathStep(LEFT);
|
||||
AddPathStep(LEFT);
|
||||
AddPathStep(LEFT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(LEFT);
|
||||
// AddPathStep(LEFT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(RIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(LEFT);
|
||||
// AddPathStep(LEFT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
// AddPathStep(STRAIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前方向
|
||||
Direction GetCurrentDirection()
|
||||
{
|
||||
return pathPlanner.path[pathPlanner.currentStep];
|
||||
}
|
||||
|
||||
// 获取下一步方向
|
||||
Direction GetNextDirection()
|
||||
{
|
||||
if (pathPlanner.currentStep >= pathPlanner.pathLength)
|
||||
{
|
||||
pathPlanner.currentStep = -1;
|
||||
}
|
||||
return pathPlanner.path[++pathPlanner.currentStep];
|
||||
}
|
||||
|
||||
// 添加路径
|
||||
void AddPathStep(Direction step)
|
||||
{
|
||||
pathPlanner.path = realloc(pathPlanner.path, ++pathPlanner.pathLength * sizeof(Direction));
|
||||
pathPlanner.path[pathPlanner.pathLength - 1] = step;
|
||||
}
|
||||
|
||||
// 替换接下来的n个路径方向
|
||||
void ReplacePathStep(Direction* step, int n)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
pathPlanner.path[(pathPlanner.currentStep + 1 + i) % pathPlanner.pathLength] = step[i];
|
||||
}
|
||||
}
|
160
Service/Src/timer.c
Normal file
160
Service/Src/timer.c
Normal file
|
@ -0,0 +1,160 @@
|
|||
#include "timer.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tim.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
INFINITE_LOOP_EVENT, // 无限循环事件
|
||||
FINITE_LOOP_EVENT, // 有限循环事件
|
||||
FINITE_LOOP_EVENT_WITH_PARAM,
|
||||
DELAY_EVENT // 延迟事件
|
||||
} EventType;
|
||||
|
||||
typedef struct Event
|
||||
{
|
||||
uint8_t id;
|
||||
void (*func)(void);
|
||||
void (*param_func)(uint16_t);
|
||||
uint16_t time;
|
||||
EventType type;
|
||||
uint8_t enabled;
|
||||
uint16_t loop_cnt;
|
||||
uint32_t begin_time;
|
||||
uint16_t param;
|
||||
} Event;
|
||||
|
||||
static Event event[EVENT_MAX];
|
||||
static int event_cnt;
|
||||
static uint32_t current_time;
|
||||
|
||||
void TIMER_Count(TIM_HandleTypeDef *htim);
|
||||
|
||||
void TIMER_Init(void)
|
||||
{
|
||||
HAL_TIM_RegisterCallback(&htim4, HAL_TIM_PERIOD_ELAPSED_CB_ID, TIMER_Count);
|
||||
HAL_TIM_Base_Start_IT(&htim4);
|
||||
}
|
||||
|
||||
/// @brief 注册无限循环定时回调事件
|
||||
/// @param func 回调函数 void func(void)
|
||||
/// @param loop_time 定时时间,单位毫秒
|
||||
int8_t TIMER_AddInfiniteLoopEvent(int8_t event_id, void (*func)(void), uint16_t loop_time)
|
||||
{
|
||||
if (event_id == -1) event_id = event_cnt++;
|
||||
event[event_id].type = INFINITE_LOOP_EVENT;
|
||||
event[event_id].id = event_id;
|
||||
event[event_id].func = func;
|
||||
event[event_id].time = loop_time;
|
||||
event[event_id].begin_time = current_time;
|
||||
event[event_id].enabled = 1;
|
||||
return event_id;
|
||||
}
|
||||
|
||||
/// @brief 注册有限循环定时回调事件
|
||||
/// @param func 回调函数 void func(void)
|
||||
/// @param loop_time 定时时间,单位毫秒
|
||||
/// @param loop_cnt 循环次数
|
||||
int8_t TIMER_AddFiniteLoopEventWithParam(int8_t event_id, void (*func)(uint16_t param), uint16_t loop_time, uint16_t loop_cnt, uint16_t param)
|
||||
{
|
||||
if (event_id == -1) event_id = event_cnt++;
|
||||
event[event_id].type = FINITE_LOOP_EVENT_WITH_PARAM;
|
||||
event[event_id].id = event_id;
|
||||
event[event_id].param_func = func;
|
||||
event[event_id].time = loop_time;
|
||||
event[event_id].begin_time = current_time;
|
||||
event[event_id].enabled = 1;
|
||||
event[event_id].param = param;
|
||||
event[event_id].loop_cnt = loop_cnt;
|
||||
return event_id;
|
||||
}
|
||||
|
||||
int8_t TIMER_AddFiniteLoopEvent(int8_t event_id, void (*func)(void), uint16_t loop_time, uint16_t loop_cnt)
|
||||
{
|
||||
if (event_id == -1) event_id = event_cnt++;
|
||||
event[event_id].type = FINITE_LOOP_EVENT;
|
||||
event[event_id].id = event_id;
|
||||
event[event_id].func = func;
|
||||
event[event_id].time = loop_time;
|
||||
event[event_id].begin_time = current_time;
|
||||
event[event_id].enabled = 1;
|
||||
event[event_id].loop_cnt = loop_cnt;
|
||||
return event_id;
|
||||
}
|
||||
|
||||
/// @brief 注册延迟定时回调事件(单次)
|
||||
/// @param func 回调函数 void func(void)
|
||||
/// @param loop_time 定时时间,单位毫秒
|
||||
int8_t TIMER_AddDelayEvent(int8_t event_id, void (*func)(void), uint16_t delay_time)
|
||||
{
|
||||
if (event_id == -1) event_id = event_cnt++;
|
||||
event[event_id].type = DELAY_EVENT;
|
||||
event[event_id].id = event_id;
|
||||
event[event_id].func = func;
|
||||
event[event_id].time = delay_time;
|
||||
event[event_id].begin_time = current_time;
|
||||
event[event_id].enabled = 1;
|
||||
return event_id;
|
||||
}
|
||||
|
||||
void TIMER_DelLoopEvent(int8_t id)
|
||||
{
|
||||
event[id].enabled = 0;
|
||||
}
|
||||
|
||||
void TIMER_Count(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
++current_time;
|
||||
for (uint8_t i = 0; i < event_cnt; ++i)
|
||||
{
|
||||
if (event[i].enabled == 0)
|
||||
continue;
|
||||
|
||||
switch (event[i].type)
|
||||
{
|
||||
case INFINITE_LOOP_EVENT: // 无限循环事件
|
||||
if ((current_time - event[i].begin_time) % event[i].time == 0)
|
||||
{
|
||||
event[i].func();
|
||||
}
|
||||
break;
|
||||
case FINITE_LOOP_EVENT: // 有限循环事件
|
||||
if ((current_time - event[i].begin_time) % event[i].time == 0)
|
||||
{
|
||||
event[i].func();
|
||||
if (event[i].loop_cnt-- <= 0)
|
||||
{
|
||||
TIMER_DelLoopEvent(event[i].id);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FINITE_LOOP_EVENT_WITH_PARAM:
|
||||
if ((current_time - event[i].begin_time) % event[i].time == 0)
|
||||
{
|
||||
printf("FINITE_LOOP_EVENT_WITH_PARAM %d, %d, %d\n",
|
||||
current_time, event[i].begin_time, event[i].time);
|
||||
event[i].param_func(event[i].param);
|
||||
if (--event[i].loop_cnt <= 0)
|
||||
{
|
||||
printf("remove FINITE_LOOP_EVENT_WITH_PARAM %d, %d, %d\n",
|
||||
current_time, event[i].begin_time, event[i].time);
|
||||
TIMER_DelLoopEvent(event[i].id);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DELAY_EVENT: // 延迟事件
|
||||
if (current_time > event[i].begin_time &&
|
||||
(current_time - event[i].begin_time) % event[i].time == 0)
|
||||
{
|
||||
event[i].func();
|
||||
printf("DELAY_EVENT %d, %d, %d\n",
|
||||
current_time, event[i].begin_time, event[i].time);
|
||||
TIMER_DelLoopEvent(event[i].id);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user