Browse Source

improve write_oprate

master
sunlight 10 months ago
parent
commit
4dc6ca9e96
  1. 2
      .settings/com.st.stm32cube.ide.mcu.sfrview.prefs
  2. 4
      .vscode/settings.json
  3. 4
      Core/Inc/usart.h
  4. 2
      Core/Src/stm32f4xx_it.c
  5. 4
      Core/Src/usart.c
  6. 36
      Usr/core.c
  7. 21
      Usr/module/feite_servo/need.txt
  8. 47
      Usr/module/feite_servo/servo_driver.c
  9. 20
      Usr/module/feite_servo/servo_driver.h
  10. 269
      Usr/module/feite_servo/servo_package_process.c
  11. 42
      Usr/module/feite_servo/servo_package_process.h
  12. 62
      Usr/module/feite_servo/servo_reg_map.h
  13. 9
      Usr/service/Processer/tjc_screen_process.c
  14. 16
      Usr/service/Processer/tjc_screen_receive.c
  15. 2
      Usr/service/Processer/tjc_screen_receive.h
  16. 36
      Usr/stm32itcb.c
  17. 1
      Usr/stm32itcb.h
  18. 2
      Usr/tick.h
  19. 2
      Usr/time_slice/time_slice.c
  20. 44
      auxiliary_addition Debug.cfg
  21. 2
      auxiliary_addition Debug.launch

2
.settings/com.st.stm32cube.ide.mcu.sfrview.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}}

4
.vscode/settings.json

@ -40,7 +40,9 @@
"servo_reg_map.h": "c",
"servo_driver.h": "c",
"servo_package_process.h": "c",
"tjc_screen.h": "c"
"tjc_screen.h": "c",
"dma.h": "c",
"random": "c"
},
"C_Cpp.clang_format_path": "C:\\Users\\sunlight\\.vscode\\extensions\\ms-vscode.cpptools-1.21.6-win32-x64\\LLVM\\bin\\clang-format.exe",
"C_Cpp.formatting": "clangFormat",

4
Core/Inc/usart.h

@ -40,8 +40,10 @@ extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
/* USER CODE BEGIN Private defines */
/* USER CODE BEGIN Private defines */
extern DMA_HandleTypeDef hdma_usart3_rx;
/* USER CODE END Private defines */
void MX_UART4_Init(void);

2
Core/Src/stm32f4xx_it.c

@ -280,7 +280,7 @@ void USART2_IRQHandler(void)
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */

4
Core/Src/usart.c

@ -1,3 +1,5 @@
/*
/* USER CODE BEGIN Header */
/**
******************************************************************************
@ -129,7 +131,7 @@ void MX_USART3_UART_Init(void)
/* USER CODE END USART3_Init 1 */
huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.BaudRate = 1000000;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;

36
Usr/core.c

