mirror of
https://github.com/modelec/odo_STM32.git
synced 2026-01-18 16:27:25 +01:00
correction et code pid prêt à l'envoi dans les moteurs
This commit is contained in:
@@ -38,6 +38,8 @@ extern TIM_HandleTypeDef htim2;
|
|||||||
|
|
||||||
extern TIM_HandleTypeDef htim3;
|
extern TIM_HandleTypeDef htim3;
|
||||||
|
|
||||||
|
extern TIM_HandleTypeDef htim8;
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
@@ -45,6 +47,7 @@ extern TIM_HandleTypeDef htim3;
|
|||||||
void MX_TIM1_Init(void);
|
void MX_TIM1_Init(void);
|
||||||
void MX_TIM2_Init(void);
|
void MX_TIM2_Init(void);
|
||||||
void MX_TIM3_Init(void);
|
void MX_TIM3_Init(void);
|
||||||
|
void MX_TIM8_Init(void);
|
||||||
|
|
||||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#include "usb_device.h"
|
#include "usb_device.h"
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
|
||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
@@ -98,6 +97,7 @@ int main(void)
|
|||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
MX_USB_Device_Init();
|
MX_USB_Device_Init();
|
||||||
|
MX_TIM8_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
// HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); // IN1A
|
// HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); // IN1A
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ void determinationCoefPosition(Point objectifPoint, Point pointActuel, PidPositi
|
|||||||
int erreurG = pidG.getPWMCommand(nouvelOrdreG);
|
int erreurG = pidG.getPWMCommand(nouvelOrdreG);
|
||||||
int erreurD = pidD.getPWMCommand(nouvelOrdreD);
|
int erreurD = pidD.getPWMCommand(nouvelOrdreD);
|
||||||
|
|
||||||
const int maxErreur = 20;
|
const int maxErreur = 5;
|
||||||
|
|
||||||
if (erreurG > maxErreur) {
|
if (erreurG > maxErreur) {
|
||||||
erreurG = maxErreur;
|
erreurG = maxErreur;
|
||||||
@@ -112,7 +112,7 @@ void ModelecOdometrySetup(void **out_pid, void **out_pidG, void **out_pidD) {
|
|||||||
theta = 0.0f;
|
theta = 0.0f;
|
||||||
//motor.accelerer(300);
|
//motor.accelerer(300);
|
||||||
|
|
||||||
*out_pid = new PidPosition(0,0,0,0,0,0,Point());
|
*out_pid = new PidPosition(1.5,0.02,0.4,3.0, 0.01, 0.6, Point());
|
||||||
*out_pidG = new PidVitesse(0.2, 0.05, 0.01, 0);
|
*out_pidG = new PidVitesse(0.2, 0.05, 0.01, 0);
|
||||||
*out_pidD = new PidVitesse(0.2, 0.05, 0.01, 0);
|
*out_pidD = new PidVitesse(0.2, 0.05, 0.01, 0);
|
||||||
|
|
||||||
@@ -172,8 +172,8 @@ void ModelecOdometryUpdate() {
|
|||||||
|
|
||||||
//motor.setLeftCurrentSpeed(vitesseLeft);
|
//motor.setLeftCurrentSpeed(vitesseLeft);
|
||||||
//motor.setRightCurrentSpeed(vitesseRight);
|
//motor.setRightCurrentSpeed(vitesseRight);
|
||||||
motor.setLeftCurrentSpeed(motor.getLeftCurrentSpeed()+0.05);
|
motor.setLeftCurrentSpeed(vitesseLeft);
|
||||||
motor.setRightCurrentSpeed(motor.getRightCurrentSpeed()+0.05);
|
motor.setRightCurrentSpeed(vitesseRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void publishStatus(){
|
void publishStatus(){
|
||||||
@@ -195,21 +195,21 @@ void ModelecOdometryLoop(void* pid, void* pidG, void* pidD) {
|
|||||||
//On met à jour toutes les 10ms
|
//On met à jour toutes les 10ms
|
||||||
if (isDelayPassed(10)) {
|
if (isDelayPassed(10)) {
|
||||||
ModelecOdometryUpdate();
|
ModelecOdometryUpdate();
|
||||||
USB_Comm_Process();
|
//USB_Comm_Process();
|
||||||
/*
|
|
||||||
HAL_Delay(1000);
|
//HAL_Delay(1000);
|
||||||
Point currentPoint(x, y,theta, StatePoint::INTERMEDIAIRE);
|
Point currentPoint(x, y,theta, StatePoint::INTERMEDIAIRE);
|
||||||
Point targetPoint(0.20, 0.20,0, StatePoint::FINAL);
|
Point targetPoint(0.50, 0.0,0, StatePoint::FINAL);
|
||||||
char debugMsg[128];
|
char debugMsg[128];
|
||||||
sprintf(debugMsg, "Speed avant determination : L=%.3f | R=%.3f\r\n",
|
sprintf(debugMsg, "Speed avant determination : L=%.3f | R=%.3f\r\n",
|
||||||
motor.getLeftCurrentSpeed(), motor.getRightCurrentSpeed());
|
motor.getLeftCurrentSpeed(), motor.getRightCurrentSpeed());
|
||||||
CDC_Transmit_FS((uint8_t*)debugMsg, strlen(debugMsg));
|
CDC_Transmit_FS((uint8_t*)debugMsg, strlen(debugMsg));
|
||||||
|
|
||||||
|
|
||||||
determinationCoefPosition(currentPoint,targetPoint, *pidPosition, *pidVitesseG, *pidVitesseD);
|
determinationCoefPosition(currentPoint,targetPoint, *pidPosition, *pidVitesseG, *pidVitesseD);
|
||||||
HAL_Delay(1000);
|
//HAL_Delay(1000);
|
||||||
motor.update();
|
motor.update();
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,15 @@ void Motor::stopTurning() {
|
|||||||
|
|
||||||
void Motor::update() {
|
void Motor::update() {
|
||||||
|
|
||||||
|
const int16_t PWM_MAX = 626;
|
||||||
|
|
||||||
|
|
||||||
|
if (this->leftTarget_PWM > PWM_MAX) this->leftTarget_PWM = PWM_MAX;
|
||||||
|
if (this->leftTarget_PWM < -PWM_MAX) this->leftTarget_PWM = -PWM_MAX;
|
||||||
|
|
||||||
|
if (this->rightTarget_PWM > PWM_MAX) this->rightTarget_PWM = PWM_MAX;
|
||||||
|
if (this->rightTarget_PWM < -PWM_MAX) this->rightTarget_PWM = -PWM_MAX;
|
||||||
|
|
||||||
// Appliquer targetSpeed dans currentSpeed
|
// Appliquer targetSpeed dans currentSpeed
|
||||||
this->leftCurrent_PWM = this->leftTarget_PWM;
|
this->leftCurrent_PWM = this->leftTarget_PWM;
|
||||||
this->rightCurrent_PWM = this->rightTarget_PWM;
|
this->rightCurrent_PWM = this->rightTarget_PWM;
|
||||||
@@ -146,12 +155,15 @@ void Motor::update() {
|
|||||||
TIM1->CCR2 = static_cast<uint16_t>(-this->rightCurrent_PWM); // IN2B (arrière)
|
TIM1->CCR2 = static_cast<uint16_t>(-this->rightCurrent_PWM); // IN2B (arrière)
|
||||||
TIM1->CCR1 = 0; // IN1B
|
TIM1->CCR1 = 0; // IN1B
|
||||||
}
|
}
|
||||||
|
//[STM32] PWM_LEFT: 600 | PWM_RIGHT: 600 || TIM8->CCR1: 0 | TIM8->CCR2: 0 M1->CCR1: 600 | TIM1->CCR2: 0
|
||||||
|
|
||||||
char msg[128];
|
char msg[128];
|
||||||
snprintf(msg, sizeof(msg),
|
snprintf(msg, sizeof(msg),
|
||||||
"TIM8->CCR1: %lu | TIM8->CCR2: %lu | TIM1->CCR1: %lu | TIM1->CCR2: %lu\r\n",
|
"PWM_LEFT: %d | PWM_RIGHT: %d || TIM8->CCR1: %lu | TIM8->CCR2: %lu | TIM1->CCR1: %lu | TIM1->CCR2: %lu\r\n",
|
||||||
|
this->leftCurrent_PWM, this->rightCurrent_PWM,
|
||||||
(uint32_t)TIM8->CCR1, (uint32_t)TIM8->CCR2,
|
(uint32_t)TIM8->CCR1, (uint32_t)TIM8->CCR2,
|
||||||
(uint32_t)TIM1->CCR1, (uint32_t)TIM1->CCR2);
|
(uint32_t)TIM1->CCR1, (uint32_t)TIM1->CCR2);
|
||||||
CDC_Transmit_FS((uint8_t*)msg, strlen(msg));
|
|
||||||
|
CDC_Transmit_FS((uint8_t*)msg, strlen(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
134
Core/Src/tim.c
134
Core/Src/tim.c
@@ -27,6 +27,7 @@
|
|||||||
TIM_HandleTypeDef htim1;
|
TIM_HandleTypeDef htim1;
|
||||||
TIM_HandleTypeDef htim2;
|
TIM_HandleTypeDef htim2;
|
||||||
TIM_HandleTypeDef htim3;
|
TIM_HandleTypeDef htim3;
|
||||||
|
TIM_HandleTypeDef htim8;
|
||||||
|
|
||||||
/* TIM1 init function */
|
/* TIM1 init function */
|
||||||
void MX_TIM1_Init(void)
|
void MX_TIM1_Init(void)
|
||||||
@@ -196,6 +197,87 @@ void MX_TIM3_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END TIM3_Init 2 */
|
/* USER CODE END TIM3_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
/* TIM8 init function */
|
||||||
|
void MX_TIM8_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM8_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM8_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_Init 1 */
|
||||||
|
htim8.Instance = TIM8;
|
||||||
|
htim8.Init.Prescaler = 0;
|
||||||
|
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim8.Init.Period = 630;
|
||||||
|
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim8.Init.RepetitionCounter = 0;
|
||||||
|
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim8) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 0;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||||
|
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
||||||
|
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
||||||
|
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
||||||
|
sBreakDeadTimeConfig.DeadTime = 0;
|
||||||
|
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
||||||
|
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
||||||
|
sBreakDeadTimeConfig.BreakFilter = 0;
|
||||||
|
sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
|
||||||
|
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
|
||||||
|
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
|
||||||
|
sBreakDeadTimeConfig.Break2Filter = 0;
|
||||||
|
sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
|
||||||
|
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
||||||
|
if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM8_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim8);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||||
@@ -212,6 +294,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 1 */
|
/* USER CODE END TIM1_MspInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(tim_baseHandle->Instance==TIM8)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM8_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspInit 0 */
|
||||||
|
/* TIM8 clock enable */
|
||||||
|
__HAL_RCC_TIM8_CLK_ENABLE();
|
||||||
|
/* USER CODE BEGIN TIM8_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspInit 1 */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
|
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
|
||||||
@@ -284,7 +377,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
|||||||
/* USER CODE BEGIN TIM1_MspPostInit 0 */
|
/* USER CODE BEGIN TIM1_MspPostInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspPostInit 0 */
|
/* USER CODE END TIM1_MspPostInit 0 */
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
/**TIM1 GPIO Configuration
|
/**TIM1 GPIO Configuration
|
||||||
PA8 ------> TIM1_CH1
|
PA8 ------> TIM1_CH1
|
||||||
@@ -301,6 +393,35 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspPostInit 1 */
|
/* USER CODE END TIM1_MspPostInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(timHandle->Instance==TIM8)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM8_MspPostInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspPostInit 0 */
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
/**TIM8 GPIO Configuration
|
||||||
|
PA14 ------> TIM8_CH2
|
||||||
|
PA15 ------> TIM8_CH1
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_14;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_TIM8;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_15;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF2_TIM8;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM8_MspPostInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspPostInit 1 */
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,6 +439,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 1 */
|
/* USER CODE END TIM1_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(tim_baseHandle->Instance==TIM8)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_TIM8_CLK_DISABLE();
|
||||||
|
/* USER CODE BEGIN TIM8_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM8_MspDeInit 1 */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle)
|
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle)
|
||||||
|
|||||||
@@ -1,50 +1,142 @@
|
|||||||
/* usbd_cdc_if.c */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_cdc_if.c
|
||||||
|
* @version : v3.0_Cube
|
||||||
|
* @brief : Usb device for Virtual Com Port.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 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 "usbd_cdc_if.h"
|
#include "usbd_cdc_if.h"
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @brief Usb device library.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup USBD_CDC_IF
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions
|
||||||
|
* @brief Private types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines
|
||||||
|
* @brief Private defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_DEFINES */
|
||||||
|
/* USER CODE END PRIVATE_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros
|
||||||
|
* @brief Private macros.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables
|
||||||
|
* @brief Private variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Create buffer for reception and transmission */
|
||||||
|
/* It's up to user to redefine and/or remove those define */
|
||||||
|
/** Received data over USB are stored in this buffer */
|
||||||
|
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
|
||||||
|
|
||||||
|
/** Data to send over USB CDC are stored in this buffer */
|
||||||
|
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
extern USBD_HandleTypeDef hUsbDeviceFS;
|
extern USBD_HandleTypeDef hUsbDeviceFS;
|
||||||
|
|
||||||
static uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
|
/* USER CODE BEGIN EXPORTED_VARIABLES */
|
||||||
static uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
|
|
||||||
|
|
||||||
static int8_t CDC_Init_FS(void)
|
/* USER CODE END EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes
|
||||||
|
* @brief Private functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int8_t CDC_Init_FS(void);
|
||||||
|
static int8_t CDC_DeInit_FS(void);
|
||||||
|
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length);
|
||||||
|
static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len);
|
||||||
|
static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
|
||||||
{
|
{
|
||||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
|
|
||||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
|
|
||||||
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
|
|
||||||
return (USBD_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int8_t CDC_DeInit_FS(void)
|
|
||||||
{
|
|
||||||
return (USBD_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
|
|
||||||
{
|
|
||||||
return (USBD_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
|
|
||||||
{
|
|
||||||
Buf[*Len] = '\0';
|
|
||||||
USB_CDC_ProcessCommand((char*)Buf);
|
|
||||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
|
|
||||||
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
|
|
||||||
return (USBD_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
|
|
||||||
{
|
|
||||||
UNUSED(Buf);
|
|
||||||
UNUSED(Len);
|
|
||||||
UNUSED(epnum);
|
|
||||||
return (USBD_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS = {
|
|
||||||
CDC_Init_FS,
|
CDC_Init_FS,
|
||||||
CDC_DeInit_FS,
|
CDC_DeInit_FS,
|
||||||
CDC_Control_FS,
|
CDC_Control_FS,
|
||||||
@@ -52,35 +144,185 @@ USBD_CDC_ItfTypeDef USBD_Interface_fops_FS = {
|
|||||||
CDC_TransmitCplt_FS
|
CDC_TransmitCplt_FS
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Initializes the CDC media low layer over the FS USB IP
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_Init_FS(void)
|
||||||
{
|
{
|
||||||
if (hUsbDeviceFS.pClassData == NULL) return USBD_FAIL;
|
/* USER CODE BEGIN 3 */
|
||||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
|
/* Set Application Buffers */
|
||||||
return USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
|
||||||
|
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Command parser */
|
/**
|
||||||
void USB_CDC_ProcessCommand(const char* command)
|
* @brief DeInitializes the CDC media low layer
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_DeInit_FS(void)
|
||||||
{
|
{
|
||||||
char response[APP_TX_DATA_SIZE];
|
/* USER CODE BEGIN 4 */
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
}
|
||||||
|
|
||||||
if (strncmp(command, "GET;POS", 7) == 0) {
|
/**
|
||||||
snprintf(response, sizeof(response), "SET;POS;100;200;1.57\r\n");
|
* @brief Manage the CDC class requests
|
||||||
} else if (strncmp(command, "GET;SPEED", 9) == 0) {
|
* @param cmd: Command code
|
||||||
snprintf(response, sizeof(response), "SET;SPEED;10;20;0.5\r\n");
|
* @param pbuf: Buffer containing command data (request parameters)
|
||||||
} else if (strncmp(command, "GET;DIST;", 9) == 0) {
|
* @param length: Number of data to be sent (in bytes)
|
||||||
int tof_id = atoi(command + 9);
|
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
|
||||||
snprintf(response, sizeof(response), "SET;DIST;%d;123\r\n", tof_id);
|
*/
|
||||||
} else if (strncmp(command, "GET;PID", 7) == 0) {
|
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
|
||||||
snprintf(response, sizeof(response), "SET;PID;1.0;0.5;0.1\r\n");
|
{
|
||||||
} else if (strncmp(command, "SET;POS;", 9) == 0 ||
|
/* USER CODE BEGIN 5 */
|
||||||
strncmp(command, "SET;PID;", 9) == 0 ||
|
switch(cmd)
|
||||||
strncmp(command, "SET;START;", 11) == 0 ||
|
{
|
||||||
strncmp(command, "SET;WAYPOINT;", 13) == 0) {
|
case CDC_SEND_ENCAPSULATED_COMMAND:
|
||||||
snprintf(response, sizeof(response), "OK;%s\r\n", command + 4);
|
|
||||||
} else {
|
break;
|
||||||
snprintf(response, sizeof(response), "KO;%s\r\n", command);
|
|
||||||
|
case CDC_GET_ENCAPSULATED_RESPONSE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SET_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_GET_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_CLEAR_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Line Coding Structure */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Offset | Field | Size | Value | Description */
|
||||||
|
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
|
||||||
|
/* 4 | bCharFormat | 1 | Number | Stop bits */
|
||||||
|
/* 0 - 1 Stop bit */
|
||||||
|
/* 1 - 1.5 Stop bits */
|
||||||
|
/* 2 - 2 Stop bits */
|
||||||
|
/* 5 | bParityType | 1 | Number | Parity */
|
||||||
|
/* 0 - None */
|
||||||
|
/* 1 - Odd */
|
||||||
|
/* 2 - Even */
|
||||||
|
/* 3 - Mark */
|
||||||
|
/* 4 - Space */
|
||||||
|
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
|
||||||
|
/*******************************************************************************/
|
||||||
|
case CDC_SET_LINE_CODING:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_GET_LINE_CODING:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SET_CONTROL_LINE_STATE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SEND_BREAK:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
CDC_Transmit_FS((uint8_t*)response, strlen(response));
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 5 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Data received over USB OUT endpoint are sent over CDC interface
|
||||||
|
* through this function.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* This function will issue a NAK packet on any OUT packet received on
|
||||||
|
* USB endpoint until exiting this function. If you exit this function
|
||||||
|
* before transfer is complete on CDC interface (ie. using DMA controller)
|
||||||
|
* it will result in receiving more data while previous ones are still
|
||||||
|
* not sent.
|
||||||
|
*
|
||||||
|
* @param Buf: Buffer of data to be received
|
||||||
|
* @param Len: Number of data received (in bytes)
|
||||||
|
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 6 */
|
||||||
|
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
|
||||||
|
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CDC_Transmit_FS
|
||||||
|
* Data to send over USB IN endpoint are sent over CDC interface
|
||||||
|
* through this function.
|
||||||
|
* @note
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param Buf: Buffer of data to be sent
|
||||||
|
* @param Len: Number of data to be sent (in bytes)
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
|
||||||
|
*/
|
||||||
|
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
|
||||||
|
{
|
||||||
|
uint8_t result = USBD_OK;
|
||||||
|
/* USER CODE BEGIN 7 */
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
|
||||||
|
if (hcdc->TxState != 0){
|
||||||
|
return USBD_BUSY;
|
||||||
|
}
|
||||||
|
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
|
||||||
|
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
||||||
|
/* USER CODE END 7 */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CDC_TransmitCplt_FS
|
||||||
|
* Data transmitted callback
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* This function is IN transfer complete callback used to inform user that
|
||||||
|
* the submitted Data is successfully sent over USB.
|
||||||
|
*
|
||||||
|
* @param Buf: Buffer of data to be received
|
||||||
|
* @param Len: Number of data received (in bytes)
|
||||||
|
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
|
||||||
|
{
|
||||||
|
uint8_t result = USBD_OK;
|
||||||
|
/* USER CODE BEGIN 13 */
|
||||||
|
UNUSED(Buf);
|
||||||
|
UNUSED(Len);
|
||||||
|
UNUSED(epnum);
|
||||||
|
/* USER CODE END 13 */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,24 @@
|
|||||||
/* usbd_cdc_if.h */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_cdc_if.h
|
||||||
|
* @version : v3.0_Cube
|
||||||
|
* @brief : Header for usbd_cdc_if.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 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 __USBD_CDC_IF_H__
|
#ifndef __USBD_CDC_IF_H__
|
||||||
#define __USBD_CDC_IF_H__
|
#define __USBD_CDC_IF_H__
|
||||||
|
|
||||||
@@ -7,18 +26,106 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "usbd_cdc.h"
|
#include "usbd_cdc.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @brief For Usb device.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF USBD_CDC_IF
|
||||||
|
* @brief Usb VCP device module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Defines USBD_CDC_IF_Exported_Defines
|
||||||
|
* @brief Defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Define size for the receive and transmit buffer over CDC */
|
||||||
#define APP_RX_DATA_SIZE 2048
|
#define APP_RX_DATA_SIZE 2048
|
||||||
#define APP_TX_DATA_SIZE 2048
|
#define APP_TX_DATA_SIZE 2048
|
||||||
|
/* USER CODE BEGIN EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Types USBD_CDC_IF_Exported_Types
|
||||||
|
* @brief Types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Macros USBD_CDC_IF_Exported_Macros
|
||||||
|
* @brief Aliases.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** CDC Interface callback. */
|
||||||
extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
|
extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_FunctionsPrototype USBD_CDC_IF_Exported_FunctionsPrototype
|
||||||
|
* @brief Public functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
|
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
|
||||||
void USB_CDC_ProcessCommand(const char* command);
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __USBD_CDC_IF_H__ */
|
#endif /* __USBD_CDC_IF_H__ */
|
||||||
|
|
||||||
|
|||||||
35
pcb_odo.ioc
35
pcb_odo.ioc
@@ -13,25 +13,29 @@ Mcu.IP2=SYS
|
|||||||
Mcu.IP3=TIM1
|
Mcu.IP3=TIM1
|
||||||
Mcu.IP4=TIM2
|
Mcu.IP4=TIM2
|
||||||
Mcu.IP5=TIM3
|
Mcu.IP5=TIM3
|
||||||
Mcu.IP6=USB
|
Mcu.IP6=TIM8
|
||||||
Mcu.IP7=USB_DEVICE
|
Mcu.IP7=USB
|
||||||
Mcu.IPNb=8
|
Mcu.IP8=USB_DEVICE
|
||||||
|
Mcu.IPNb=9
|
||||||
Mcu.Name=STM32G491K(C-E)Ux
|
Mcu.Name=STM32G491K(C-E)Ux
|
||||||
Mcu.Package=UFQFPN32
|
Mcu.Package=UFQFPN32
|
||||||
Mcu.Pin0=PF0-OSC_IN
|
Mcu.Pin0=PF0-OSC_IN
|
||||||
Mcu.Pin1=PA0
|
Mcu.Pin1=PA0
|
||||||
Mcu.Pin10=VP_SYS_VS_DBSignals
|
Mcu.Pin10=PB4
|
||||||
Mcu.Pin11=VP_TIM1_VS_ClockSourceINT
|
Mcu.Pin11=VP_SYS_VS_Systick
|
||||||
Mcu.Pin12=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
Mcu.Pin12=VP_SYS_VS_DBSignals
|
||||||
|
Mcu.Pin13=VP_TIM1_VS_ClockSourceINT
|
||||||
|
Mcu.Pin14=VP_TIM8_VS_ClockSourceINT
|
||||||
|
Mcu.Pin15=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||||
Mcu.Pin2=PA1
|
Mcu.Pin2=PA1
|
||||||
Mcu.Pin3=PA4
|
Mcu.Pin3=PA4
|
||||||
Mcu.Pin4=PA8
|
Mcu.Pin4=PA8
|
||||||
Mcu.Pin5=PA9
|
Mcu.Pin5=PA9
|
||||||
Mcu.Pin6=PA11
|
Mcu.Pin6=PA11
|
||||||
Mcu.Pin7=PA12
|
Mcu.Pin7=PA12
|
||||||
Mcu.Pin8=PB4
|
Mcu.Pin8=PA14
|
||||||
Mcu.Pin9=VP_SYS_VS_Systick
|
Mcu.Pin9=PA15
|
||||||
Mcu.PinsNb=13
|
Mcu.PinsNb=16
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32G491KEUx
|
Mcu.UserName=STM32G491KEUx
|
||||||
@@ -64,6 +68,8 @@ PA11.Mode=Device
|
|||||||
PA11.Signal=USB_DM
|
PA11.Signal=USB_DM
|
||||||
PA12.Mode=Device
|
PA12.Mode=Device
|
||||||
PA12.Signal=USB_DP
|
PA12.Signal=USB_DP
|
||||||
|
PA14.Signal=S_TIM8_CH2
|
||||||
|
PA15.Signal=S_TIM8_CH1
|
||||||
PA4.GPIOParameters=GPIO_Speed,GPIO_PuPd
|
PA4.GPIOParameters=GPIO_Speed,GPIO_PuPd
|
||||||
PA4.GPIO_PuPd=GPIO_PULLUP
|
PA4.GPIO_PuPd=GPIO_PULLUP
|
||||||
PA4.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
|
PA4.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
|
||||||
@@ -163,6 +169,10 @@ SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface
|
|||||||
SH.S_TIM3_CH1.ConfNb=1
|
SH.S_TIM3_CH1.ConfNb=1
|
||||||
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
|
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
|
||||||
SH.S_TIM3_CH2.ConfNb=1
|
SH.S_TIM3_CH2.ConfNb=1
|
||||||
|
SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1
|
||||||
|
SH.S_TIM8_CH1.ConfNb=1
|
||||||
|
SH.S_TIM8_CH2.0=TIM8_CH2,PWM Generation2 CH2
|
||||||
|
SH.S_TIM8_CH2.ConfNb=1
|
||||||
TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
||||||
TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||||
@@ -173,6 +183,11 @@ TIM2.IPParameters=PeriodNoDither,EncoderMode
|
|||||||
TIM2.PeriodNoDither=65535
|
TIM2.PeriodNoDither=65535
|
||||||
TIM3.EncoderMode=TIM_ENCODERMODE_TI12
|
TIM3.EncoderMode=TIM_ENCODERMODE_TI12
|
||||||
TIM3.IPParameters=EncoderMode
|
TIM3.IPParameters=EncoderMode
|
||||||
|
TIM8.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
||||||
|
TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
|
TIM8.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||||
|
TIM8.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,PeriodNoDither,AutoReloadPreload
|
||||||
|
TIM8.PeriodNoDither=630
|
||||||
USB_DEVICE.CLASS_NAME_FS=CDC
|
USB_DEVICE.CLASS_NAME_FS=CDC
|
||||||
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS
|
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS
|
||||||
USB_DEVICE.VirtualMode=Cdc
|
USB_DEVICE.VirtualMode=Cdc
|
||||||
@@ -183,6 +198,8 @@ VP_SYS_VS_Systick.Mode=SysTick
|
|||||||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
||||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||||
|
VP_TIM8_VS_ClockSourceINT.Mode=Internal
|
||||||
|
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
|
||||||
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
|
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
|
||||||
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||||
board=custom
|
board=custom
|
||||||
|
|||||||
Reference in New Issue
Block a user