This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS:123

Guru**** 1127450 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/828279/ccs-123

工具/软件:Code Composer Studio

/*用户代码 begin Header */
/**
秘书长的报告
*@文件:main.c
*@简介:主要节目机构
秘书长的报告
*@注意
*
*

Copyright版权所有(c) 2019 STMicroelectronics。
*保留所有权利。


*
*此软件组件由 ST 根据 BSD 3条款许可、
*"许可证";除非符合、否则不得使用此文件
*许可证。 您可以在以下位置获取许可证副本:
* opensource.org/licenses/BSD-3-Clause
*
秘书长的报告
*
/*用户代码结尾标头*/

/*包括------------------------------------------ *
#include "main.h"

/*私有包括---------------------------------------------- *
/*用户代码 begin 包括*/
#include "stm32f1xx_hal.h"
/*用户代码末尾包括*/

/*私人 typedef ------------------------------------------------------- *
/*用户代码 begin PTD */

/*用户代码结束 PTD */

/*私人定义------------------------------------------------------- *
/* USER CODE BEGIN PD */
#define Ref_value 0.454
#define Step_Size 4095
#define KP 0.6201
#define Ki 1.0
#define maximum_ADC_VOLTAGE 3.29
/*用户代码末尾 PD */

/*私有宏------------------------------------------------------- *
/*用户代码 begin PM */

/*用户代码结束 PM */