@ -2,34 +2,34 @@
* @Author: sunlight 2524828700@qq.com
* @Date: 2024-09-12 21:05:22
* @LastEditors: sunlight 2524828700@qq.com
* @LastEditTime: 2024-09-20 21:27:51
* @LastEditTime: 2024-09-23 13:22:31
* @FilePath: \auxiliary_addition\Usr\opration\core.c
* @Description:
*/
#include "core.h"
#include "time_slice/time_slice.h"
#include "tim.h"
#include "./Processer/tjc_screen_process.h"
#include "./Processer/tjc_screen_receive.h"
#include "module/feite_servo/servo_driver.h"
#include "module/feite_servo/servo_package_process.h"
#include "module/feite_servo/servo_reg_map.h"
#include "tim.h"
#include "time_slice/time_slice.h"
#include "usart.h"
#include "zgpio.h"
static uint32_t ticktime_sleep;
static uint8_t data = 1000;
void core_init(void) {
HAL_TIM_Base_Start_IT(&htim2);
tjc_process_init();
// HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, SET);
servo_uart_init(&huart3);
servo_drive_single(4, kRegServoAcc, W_DATA, 200, 1);
servo_drive_single(4, kRegServoRunSpeed, W_DATA, 1000, 1);
}
static int i = 0;
void core_loop(void) {
if (GetFlag(tjc_process)) {
tjc_processe();
ClearFlag(tjc_process);
@ -39,13 +39,18 @@ void core_loop(void) {
ClearFlag(debug_light);
}
if (GetFlag(low_power)) {
// Power_SleepMode();
servo_control_single(Get_Servo(STS_small_L), kRegServoTargetPos_map, -1000);//
//Power_StopMode();
//Power_StandByMode();
ClearFlag(low_power);
}
if (GetFlag(low_power)) {
// Power_SleepMode();
servo_drive_single(4, kRegServoTargetPos, W_DATA,&i, 1); //
if (i > 2000)
i -= 50;
else
i += 50;
// Power_StopMode();
// Power_StandByMode();
ClearFlag(low_power);
}
// printf("printf\n");
}
@ -54,6 +59,5 @@ void core_main() {
core_init();
while (1) {
core_loop();
}
}

21
Usr/module/feite_servo/need.txt

@ -52,7 +52,7 @@
// 同步和单纯写是只写一次
9.20
上面全部省略
新的思路
@ -110,6 +110,25 @@
运行时间 bit11为和 位置校准 bit10位 来区分正负
9.21
问题3 发送和接收指令包的处理
发送包缺乏校验和数据可能是导致现在驱动不了舵机的原因
接收指令包利用DMA接收,涉及到一个dma中断的处理,
网上的大部分是利用串口空闲中断处理,这样DMA中断在接收数据处理方面就没多大作用;
所以采用DMA的半中断的方式(不采用全中断是害怕溢出),控制DMA接收缓存区的大小来达到接收完从机应答包后就产生DMA中断
问题4 由于同步和非同步的不确定导致指令包参数数据长度不定,而原先的方法是只能用与参数长度为1个字节或者2个字节,
所以需要改变我原先的方法,让参数定长改为参数可变。
对于我原来的方法,
在判断寄存器传入字节长度的时候判断了一次寄存器,
在判断特殊寄存器的位控制时有又判断了一次寄存器
9.23
发先所有的操作都有统一的基础形式
2、控制多个舵机

47
Usr/module/feite_servo/servo_driver.c

@ -1,22 +1,27 @@
#include "servo_driver.h"
#include "servo_package_process.h"
static servo_obj_t servo[servo_amount] = {
{STS_small_L}, {STS_small_M}, {STS_small_R}, {STS_large_L}, {STS_large_R},
{STS_small_L}, {STS_small_M}, {STS_small_R}, {STS_large_R}, {STS_large_Y},
};
static param_t param;
/**
* @description:
* @param {uint8_t} servo_id id
* @return {*}
*/
servo_obj_t* Get_Servo(uint8_t servo_id) {
if (servo_id > STS_large_R || servo_id < STS_small_L) {
printf("Servo_id dose not exist:%d\n", servo_id);
while (1);
if (servo_id > STS_large_Y || servo_id < STS_small_L) {
while(1){
printf("Servo_id dose not exist:%d\n", servo_id);
}
}
return &servo[servo_id];
printf("Servo id : %d\n", servo_id);
printf("Servo id : %d\n", servo_id);
//return &servo[servo_id];
}
/**
@ -26,21 +31,23 @@ servo_obj_t* Get_Servo(uint8_t servo_id) {
* @param {int32_t} param
* @return {*}
*/
void servo_drive_single(servo_obj_t* servo, uint8_t function, int32_t param, uint8_t cmd) {
if (cmd != W_DATA || cmd != REG_W_DATA) {
printf("write cmd error :%d", cmd);
void servo_drive_single(uint8_t id, uint8_t addr, uint8_t cmd, int16_t *param_data, uint8_t param_count) {
param.addr = addr;
param.data = param_data;
param.count = param_count;
if (!(cmd == W_DATA || cmd == REG_W_DATA)) {
printf("write cmd error :%02X", cmd);
return;
}
servo->reg = function;
servo->data = param;
servo->cmd = cmd;
Write_oprete(servo);
Write_oprete(id, cmd, &param);
}
void servo_drive_multi(servo_obj_t* servo, uint8_t function, int32_t param) {
servo->reg = function;
servo->data = param;
servo->cmd = SYC_W_DATA;
Write_oprete(servo);
}
// void servo_drive_multi(servo_obj_t* servo, uint8_t function, int32_t param) {
// servo->reg = function;
// servo->data = param;
// servo->cmd = SYC_W_DATA;
// Write_oprete(servo);
// }

20
Usr/module/feite_servo/servo_driver.h

@ -2,21 +2,29 @@
#include <stdint.h>
#include <stdio.h>
#define servo_amount 5
typedef struct{
uint8_t addr;
uint8_t data_len;
uint8_t special_bit;
uint8_t sign_ed;
}reg_info_t;
//
typedef struct {
uint8_t id;
uint8_t reg;
int32_t data; //
reg_info_t reg_info;
uint8_t cmd;
} servo_obj_t;
enum {
STS_small_L = 0,
STS_small_M,
STS_small_R,
STS_large_L,
STS_large_R,
STS_small_R,//right
STS_large_R,//Roll
STS_large_Y,
};
void servo_control_single(servo_obj_t* servo, uint8_t function, int32_t param);
void servo_drive_single(uint8_t id, uint8_t addr, uint8_t cmd, int16_t *param_data, uint8_t param_count);
servo_obj_t* Get_Servo(uint8_t servo_id);

269
Usr/module/feite_servo/servo_package_process.c

@ -1,153 +1,165 @@
#include "servo_package_process.h"
#include <stdio.h>
#include <string.h>
#include "tick.h"
#include "servo_driver.h"
#include "servo_reg_map.h"
static UART_HandleTypeDef* m_uart;
static uint8_t rx_buf[PROCESS_MAX_LEN];
static uint8_t rx_size;
static uint8_t tx_buf[PROCESS_MAX_LEN];
static uint8_t tx_send_len;
static bool Idle_Flag = false;
static uint8_t cmd_type;
static cmd_frame_t cmd;
static uint8_t cmd_packet[PACKET_MAX_LEN];
static uint8_t reg_map[k_reg_max_map] = {
kRegFirmwareMainVersion,
kRegFirmwareSubVersion,
kRegServoMainVersion,
kRegServoSubVersion,
kRegServoId,
kRegServoBaudRate,
kRegServoDelay,
kRegServoAckLevel,
kRegServoMinAngle,
kRegServoMaxAngle,
kRegServoMaxTemp,
kRegServoMaxVoltage,
kRegServoMinVoltage,
kRegServoMaxTorque,
kRegServoPhase,
kRegServoUnloadCondition,
kRegServoLedAlarmCondition,
kRegServoP,
kRegServoD,
kRegServoI,
kRegServoMinStart,
kRegServoCwDeadZone,
kRegServoCcwDeadZone,
kRegServoProtectCurrent,
kRegServoAngleResolution,
kRegServoCalibration,
kRegServoRunMode,
kRegServoProtectTorque,
kRegServoProtectTime,
kRegServoOverloadTorque,
kRegServoSpeedP,
kRegServoOverloadTime,
kRegServoSpeedI,
kRegServoTorqueSwitch,
kRegServoAcc,
kRegServoTargetPos,
kRegServoRunTime,
kRegServoRunSpeed,
kRegServoTorqueLimit,
kRegServoLockFlag,
kRegServoCurrentPos,
kRegServoCurrentSpeed,
kRegServoCurrentLoad,
kRegServoCurrentVoltage,
kRegServoCurrentTemp,
kRegServoAsyncWriteFlag,
kRegServoStatus,
kRegServoMoveFlag,
kRegServoCurrentCurrent,
kRegServoCheckSpeed,
kRegServoDTime,
kRegServoSpeedUnit,
kRegServoMinSpeedLimit,
kRegServoMaxSpeedLimit,
kRegServoAccLimit,
kRegServoAccMultiple,
};
static uint8_t cmd_type;
//
static reg_info_t reg_info;
void SET_IDEL_FLAG(void) { Idle_Flag = true; }
void CLEAR_IDEL_FLAG(void) { Idle_Flag = false; }
/**
* @description:
* @param {UART_HandleTypeDef*} uart
* @return {*}
*/
void servo_uart_init(UART_HandleTypeDef* uart) { m_uart = uart; }
/**
* @description:
* @param {uint8_t} reg_addr
* @return {*}
*///
static uint8_t estimate_data_len(uint8_t reg_addr) {
if (reg_addr > k_reg_max_map) return error;
switch (reg_addr) {
case kRegServoMinAngle_map:
case kRegServoMaxAngle_map:
case kRegServoMaxTorque_map:
case kRegServoProtectCurrent_map:
case kRegServoCalibration_map:
case kRegServoTargetPos_map:
case kRegServoRunTime_map:
case kRegServoRunSpeed_map:
case kRegServoTorqueLimit_map:
case kRegServoCurrentPos_map:
case kRegServoCurrentSpeed_map:
case kRegServoCurrentLoad_map:
case kRegServoCurrentCurrent_map:
return word;
*/
//
//
//
void reg_distinguish(param_t* param) {
reg_info.addr = (uint8_t)param->addr;
switch (reg_info.addr) {
case kRegServoCalibration:
reg_info.data_len = word;
reg_info.special_bit = BT_11;
reg_info.sign_ed = 1;
break;
case kRegServoRunTime:
reg_info.data_len = word;
reg_info.special_bit = BT_10;
reg_info.sign_ed = 1;
break;
case kRegServoCurrentPos:
case kRegServoCurrentSpeed:
reg_info.data_len = word;
reg_info.special_bit = BT_15;
reg_info.sign_ed = 1;
break;
case kRegServoTargetPos:
case kRegServoMinAngle:
case kRegServoMaxAngle:
case kRegServoMaxTorque:
case kRegServoProtectCurrent:
case kRegServoRunSpeed:
case kRegServoTorqueLimit:
case kRegServoCurrentLoad:
case kRegServoCurrentCurrent:
reg_info.data_len = word;
reg_info.special_bit = 0;
reg_info.sign_ed = 0;
break;
default:
return byte;
reg_info.data_len = byte;
reg_info.special_bit = 0;
reg_info.sign_ed = 0;
break;
}
}
void send_cmd_packet(cmd_frame_t* cmd) {
memcpy(cmd_packet, cmd->head, sizeof(cmd->head));
cmd_packet[2] = cmd->id;
cmd_packet[3] = cmd->len;
memcpy(&cmd_packet[4], cmd->param, strlen((const char*)cmd->param));
static uint8_t check_sum_calculate(uint8_t id, uint8_t len, uint8_t cmd, param_t* param) {
// Check Sum = ~ (ID + Length + Instruction + Parameter1 + ... Parameter N)
uint8_t sum = 0;
sum = id + len + cmd + param->addr;
for (int16_t i = 0; i < param->count; i++) {
sum += (uint8_t)param->data[i];
}
HAL_UART_Transmit(m_uart, cmd_packet, sizeof(cmd), 10);
// printf("cmd_frame_packet:%02X %02X %02X %02X %02X %02X %02X\n", cmd_packet[0], cmd_packet[1], cmd_packet[2], cmd_packet[3], cmd_packet[4], cmd_packet[5], cmd_packet[6]);
return ~(sum);
}
static void high_low_exchange(param_t* param, uint8_t* packet) {
static int16_t trans_buf;
for (uint8_t i = 0; i < param->count; i++) {
trans_buf = (param->data[i] | (reg_info.sign_ed << reg_info.special_bit)) >> 8;
trans_buf |= param->data[i] << 8;
memcpy(packet + (uint8_t)(i * 2), &trans_buf, sizeof(trans_buf));
}
}
void get_rx_size(uint16_t Size) {rx_size = Size - __HAL_DMA_GET_COUNTER(m_uart->hdmarx);}
void packet_process(uint8_t len) {
cmd_receive_t* receive = (cmd_receive_t*)rx_buf;
uint32_t lasttime = HAL_GetTick();
HAL_UARTEx_ReceiveToIdle_DMA(m_uart, rx_buf, sizeof(rx_buf));
HAL_UART_Transmit(m_uart, tx_buf, len, 10);
// HAL_UART_Receive_DMA();
while (!Idle_Flag) {
//
if (pass_time(lasttime) > OVERTIME) {
printf("uart3 receive error\n");
break;
}
}
if(receive->status == 0x00 && Idle_Flag){
printf("servo normal work\n");
CLEAR_IDEL_FLAG();
}
printf("tx:%02X %02X %02X %02X %02X %02X %02X %02X %02X\n", tx_buf[0], tx_buf[1], tx_buf[2], tx_buf[3], tx_buf[4], tx_buf[5], tx_buf[6], tx_buf[7], tx_buf[8]);
printf("tx_send_len: %02X\n", len);
}
//
/**
* @description: ( )
* @param {servo_obj_t*} servo
* @param {uint8_t} param_len
* @description:
* @param {uint8_t} id
* @param {uint8_t} cmd
* @param {param_t*} param
* @return {*}
*/
void write_reg(servo_obj_t* servo, uint8_t param_len) {
cmd.head[0] = 0xff;
cmd.head[1] = 0xff;
cmd.id = servo->id;
if (cmd_type) {
cmd.len = param_len + 3;
cmd.param[0] = reg_map[servo->reg];
cmd.cmd = servo->cmd;
void write_reg(uint8_t id, uint8_t cmd, param_t* param) {
uint8_t check_sum = 0;
uint8_t cmd_packet_len = 0;
cmd_frame_t* cmd_packet = (cmd_frame_t*)tx_buf; //
cmd_packet->head = 0xffff;
cmd_packet->id = id;
if (cmd_type) {
// * =
cmd_packet->valid_len = param->count * reg_info.data_len + 3; // cmd + id + check_sum = 3
cmd_packet->cmd = cmd;
cmd_packet->param[0] = param->addr;
//
if (param_len == byte) {
cmd.param[1] = (uint8_t)servo->data;
} else if (param_len == word) {
//
if (kRegServoCalibration_map == servo->reg) {
cmd.param[1] = servo->data & 0xff; //
cmd.param[2] = (servo->data >> 8) | (1 << BT_11); //
} else if (kRegServoRunTime_map == servo->reg) {
cmd.param[1] = servo->data & 0xff; //
cmd.param[2] = (servo->data >> 8) | (1 << BT_10); //
} else {
// uint32_t和 int32_t是一样的
cmd.param[1] = ((uint32_t)servo->data) & 0xff; //
cmd.param[2] = ((uint32_t)servo->data) >> 8; //
printf("%02X\n", servo->data);
}
if (reg_info.data_len == byte) {
memcpy(&cmd_packet->param[1], param->data, param->count);
} else if (reg_info.data_len == word) {
//
high_low_exchange(param, &cmd_packet->param[1]);
}
}
// else
send_cmd_packet(&cmd);
// else
check_sum = check_sum_calculate(cmd_packet->id, cmd_packet->valid_len, cmd_packet->cmd, param);
memcpy(&cmd_packet->param[param->count * reg_info.data_len + 1], &check_sum, param->count); // checksum放入指令包末尾
tx_send_len = cmd_packet->valid_len + 4; // 4 = cmd_head[1] + cmd_head[2] + add + check_sum
packet_process(tx_send_len);
}
/**
@ -155,21 +167,18 @@ void write_reg(servo_obj_t* servo, uint8_t param_len) {
* @param {servo_obj_t*} servo
* @return {*}
*/
bool Write_oprete(servo_obj_t* servo) {
uint8_t data_len;
bool Write_oprete(uint8_t id, uint8_t cmd, param_t* param) {
reg_distinguish(param);
if (servo->cmd != SYC_W_DATA)
if (cmd != SYC_W_DATA)
cmd_type = non_syn;
else
cmd_type = syn;
data_len = estimate_data_len(servo->reg);
write_reg(id, cmd, param);
return true;
}
if (data_len == error) {
printf("The reg does not exist:%02X", servo->reg);
return false;
}
void Ping_oprete(uint8_t id, uint8_t cmd){
write_reg(servo, data_len);
return true;
}

42
Usr/module/feite_servo/servo_package_process.h

@ -4,7 +4,7 @@
#include "servo_driver.h"
#include "usart.h"
#define PACKET_MAX_LEN 256
#define PROCESS_MAX_LEN 256
#define PARAM_LEN 128
#define PING 0x01
@ -18,6 +18,7 @@
//
#define BT_11 11
#define BT_10 10
#define BT_15 15
enum data_len {
error = 0,
@ -31,18 +32,39 @@ enum write_type {
};
typedef struct {
uint8_t head[2];
uint16_t head;
uint8_t id;
uint8_t len;
uint8_t valid_len;//
uint8_t cmd;
uint8_t param[PARAM_LEN];
uint16_t crc; //
uint8_t param[];//checksum得放在别处
} cmd_frame_t;
// typedef struct {
// uint8_t reg_addr;
// uint8_t data_len;
// } reg_info_t;
typedef struct{
uint16_t head;
uint8_t id;
uint8_t valid_len;//
uint8_t status;
uint8_t check_sum;
}cmd_receive_t;
typedef struct {
uint8_t addr;
int16_t* data;
uint8_t count;
} param_t;
enum reg_type{
normal = 0,
data_longeer,
special_bit10,
special_bit11,
};
void servo_uart_init(UART_HandleTypeDef* uart);
bool Write_oprete(servo_obj_t* servo);
bool Write_oprete(uint8_t id, uint8_t cmd, param_t* param);
void reg_distinguish(param_t* param);
void get_rx_size(uint16_t Size);
void SET_IDEL_FLAG(void);
void CLEAR_IDEL_FLAG(void);

62
Usr/module/feite_servo/servo_reg_map.h

@ -1,68 +1,6 @@
#pragma once
//
typedef enum {
kRegFirmwareMainVersion_map = 0, //
kRegFirmwareSubVersion_map, //
kRegServoMainVersion_map, //
kRegServoSubVersion_map, //
kRegServoId_map, // ID
kRegServoBaudRate_map, //
kRegServoDelay_map, //
kRegServoAckLevel_map, //
kRegServoMinAngle_map, //
kRegServoMaxAngle_map, //
kRegServoMaxTemp_map, //
kRegServoMaxVoltage_map, //
kRegServoMinVoltage_map, //
kRegServoMaxTorque_map, //
kRegServoPhase_map, //
kRegServoUnloadCondition_map, //
kRegServoLedAlarmCondition_map, // LED
kRegServoP_map, // P
kRegServoD_map, // D
kRegServoI_map, // I
kRegServoMinStart_map, //
kRegServoCwDeadZone_map, //
kRegServoCcwDeadZone_map, //
kRegServoProtectCurrent_map, //
kRegServoAngleResolution_map, //
kRegServoCalibration_map, // BIT11为方向位BIT0~100-2047
kRegServoRunMode_map, //
kRegServoProtectTorque_map, // 0->100 ,
kRegServoProtectTime_map, //
kRegServoOverloadTorque_map, //
kRegServoSpeedP_map, // P比例参数
kRegServoOverloadTime_map, //
kRegServoSpeedI_map, // I积分参数
kRegServoTorqueSwitch_map, //
kRegServoAcc_map, //
kRegServoTargetPos_map, //
kRegServoRunTime_map, //
kRegServoRunSpeed_map, //
kRegServoTorqueLimit_map, //
kRegServoLockFlag_map, //
kRegServoCurrentPos_map, //
kRegServoCurrentSpeed_map, //
kRegServoCurrentLoad_map, // bit10为方向位
kRegServoCurrentVoltage_map, //
kRegServoCurrentTemp_map, //
kRegServoAsyncWriteFlag_map, //
kRegServoStatus_map, //
kRegServoMoveFlag_map, //
kRegServoCurrentCurrent_map, //
kRegServoCheckSpeed_map, // 80
kRegServoDTime_map, // 81 D控制时间
kRegServoSpeedUnit_map, // 82
kRegServoMinSpeedLimit_map, // 83
kRegServoMaxSpeedLimit_map, // 84
kRegServoAccLimit_map, // 85
kRegServoAccMultiple_map, // 86
k_reg_max_map,
} reg_addr_map;
//

9
Usr/service/Processer/tjc_screen_process.c

@ -1,3 +1,11 @@
/*
* @Author: sunlight 2524828700@qq.com
* @Date: 2024-09-13 11:35:08
* @LastEditors: sunlight 2524828700@qq.com
* @LastEditTime: 2024-09-23 16:14:59
* @FilePath: \auxiliary_addition\Usr\service\Processer\tjc_screen_process.c
* @Description: ,`customMade`, koroFileHeader查看配置 : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -5,6 +13,7 @@
#include <string.h>
#include <stdbool.h>
#include <stdio.h>
#include "tjc_screen_event.h"
#include "tjc_screen_page.h"

16
Usr/service/Processer/tjc_screen_receive.c

@ -52,19 +52,3 @@ void tjc_date_pack(packet_t* packet) {
}
/*
*
* @brief
*
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) {
if (huart == &huart2) {
//
tjc_uart_receive();
}
if (huart == &huart2) {
//
HAL_UART_Receive_IT(huart, &rxCache, 1);
}
}

2
Usr/service/Processer/tjc_screen_receive.h

@ -4,7 +4,7 @@
#include "usart.h"
#define BUF_MAX_LEN 256
#define OVERTIME 1
typedef struct {
uint8_t date[BUF_MAX_LEN];
uint16_t len;

36
Usr/stm32itcb.c

@ -0,0 +1,36 @@
#include <stdbool.h>
#include "./Processer/tjc_screen_receive.h"
#include "./module/feite_servo/servo_package_process.h"
#include "usart.h"
static uint8_t rx_cache;
/*
*
* @brief
*
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) {
if (huart == &huart2) {
//
tjc_uart_receive();
}
if (huart == &huart2) {
//
HAL_UART_Receive_IT(huart, &rx_cache, 1);
}
}
//
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
if (huart == &huart3) {
get_rx_size(Size);
SET_IDEL_FLAG();
}
if (huart == &huart3) {
//
}
}

1
Usr/stm32itcb.h

@ -0,0 +1 @@
#pragma once

2
Usr/tick.h

@ -1,4 +1,6 @@
#pragma once
#include <stdint.h>
#define OVERTIME 10
uint32_t pass_time(uint32_t lastime);

2
Usr/time_slice/time_slice.c

@ -2,7 +2,7 @@
* @Author: sunlight 2524828700@qq.com
* @Date: 2024-09-18 20:58:48
* @LastEditors: sunlight 2524828700@qq.com
* @LastEditTime: 2024-09-20 14:42:35
* @LastEditTime: 2024-09-21 11:35:50
* @FilePath: \auxiliary_addition\Usr\time_slice\time_slice.c
* @Description: ,`customMade`, koroFileHeader查看配置 : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/

44
auxiliary_addition Debug.cfg

@ -0,0 +1,44 @@
# This is an genericBoard board with a single STM32F407VETx chip
#
# Generated by STM32CubeIDE
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)
source [find interface/stlink-dap.cfg]
set WORKAREASIZE 0x8000
transport select "dapdirect_swd"
set CHIPNAME STM32F407VETx
set BOARDNAME genericBoard
# Enable debug when in low power modes
set ENABLE_LOW_POWER 1
# Stop Watchdog counters when halt
set STOP_WATCHDOG 1
# STlink Debug clock frequency
set CLOCK_FREQ 8000
# Reset configuration
# use hardware reset, connect under reset
# connect_assert_srst needed if low power mode application running (WFI...)
reset_config srst_only srst_nogate connect_assert_srst
set CONNECT_UNDER_RESET 1
set CORE_RESET 0
# ACCESS PORT NUMBER
set AP_NUM 0
# GDB PORT
set GDB_PORT 3333
# BCTM CPU variables
source [find target/stm32f4x.cfg]

2
auxiliary_addition Debug.launch

@ -30,7 +30,7 @@
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="1000"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="D:\my_worksplace\P_auxiliary_addition\auxiliary_addition\Debug\st-link_gdbserver_log.txt"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>

Loading…
Cancel
Save