2 Commits

Author SHA1 Message Date
sunlight 1175ed857b improve cmd_packet frame and Ping operation 10 months ago
sunlight 4dc6ca9e96 improve write_oprate 10 months ago
  1. 4
      .cproject
  2. 2
      .settings/com.st.stm32cube.ide.mcu.sfrview.prefs
  3. 5
      .vscode/settings.json
  4. 1
      Core/Inc/Backup/stm32f4xx_it.h.bak
  5. 4
      Core/Src/Backup/dma.c.bak
  6. 4
      Core/Src/Backup/gpio.c.bak
  7. 15
      Core/Src/Backup/stm32f4xx_it.c.bak
  8. 27
      Core/Src/Backup/usart.c.bak
  9. 2
      Core/Src/adc.c
  10. 4
      Core/Src/gpio.c
  11. 2
      Core/Src/usart.c
  12. 45
      Usr/core.c
  13. 21
      Usr/module/feite_servo/need.txt
  14. 61
      Usr/module/feite_servo/servo_driver.c
  15. 20
      Usr/module/feite_servo/servo_driver.h
  16. 94
      Usr/module/feite_servo/servo_operation.c
  17. 9
      Usr/module/feite_servo/servo_operation.h
  18. 248
      Usr/module/feite_servo/servo_package_process.c
  19. 51
      Usr/module/feite_servo/servo_package_process.h
  20. 62
      Usr/module/feite_servo/servo_reg_map.h
  21. 9
      Usr/service/Processer/tjc_screen_process.c
  22. 16
      Usr/service/Processer/tjc_screen_receive.c
  23. 2
      Usr/service/Processer/tjc_screen_receive.h
  24. 36
      Usr/stm32itcb.c
  25. 1
      Usr/stm32itcb.h
  26. 2
      Usr/tick.h
  27. 2
      Usr/time_slice/time_slice.c
  28. 44
      auxiliary_addition Debug.cfg
  29. 2
      auxiliary_addition Debug.launch
  30. 51
      auxiliary_addition.ioc

4
.cproject

@ -24,7 +24,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.377661821" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.273320545" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1506876983" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F407VETx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F407xx || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F407VETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.959946920" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.959946920" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="168" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.46951286" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.366309264" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/auxiliary_addition}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.136438457" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
@ -114,7 +114,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1492355288" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1676201566" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1534087057" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F407VETx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F407xx || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F407VETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1868502222" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1868502222" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="168" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1544943081" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/auxiliary_addition}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1592162593" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.678775058" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">

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

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

5
.vscode/settings.json

@ -40,7 +40,10 @@
"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",
"algorithm": "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",

1
Core/Inc/Backup/stm32f4xx_it.h.bak

@ -56,6 +56,7 @@ void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void RCC_IRQHandler(void);
void DMA1_Stream1_IRQHandler(void);
void TIM2_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);

4
Core/Src/Backup/dma.c.bak

@ -41,8 +41,12 @@ void MX_DMA_Init(void)
/* DMA controller clock enable */
__HAL_RCC_DMA2_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Stream1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
/* DMA2_Stream0_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);

4
Core/Src/Backup/gpio.c.bak

@ -62,7 +62,7 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE3 PE6 PE0 PE1 */
@ -75,7 +75,7 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PD0 PD1 PD2 PD3

15
Core/Src/Backup/stm32f4xx_it.c.bak

@ -58,6 +58,7 @@
extern DMA_HandleTypeDef hdma_adc1;
extern RTC_HandleTypeDef hrtc;
extern TIM_HandleTypeDef htim2;
extern DMA_HandleTypeDef hdma_usart3_rx;
extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
@ -218,6 +219,20 @@ void RCC_IRQHandler(void)
}
/**
* @brief This function handles DMA1 stream1 global interrupt.
*/
void DMA1_Stream1_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
/* USER CODE END DMA1_Stream1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart3_rx);
/* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
/* USER CODE END DMA1_Stream1_IRQn 1 */
}
/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM2_IRQHandler(void)

27
Core/Src/Backup/usart.c.bak

@ -28,6 +28,7 @@ UART_HandleTypeDef huart4;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
DMA_HandleTypeDef hdma_usart3_rx;
/* UART4 init function */
void MX_UART4_Init(void)
@ -99,7 +100,7 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 1 */
huart2.Instance = USART2;
huart2.Init.BaudRate = 256000;
huart2.Init.BaudRate = 1000000;//256000;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
@ -128,7 +129,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;
@ -250,6 +251,25 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART3 DMA Init */
/* USART3_RX Init */
hdma_usart3_rx.Instance = DMA1_Stream1;
hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_rx.Init.Mode = DMA_NORMAL;
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
@ -336,6 +356,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
/* USART3 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
/* USART3 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspDeInit 1 */