/*私有变量------------------------------------------------------- *
ADC_HandleTypeDef hadc1;

TIM_HandleTypeDef htim1;

/*用户代码 begin PV */
uint16_t ADC_Value=0;
浮点 ADC_Voltage = 0;
fPIerrorIn = 0;
float Error_Value=0;
浮点中间值= 0;
浮点输出= 0;
float pi_out =0;
float new = 0;
TIM_MasterConfigTypeDef sMasterConfig ={0};
TIM_OC_InitTypeDef sConfigOC ={0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig ={0};
/*用户代码末尾 PV */

/*私有函数原型------------------------------------------------------- *
void SystemClock_Config (void);
静态空 MX_GPIO_Init (空);
静态空 MX_ADC1_Init (空);
静态空 MX_TIM1_Init (空);
/*用户代码 begin PFP */
void Start_adc();
void PWM_Change();
void Start_pwm ();
float pi_closed_Loop (float);
float led_Engine();
/*用户代码末尾 PFP */

/*私人用户代码------------------------------------------------------- *
/*用户代码开始0 */

/*用户代码结束0 */

/**
*@简要介绍应用程序入口点。
*@retval int
*
int main (空)

/*用户代码 begin 1 */

/*用户代码结束1 */

/* MCU 配置------------------------------------------------------- *

/*复位所有外设、初始化闪存接口和 SysTick。 *
HAL_Init();

/*用户代码 begin Init */

/*用户代码结束初始化*/

/*配置系统时钟*/
SystemClock_Config();

/*用户代码 begin sysinit */

/*用户代码结束 sysinit */

/*初始化所有已配置的外设*/
mx_GPIO_Init();
mx_ADC1_Init();
MX_TIM1_Init();
/*用户代码 begin 2 */

/*用户代码末尾2 */

/*无限循环*/
/*用户代码在*/时开始
while (1)

start_adc();
START_PWM();
PWM_Change();
HAL_DELAY (0.1);
LED_Engine ();
/*用户代码结束,同时*/

/*用户代码 begin 3 */

/*用户代码结束3 */

/**
*@简要系统时钟配置
*@Retval 无
*
空系统时钟配置(空)

RCC_OscInitTypeDef RCC_OscInitStruct={0};
RCC_ClkInitTypeDef RCC_ClkInitStruct={0};
RCC_PeriphCLKInitTypeDef PeriphClkInit ={0};

/**初始化 CPU、AHB 和 APB 总线时钟
*
RCC_OscInitStruct.OscatorType = RCC_OSCILATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.Prediv1源= RCC_PreDIV1_Source_PLL2;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON;
RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8;
RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5;
IF (HAL_RCC_OscConfig (&RCC_OscInitStruct)!= HAL_OK)

ERROR_Handler();

/**初始化 CPU、AHB 和 APB 总线时钟
*
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLK 分频器= RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, flash_latit_2)!= HAL_OK)

ERROR_Handler();

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit)!= HAL_OK)

ERROR_Handler();

/**配置 SysTick 中断时间
*
_HAL_RCC_PLLI2S_ENABLE ();

/**
*@简要 ADC1初始化函数
*@param 无
*@Retval 无
*
静态空 MX_ADC1_Init (空)

/*用户代码 begin ADC1_Init 0 */

/*用户代码 END ADC1_Init 0 */

ADC_ChannelConfTypeDef sconfig ={0};

/*用户代码 begin ADC1_Init 1 */

/*用户代码 end ADC1_Init 1 */
/**通用配置
*
hadc1.instance = adc1;
hadc1.Init.ScanConvMode = adc_scan_disable;
hadc1.Init.ContinuousConvMode =启用;
hadc1.Init.DiscontinuousConvMode =禁用;
hadc1.Init.ExternalTrigConv = adc_software_start;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
if (HAL_ADC_Init(&hadc1)!= HAL_OK)

ERROR_Handler();

/**配置常规信道
*
sconfig.Channel = ADC_CHANGE_8;
sconfig.Rank = ADC_Regal_Rank_1;
sconfig.SamplingTime = ADC_SAMPLETIME_41CYCLES_5;
if (HAL_ADC_ConfigChannel (&hadc1、&sconfig)!= HAL_OK)

ERROR_Handler();

/*用户代码 begin ADC1_Init 2 */

/*用户代码 end ADC1_Init 2 */

/**
*@TIM1初始化函数简介
*@param 无
*@Retval 无
*
静态空 MX_TIM1_Init (空)

/*用户代码 begin TIM1_Init 0 */

/*用户代码结束 TIM1_Init 0 */

TIM_MasterConfigTypeDef sMasterConfig ={0};
TIM_OC_InitTypeDef sConfigOC ={0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig ={0};

/*用户代码 begin TIM1_Init 1 */

/*用户代码结束 TIM1_Init 1 */
hdim1.instance = TIM1;
Htim1.Init.Prescaler = 0;
Htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.period = 71;
Htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
hdim1.Init.RefetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init (&htim1)!= HAL_OK)

ERROR_Handler();

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_Timex_MasterConfigSynchronization (&htim1、&sMasterConfig)!= HAL_OK)

ERROR_Handler();

sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 30;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFast_disable;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel (&htim1、&sConfigOC、TIM_CHANNEL 2)!= HAL_OK)

ERROR_Handler();

sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.dadtime = 1;
sBreakDeadTimeConfig.BreakState = TIM_break_disable;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_Timex_ConfigBreakDeadTime (&htim1、&sBreakDeadTimeConfig)!= HAL_OK)

ERROR_Handler();

/*用户代码 begin TIM1_Init 2 */

/*用户代码结束 TIM1_Init 2 */
HAL_TIM_MspPostInit(&Htim1);

/**
*@简单 GPIO 初始化函数
*@param 无
*@Retval 无
*
静态空 MX_GPIO_Init (空)

/* GPIO 端口时钟启用*/
_HAL_RCC_GPIOD_CLK_ENABLE ();
_HAL_RCC_GPIOB_CLK_ENABLE ();
_HAL_RCC_GPIOA_CLK_ENABLE ();

/*用户代码 begin 4 */
空 Start_adc ()

HAL_ADC_Start (&hadc1);
ADC_Value = HAL_ADC_GetValue (&hadc1);

空 Start_PWM ()

