增加了一键下载(不调试)的支持,并更新了makefile,添加了make clean支持

This commit is contained in:
NeoZeng 2022-11-29 20:00:46 +08:00
parent a539072052
commit 6dd2f9c504
8 changed files with 114 additions and 69 deletions

30
.vscode/launch.json vendored
View File

@ -3,27 +3,29 @@
"configurations": [ "configurations": [
// 使dap-link(线) // 使dap-link(线)
{ {
"name": "Debug-dap", "name": "Debug-DAP",
"cwd": "${workspaceRoot}", "cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}\\build\\basic_framework.elf", // "executable": "${workspaceRoot}\\build\\${workspaceFolderBasename}.elf", // ,vscode
"request": "launch", "request": "launch",
"type": "cortex-debug", "type": "cortex-debug",
"device": "STM32F407IG", //使J-link GDB Server;GBD ServerSVD https://www.segger.com/downloads/supported-devices.php //使J-link GDB Server;GBD ServerSVD
"svdFile": ".\\STM32F407.svd", //svd https://github.com/posborne/cmsis-svd // https://www.segger.com/downloads/supported-devices.php
// C使svd "device": "STM32F407IG",
//svd https://github.com/posborne/cmsis-svd
//C使svd
"svdFile": "STM32F407.svd",
"servertype": "openocd", //使GDB Server "servertype": "openocd", //使GDB Server
"configFiles": [ "configFiles": [
".\\openocd.cfg", // ,,openocdshare/scripts "openocd_dap.cfg", // ,,openocdshare/scripts
], ],
// path to your gcc-arm-none-eabi/arm-none-eabi-gdb.exe,cortex-debug, "runToEntryPoint": "main" // main
// "gdbPath": "D:\\gcc-arm-none-eabi\\bin\\arm-none-eabi-gdb.exe", //"preLaunchTask": "build task",//Build,使
//"preLaunchTask": "build task",//Build,使
}, },
// 使j-link // 使j-link
{ {
"name": "Debug-jlink", "name": "Debug-Jlink",
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}\\build\\basic_framework.elf", "executable": "${workspaceRoot}\\build\\${workspaceFolderBasename}.elf",
"request": "launch", "request": "launch",
"type": "cortex-debug", "type": "cortex-debug",
"device": "STM32F407IG", "device": "STM32F407IG",
@ -31,8 +33,8 @@
"showDevDebugOutput": "none", "showDevDebugOutput": "none",
"servertype": "jlink", "servertype": "jlink",
"interface": "swd", "interface": "swd",
"svdFile": ".\\STM32F407.svd", "svdFile": "STM32F407.svd",
// "preLaunchTask": "build task",//Build,使 // "preLaunchTask": "build task",//Build,使
}, },
] ],
} }

22
.vscode/tasks.json vendored
View File

@ -5,12 +5,30 @@
{ {
"label": "build task", // "label": "build task", //
"type": "shell", // ,mingw32-make,(CMD),shell "type": "shell", // ,mingw32-make,(CMD),shell
"command": "mingw32-make -j24",// "command": "mingw32-make -j24",// ,线,4~8
"problemMatcher": [], "problemMatcher": [],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
} }
} },
{
"label": "download dap",
"type": "shell",
"command":"make download_dap",
"group": {
"kind": "build",
"isDefault": false,
},
},
{
"label": "download jlink",
"type": "shell",
"command":"make download_jlink",
"group": {
"kind": "build",
"isDefault": false,
}
},
] ]
} }

View File