2
Core/Src/adc.c

@ -44,7 +44,7 @@ void MX_ADC1_Init(void)
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;

4
Core/Src/gpio.c

@ -62,7 +62,7 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE3 PE6 PE0 PE1 */
@ -75,7 +75,7 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PD0 PD1 PD2 PD3

2
Core/Src/usart.c

@ -100,7 +100,7 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 1 */
huart2.Instance = USART2;
huart2.Init.BaudRate = 256000;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;

45
Usr/core.c

@ -2,36 +2,36 @@
* @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 21:37:16
* @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_operation.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();
servo_uart_init(&huart3);
//tjc_process_init();
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, SET);
servo_uart_init(&huart2);
// servo_drive_single(1, kRegServoAcc, W_DATA, 200, 1);
// servo_drive_single(1, kRegServoRunSpeed, W_DATA, 1000, 1);
}
static int i = 0;
void core_loop(void) {
if (GetFlag(tjc_process)) {
tjc_processe();
//tjc_processe();
ClearFlag(tjc_process);
}
if (GetFlag(debug_light)) {
@ -39,13 +39,19 @@ 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(1, kRegServoTargetPos, W_DATA,&i, 1); //
Ping_operete(1);
if (i > 2000)
i -= 50;
else
i += 50;
// Power_StopMode();
// Power_StandByMode();
ClearFlag(low_power);
}
// printf("printf\n");
}
@ -54,6 +60,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、控制多个舵机

61
Usr/module/feite_servo/servo_driver.c

@ -1,23 +1,28 @@
#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},
};
/**
* @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);
}
// static servo_obj_t servo[servo_amount] = {
// {STS_small_L}, {STS_small_M}, {STS_small_R}, {STS_large_R}, {STS_large_Y},
// };
static param_t param;//
return &servo[servo_id];
printf("Servo id : %d\n", servo_id);
}
// /**
// * @description:
// * @param {uint8_t} servo_id id
// * @return {*}
// */
// servo_obj_t* Get_Servo(uint8_t servo_id) {
// if (servo_id > STS_large_Y || servo_id < STS_small_L) {
// while(1){
// printf("Servo_id dose not exist:%d\n", servo_id);
// }
// }
// printf("Servo id : %d\n", servo_id);
// //return &servo[servo_id];
// }
/**
* @description:
@ -26,21 +31,17 @@ 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_operete(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);
}

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);

94
Usr/module/feite_servo/servo_operation.c

@ -0,0 +1,94 @@
#include "servo_operation.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
static UART_HandleTypeDef* m_uart;
static uint8_t tx_buf[PROCESS_MAX_LEN];
static uint8_t rx_buf[PROCESS_MAX_LEN];
static uint8_t tx_send_len;
static uint8_t cmd_type;
static uint8_t check_sum;
//
static reg_info_t reg_info;
/**
* @description:
* @param {UART_HandleTypeDef*} uart
* @return {*}
*/
void servo_uart_init(UART_HandleTypeDef* uart) { m_uart = uart; }
/**
* @description:
* @param {servo_obj_t*} servo
* @return {*}
*/
bool Write_operete(uint8_t id, uint8_t cmd, param_t* param) {
reg_distinguish(param, &reg_info);
if (cmd != SYC_W_DATA)
cmd_type = non_syn;
else
cmd_type = syn;
write_reg(id, cmd, param);
return true;
}
void Ping_operete(uint8_t id) {
cmd_basic_t* cmd_basic = (cmd_basic_t*)tx_buf;
cmd_basic->head = 0xffff;
cmd_basic->id = id;
cmd_basic->valid_len = 0x02;
cmd_basic->cmd = PING;
check_sum = check_sum_calculate(&tx_buf[2], NULL);
memcpy(&tx_buf[BASCI_LEN], &check_sum, 1);
tx_send_len = BASCI_LEN + 1; // 1 = check_sum
packet_process(m_uart, tx_buf, rx_buf, tx_send_len);
}
//
/**
* @description:
* @param {uint8_t} id
* @param {uint8_t} cmd
* @param {param_t*} param
* @return {*}
*/
void write_reg(uint8_t id, uint8_t cmd, param_t* param) {
uint8_t param_real_len = param->count * reg_info.data_len; // * =
cmd_basic_t* cmd_basic = (cmd_basic_t*)tx_buf; //
uint8_t* cmd_param = &tx_buf[5];
cmd_basic->head = 0xffff;
cmd_basic->id = id;
if (cmd_type) {
cmd_basic->valid_len = param_real_len + 3; // cmd + id + check_sum = 3
cmd_basic->cmd = cmd;
cmd_param[0] = param->addr;
//
if (reg_info.data_len == byte) {
memcpy(&cmd_param[1], param->data, param->count);
} else if (reg_info.data_len == word) {
//
high_low_exchange(param, &cmd_param[1], &reg_info);
}
}
// else
check_sum = check_sum_calculate(&tx_buf[2], param);
// checksum放入指令包末尾
memcpy(&tx_buf[BASCI_LEN + param_real_len + 1], &check_sum, 1); // tx_buff[5] == addr 1 = addr
tx_send_len = BASCI_LEN + param_real_len + 2; // 2 = addr + check_sum
packet_process(m_uart, tx_buf,rx_buf, tx_send_len);
}