/*启动计时器1*/的通道1
if (HAL_TIM_PWM_Start (&hmim1、TIM_CHANNEL 2)!= HAL_OK)

ERROR_Handler();

/*启动通道1N*/
if (HAL_Timex_PWMn_Start (&htim1、TIM_CHANNEL_2)!= HAL_OK)

ERROR_Handler();


void PWM_Change ()

ADC_Voltage =((ADC_Value* maximum_ADC_VOLTAGE)/步长);



float led_Engine()

pi_out=pi_closed_Loop (adc_Voltage-Ref_value);

NEW = 1 - PI_OUT;

if (ADC_Voltage>0.48)

sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = new*71;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFast_disable;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel (&htim1、&sConfigOC、TIM_CHANNEL 2)!= HAL_OK)

ERROR_Handler();

sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.dadtime = 1;
sBreakDeadTimeConfig.BreakState = TIM_break_disable;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_Timex_ConfigBreakDeadTime (&htim1、&sBreakDeadTimeConfig)!= HAL_OK)

ERROR_Handler();

IF (ADC_Voltage<0.48)

sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 65;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFast_disable;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel (&htim1、&sConfigOC、TIM_CHANNEL 2)!= HAL_OK)

ERROR_Handler();

sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.dadtime = 1;
sBreakDeadTimeConfig.BreakState = TIM_break_disable;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_Timex_ConfigBreakDeadTime (&htim1、&sBreakDeadTimeConfig)!= HAL_OK)

ERROR_Handler();

// HAL_DELAY (1000);
//
// HAL_TIM_PWM_Stop (&hmim1、TIM_CHANNEL 2);
// HAL_Timex_PWMn_Stop (&htim1、TIM_CHANNEL_2);
//
// HAL_DELAY (1000);
//
// HAL_TIM_PWM_Start (&htim1、TIM_CHANNEL 2);
// HAL_Timex_PWMn_Start (&htim1、TIM_CHANNEL_2);
//
// HAL_DELAY (1000);
//
// HAL_TIM_PWM_Stop (&hmim1、TIM_CHANNEL 2);
// HAL_Timex_PWMn_Stop (&htim1、TIM_CHANNEL_2);
//

float pi_closed_Loop (fPIerrorIn)

ERROR_VALUE = fPIerrorIn;// fPIerrorIn 是 PI 控制器的输入

中间值=中间值+(Error_Value*(1/1000000)*Ki);

output=(KP*Error_Value)+ Intermedial_value;

返回输出;

/*用户代码结束4 */

/**
*@简述如果发生错误、则执行此函数。
*@Retval 无
*
空 Error_Handler (空)

/*用户代码 begin Error_Handler_debug */
/*用户可以添加自己的实现以报告 HAL 错误返回状态*/

/*用户代码 End Error_Handler_debug */

#ifdef use_full_assert
/**
*@brief 会报告源文件的名称和源行号
*发生了 assert_param 错误的位置。
*@param 文件:指向源文件名的指针
*@param 行:assert_param 错误行源代码
*@Retval 无
*
void assert_failed (uint8_t *文件、uint32_t 行)

/*用户代码 begin 6 */
/*用户可以添加自己的实施以报告文件名和行号,
TEX:printf ("错误的参数值:第%d\r\n"行上的文件%s、文件、行)*/
/*用户代码结束6 */

#endif /* use_full_assert */

/******** (c)版权所有 STMicroelectronics ***** 文件末尾****/

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gaurav、

    您的问题是什么?  您发布了 STM MCU 的一些代码。  您是否正在尝试将其连接到 TI MCU?  如果是、哪一个?

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gaurav、

    您能告诉我您使用的是什么 MCU 吗?

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将关闭该线程。  我怀疑您可能是想用 ST 而不是 TI 发布。  如果这是关于将代码从 ST MCU 移植到 TI MCU、请回复并告诉我您要移植到的 TI MCU。

    此致、

    John