@ -42,6 +42,8 @@
#include "ins_task.h" #include "ins_task.h"
#include "can_comm.h" #include "can_comm.h"
#include "master_process.h" #include "master_process.h"
#include "led_task.h"
#include "bsp_led.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -127,6 +129,7 @@ int main(void)
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
RC_init(&huart3); RC_init(&huart3);
DWT_Init(168); DWT_Init(168);
Motor_Init_Config_s config = { Motor_Init_Config_s config = {
.motor_type = GM6020, .motor_type = GM6020,
.can_init_config = { .can_init_config = {
@ -146,6 +149,7 @@ int main(void)
RefereeInit(&huart6); RefereeInit(&huart6);
Vision_Recv_s* recv=VisionInit(&huart1); Vision_Recv_s* recv=VisionInit(&huart1);
Vision_Send_s send={.pitch=1,.roll=2,.yaw=3}; Vision_Send_s send={.pitch=1,.roll=2,.yaw=3};
LED_init();
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Call init function for freertos objects (in freertos.c) */ /* Call init function for freertos objects (in freertos.c) */
@ -164,11 +168,12 @@ int main(void)
/* USER CODE END WHILE */ /* USER CODE END WHILE */
DJIMotorSetRef(djimotor, 10); DJIMotorSetRef(djimotor, 10);
MotorControlTask(); MotorControlTask();
HAL_Delay(10); HAL_Delay(1);
CANCommSend(in, (uint8_t*)&tx); CANCommSend(in, (uint8_t*)&tx);
tx+=1; tx+=1;
rx=(sdf*)CANCommGet(in); rx=(sdf*)CANCommGet(in);
VisionSend(&send); VisionSend(&send);
led_RGB_flow_task();
// INS_Task(); // INS_Task();
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
} }

View File

@ -292,8 +292,19 @@ $(BUILD_DIR):
# clean up # clean up
####################################### #######################################
clean: clean:
-rm -r -Force $(BUILD_DIR) rmdir /q $(BUILD_DIR)
#######################################
# download without debugging
#######################################
OPENOCD_FLASH_START = 0x08000000 # 如果切换芯片可能需要修改此值
download_dap:
openocd -f openocd_dap.cfg -c init -c halt -c "flash write_image erase $(BUILD_DIR)/$(TARGET).hex $(OPENOCD_FLASH_START)" -c reset -c shutdown
download_jlink:
openocd -f openocd_jlink.cfg -c init -c halt -c "flash write_image erase $(BUILD_DIR)/$(TARGET).hex $(OPENOCD_FLASH_START)" -c reset -c shutdown
####################################### #######################################
# dependencies # dependencies
####################################### #######################################

View File

@ -37,41 +37,37 @@ uint32_t RGB_flow_color[RGB_FLOW_COLOR_LENGHT + 1] = {0xFF0000FF, 0x0000FF00, 0x
*/ */
void led_RGB_flow_task() void led_RGB_flow_task()
{ {
uint16_t i, j; uint16_t i, j;
float delta_alpha, delta_red, delta_green, delta_blue; float delta_alpha, delta_red, delta_green, delta_blue;
float alpha, red, green, blue; float alpha, red, green, blue;
uint32_t aRGB; uint32_t aRGB;
while (1) for (i = 0; i < RGB_FLOW_COLOR_LENGHT; i++)
{ {
alpha = (RGB_flow_color[i] & 0xFF000000) >> 24;
red = ((RGB_flow_color[i] & 0x00FF0000) >> 16);
green = ((RGB_flow_color[i] & 0x0000FF00) >> 8);
blue = ((RGB_flow_color[i] & 0x000000FF) >> 0);
for (i = 0; i < RGB_FLOW_COLOR_LENGHT; i++) delta_alpha = (float)((RGB_flow_color[i + 1] & 0xFF000000) >> 24) - (float)((RGB_flow_color[i] & 0xFF000000) >> 24);
{ delta_red = (float)((RGB_flow_color[i + 1] & 0x00FF0000) >> 16) - (float)((RGB_flow_color[i] & 0x00FF0000) >> 16);
alpha = (RGB_flow_color[i] & 0xFF000000) >> 24; delta_green = (float)((RGB_flow_color[i + 1] & 0x0000FF00) >> 8) - (float)((RGB_flow_color[i] & 0x0000FF00) >> 8);
red = ((RGB_flow_color[i] & 0x00FF0000) >> 16); delta_blue = (float)((RGB_flow_color[i + 1] & 0x000000FF) >> 0) - (float)((RGB_flow_color[i] & 0x000000FF) >> 0);
green = ((RGB_flow_color[i] & 0x0000FF00) >> 8);
blue = ((RGB_flow_color[i] & 0x000000FF) >> 0);
delta_alpha = (float)((RGB_flow_color[i + 1] & 0xFF000000) >> 24) - (float)((RGB_flow_color[i] & 0xFF000000) >> 24); delta_alpha /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_red = (float)((RGB_flow_color[i + 1] & 0x00FF0000) >> 16) - (float)((RGB_flow_color[i] & 0x00FF0000) >> 16); delta_red /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_green = (float)((RGB_flow_color[i + 1] & 0x0000FF00) >> 8) - (float)((RGB_flow_color[i] & 0x0000FF00) >> 8); delta_green /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_blue = (float)((RGB_flow_color[i + 1] & 0x000000FF) >> 0) - (float)((RGB_flow_color[i] & 0x000000FF) >> 0); delta_blue /= RGB_FLOW_COLOR_CHANGE_TIME;
for (j = 0; j < RGB_FLOW_COLOR_CHANGE_TIME; j++)
{
alpha += delta_alpha;
red += delta_red;
green += delta_green;
blue += delta_blue;
delta_alpha /= RGB_FLOW_COLOR_CHANGE_TIME; aRGB = ((uint32_t)(alpha)) << 24 | ((uint32_t)(red)) << 16 | ((uint32_t)(green)) << 8 | ((uint32_t)(blue)) << 0;
delta_red /= RGB_FLOW_COLOR_CHANGE_TIME; aRGB_led_show(aRGB);
delta_green /= RGB_FLOW_COLOR_CHANGE_TIME; }
delta_blue /= RGB_FLOW_COLOR_CHANGE_TIME; }
for (j = 0; j < RGB_FLOW_COLOR_CHANGE_TIME; j++) HAL_Delay(1);
{
alpha += delta_alpha;
red += delta_red;
green += delta_green;
blue += delta_blue;
aRGB = ((uint32_t)(alpha)) << 24 | ((uint32_t)(red)) << 16 | ((uint32_t)(green)) << 8 | ((uint32_t)(blue)) << 0;
aRGB_led_show(aRGB);
osDelay(1);
}
}
}
} }

View File

@ -5,9 +5,9 @@
* @brief RoBoMatster串口通信协议 * @brief RoBoMatster串口通信协议
* @version 0.1 * @version 0.1
* @date 2022-11-03 * @date 2022-11-03
* *
* @copyright Copyright (c) 2022 * @copyright Copyright (c) 2022
* *
*/ */
#include "seasky_protocol.h" #include "seasky_protocol.h"
@ -38,7 +38,7 @@ static uint16_t CRC16_Check_Sum(uint8_t *pchMessage, uint32_t dwLength)
} }
/*检验数据帧头*/ /*检验数据帧头*/
static uint8_t protocol_heade_Check(protocol_rm_struct *pro,uint8_t *rx_buf) static uint8_t protocol_heade_Check(protocol_rm_struct *pro, uint8_t *rx_buf)
{ {
if (rx_buf[0] == PROTOCOL_CMD_ID) if (rx_buf[0] == PROTOCOL_CMD_ID)
{ {
@ -58,12 +58,12 @@ static uint8_t protocol_heade_Check(protocol_rm_struct *pro,uint8_t *rx_buf)
tx_buf中的对应数据 tx_buf中的对应数据
*/ */
void get_protocol_send_data(uint16_t send_id, //信号id void get_protocol_send_data(uint16_t send_id, // 信号id
uint16_t flags_register, // 16位寄存器 uint16_t flags_register, // 16位寄存器
float *tx_data, //待发送的float数据 float *tx_data, // 待发送的float数据
uint8_t float_length, // float的数据长度 uint8_t float_length, // float的数据长度
uint8_t *tx_buf, //待发送的数据帧 uint8_t *tx_buf, // 待发送的数据帧
uint16_t *tx_buf_len) //待发送的数据帧长度 uint16_t *tx_buf_len) // 待发送的数据帧长度
{ {
static uint16_t crc16; static uint16_t crc16;
static uint16_t data_len; static uint16_t data_len;
@ -71,9 +71,9 @@ void get_protocol_send_data(uint16_t send_id, //信号id
data_len = float_length * 4 + 2; data_len = float_length * 4 + 2;
/*帧头部分*/ /*帧头部分*/
tx_buf[0] = PROTOCOL_CMD_ID; tx_buf[0] = PROTOCOL_CMD_ID;
tx_buf[1] = data_len & 0xff; //低位在前 tx_buf[1] = data_len & 0xff; // 低位在前
tx_buf[2] = (data_len >> 8) & 0xff; //低位在前 tx_buf[2] = (data_len >> 8) & 0xff; // 低位在前
tx_buf[3] = Get_CRC8_Check(&tx_buf[0], 3); //获取CRC8校验位 tx_buf[3] = crc_8(&tx_buf[0], 3); // 获取CRC8校验位
/*数据的信号id*/ /*数据的信号id*/
tx_buf[4] = send_id & 0xff; tx_buf[4] = send_id & 0xff;
@ -90,7 +90,7 @@ void get_protocol_send_data(uint16_t send_id, //信号id
} }
/*整包校验*/ /*整包校验*/
crc16 = Get_CRC16_Check(&tx_buf[0], data_len + 6); crc16 = crc_16(&tx_buf[0], data_len + 6);
tx_buf[data_len + 6] = crc16 & 0xff; tx_buf[data_len + 6] = crc16 & 0xff;
tx_buf[data_len + 7] = (crc16 >> 8) & 0xff; tx_buf[data_len + 7] = (crc16 >> 8) & 0xff;
@ -100,21 +100,21 @@ void get_protocol_send_data(uint16_t send_id, //信号id
id id
*/ */
uint16_t get_protocol_info(uint8_t *rx_buf, //接收到的原始数据 uint16_t get_protocol_info(uint8_t *rx_buf, // 接收到的原始数据
uint16_t *flags_register, //接收数据的16位寄存器地址 uint16_t *flags_register, // 接收数据的16位寄存器地址
uint8_t *rx_data) //接收的float数据存储地址 uint8_t *rx_data) // 接收的float数据存储地址
{ {
static protocol_rm_struct pro; static protocol_rm_struct pro;
static uint16_t date_length; static uint16_t date_length;
volatile size_t s=sizeof(pro); volatile size_t s = sizeof(pro);
volatile size_t aa=sizeof(Vision_Recv_s); volatile size_t aa = sizeof(Vision_Recv_s);
if (protocol_heade_Check(&pro, rx_buf)) if (protocol_heade_Check(&pro, rx_buf))
{ {
date_length = OFFSET_BYTE + pro.header.data_length; date_length = OFFSET_BYTE + pro.header.data_length;
if (CRC16_Check_Sum(&rx_buf[0], date_length)) if (CRC16_Check_Sum(&rx_buf[0], date_length))
{ {
*flags_register = (rx_buf[7] << 8) | rx_buf[6]; *flags_register = (rx_buf[7] << 8) | rx_buf[6];
memcpy(rx_data,rx_buf+8,4*sizeof(pro.header.data_length - 2)); memcpy(rx_data, rx_buf + 8, 4 * sizeof(pro.header.data_length - 2));
return pro.cmd_id; return pro.cmd_id;
} }
} }

13
openocd_jlink.cfg Normal file
View File

@ -0,0 +1,13 @@
# 选择调试器为jlink
source [find interface/jlink.cfg]
# source [find interface/jlink.cfg] #使用jlink硬件进行调试,注意其他地方也要更改
# OpenOCD作为GDB和硬件调试器的桥梁(为硬件提供抽象,把接口给GDB),支持多种硬件调试器.
# OpenOCD会自动在其根目录的share/openocd/scripts/interface里面寻找对应的配置文件
# 选择接口为SWD
transport select swd
# 选择目标芯片
source [find target/stm32f4x.cfg]
# OpenOCD会自动在其根目录的share/openocd/scripts/target里面寻找对应的配置文件