9
Usr/module/feite_servo/servo_operation.h

@ -0,0 +1,9 @@
#pragma once
#include <stdint.h>
#include "servo_package_process.h"
bool Write_operete(uint8_t id, uint8_t cmd, param_t* param);
void Ping_operete(uint8_t id);
void servo_uart_init(UART_HandleTypeDef* uart);

248
Usr/module/feite_servo/servo_package_process.c

@ -1,5 +1,3 @@
#include "servo_package_process.h"
#include <stdio.h>
@ -7,169 +5,125 @@
#include "servo_driver.h"
#include "servo_reg_map.h"
static UART_HandleTypeDef* m_uart;
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,
};
void servo_uart_init(UART_HandleTypeDef* uart) { m_uart = uart; }
#include "tick.h"
static uint8_t rx_size;
static bool Idle_Flag = false;
void SET_IDEL_FLAG(void) { Idle_Flag = true; }
void CLEAR_IDEL_FLAG(void) { Idle_Flag = false; }
/**
* @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_t* reg_info) {
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));
uint8_t check_sum_calculate(uint8_t* basic, param_t* param) {
// Check Sum = ~ (ID + Length + Instruction + Parameter1 + ... Parameter N)
uint16_t i = 0;
uint8_t basic_sum = 0;
uint8_t sum = 0;
for (i = 0; i < BASCI_LEN - 2; i++) {
basic_sum += basic[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]);
if (param != NULL) {
sum = basic_sum + param->addr;
for (i = 0; i < param->count; i++) {
sum += (uint8_t)param->data[i];
}
} else {
sum = basic_sum;
}
return ~(sum);
}
/**
* @description: ( )
* @param {servo_obj_t*} servo
* @param {uint8_t} param_len
* @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;
//
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);
}
}
void high_low_exchange(param_t* param, uint8_t* packet, reg_info_t* reg_info) {
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));
}
// else
send_cmd_packet(&cmd);
}
/**
* @description:
* @param {servo_obj_t*} servo
* @return {*}
*/
bool Write_oprete(servo_obj_t* servo) {
uint8_t data_len;
if (servo->cmd != SYC_W_DATA)
cmd_type = non_syn;
else
cmd_type = syn;
data_len = estimate_data_len(servo->reg);
void packet_process(UART_HandleTypeDef* uart, uint8_t* tx, uint8_t* rx, uint8_t len) {
cmd_receive_t* receive = (cmd_receive_t*)rx;
uint32_t lasttime = HAL_GetTick();
HAL_UARTEx_ReceiveToIdle_DMA(uart, rx, sizeof(rx));
HAL_UART_Transmit(uart, tx, len, 100);
// HAL_UART_Receive_DMA();
if (data_len == error) {
printf("The reg does not exist:%02X", servo->reg);
return false;
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();
}
write_reg(servo, data_len);
return true;
printf("tx:%s\n", tx);
printf("tx_send_len: %02X\n", len);
}
// void get_rx_size(uint16_t Size) { rx_size = Size - __HAL_DMA_GET_COUNTER(m_uart->hdmarx); }

51
Usr/module/feite_servo/servo_package_process.h

@ -4,8 +4,9 @@
#include "servo_driver.h"
#include "usart.h"
#define PACKET_MAX_LEN 256
#define PARAM_LEN 128
#define PROCESS_MAX_LEN 256
#define PARAM_LEN 128
#define BASCI_LEN 5
#define PING 0x01
#define R_DATA 0x02
@ -18,6 +19,7 @@
//
#define BT_11 11
#define BT_10 10
#define BT_15 15
enum data_len {
error = 0,
@ -30,19 +32,44 @@ enum write_type {
non_syn,
};
// typedef struct {
// cmd_basic_t basic;
// //uint8_t param[]; // checksum得放在别处
// } cmd_frame_t;
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; //
} cmd_frame_t;
} cmd_basic_t;
// typedef struct {
// uint8_t reg_addr;
// uint8_t data_len;
// } reg_info_t;
typedef struct {
cmd_basic_t basic;
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);
void reg_distinguish(param_t* param, reg_info_t* reg_info);
void high_low_exchange(param_t* param, uint8_t* packet, reg_info_t* reg_info);
void packet_process(UART_HandleTypeDef* uart, uint8_t* tx, uint8_t* rx, uint8_t len);
uint8_t check_sum_calculate(uint8_t* basic, 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"/>

51
auxiliary_addition.ioc

@ -8,9 +8,9 @@ ADC1.master=1
CAD.formats=
CAD.pinconfig=
CAD.provider=
CAN1.CalculateBaudRate=749999
CAN1.CalculateTimeBit=1333
CAN1.CalculateTimeQuantum=444.44444444444446
CAN1.CalculateBaudRate=875000
CAN1.CalculateTimeBit=1142
CAN1.CalculateTimeQuantum=380.95238095238096
CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate
Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.ADC1.0.FIFOMode=DMA_FIFOMODE_DISABLE
@ -185,10 +185,16 @@ PD0.Locked=true
PD0.Signal=GPIO_Input
PD1.Locked=true
PD1.Signal=GPIO_Input
PD13.GPIOParameters=GPIO_Speed
PD13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD13.Locked=true
PD13.Signal=GPIO_Output
PD14.GPIOParameters=GPIO_Speed
PD14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD14.Locked=true
PD14.Signal=GPIO_Output
PD15.GPIOParameters=GPIO_Speed
PD15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD15.Locked=true
PD15.Signal=GPIO_Output
PD2.Locked=true
@ -201,6 +207,8 @@ PE0.Locked=true
PE0.Signal=GPIO_Input
PE1.Locked=true
PE1.Signal=GPIO_Input
PE2.GPIOParameters=GPIO_Speed
PE2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE2.Locked=true
PE2.Signal=GPIO_Output
PE3.Locked=true
@ -243,37 +251,37 @@ ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=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_UART4_Init-UART4-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_RTC_Init-RTC-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_I2C1_Init-I2C1-false-HAL-true,10-MX_CAN1_Init-CAN1-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_TIM2_Init-TIM2-false-HAL-true
RCC.48MHZClocksFreq_Value=36000000
RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2
RCC.APB1Freq_Value=36000000
RCC.APB1TimFreq_Value=72000000
RCC.48MHZClocksFreq_Value=84000000
RCC.AHBFreq_Value=168000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
RCC.APB1Freq_Value=42000000
RCC.APB1TimFreq_Value=84000000
RCC.APB2CLKDivider=RCC_HCLK_DIV2
RCC.APB2Freq_Value=36000000
RCC.APB2TimFreq_Value=72000000
RCC.CortexFreq_Value=72000000
RCC.EthernetFreq_Value=72000000
RCC.FCLKCortexFreq_Value=72000000
RCC.APB2Freq_Value=84000000
RCC.APB2TimFreq_Value=168000000
RCC.CortexFreq_Value=168000000
RCC.EthernetFreq_Value=168000000
RCC.FCLKCortexFreq_Value=168000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=72000000
RCC.HCLKFreq_Value=168000000
RCC.HSE_VALUE=8000000
RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=192000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
RCC.LSI_VALUE=32000
RCC.MCO2PinFreq_Value=72000000
RCC.PLLCLKFreq_Value=72000000
RCC.MCO2PinFreq_Value=168000000
RCC.PLLCLKFreq_Value=168000000
RCC.PLLM=4
RCC.PLLN=72
RCC.PLLQCLKFreq_Value=36000000
RCC.PLLN=168
RCC.PLLQCLKFreq_Value=84000000
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=4000000
RCC.SYSCLKFreq_VALUE=72000000
RCC.SYSCLKFreq_VALUE=168000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=384000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=144000000
RCC.VCOOutputFreq_Value=336000000
RCC.VcooutputI2S=192000000
RTC.Alarm=RTC_ALARM_A
RTC.Alarm_B=RTC_ALARM_B
@ -293,7 +301,8 @@ USART1.VirtualMode=VM_ASYNC
USART2.BaudRate=256000
USART2.IPParameters=VirtualMode,BaudRate
USART2.VirtualMode=VM_ASYNC
USART3.IPParameters=VirtualMode
USART3.BaudRate=1000000
USART3.IPParameters=VirtualMode,BaudRate
USART3.VirtualMode=VM_ASYNC
VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate

Loading…
Cancel
Save