@@ -36,12 +36,21 @@ extern TIM_HandleTypeDef htim2; | |||
extern TIM_HandleTypeDef htim10; | |||
extern TIM_HandleTypeDef htim11; | |||
extern TIM_HandleTypeDef htim13; | |||
extern TIM_HandleTypeDef htim14; | |||
/* USER CODE BEGIN Private defines */ | |||
/* USER CODE END Private defines */ | |||
void MX_TIM2_Init(void); | |||
void MX_TIM10_Init(void); | |||
void MX_TIM11_Init(void); | |||
void MX_TIM13_Init(void); | |||
void MX_TIM14_Init(void); | |||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); | |||
@@ -113,7 +113,7 @@ int main(void) | |||
HAL_Init(); | |||
/* USER CODE BEGIN Init */ | |||
PVD_Init(); | |||
/* USER CODE END Init */ | |||
/* Configure the system clock */ | |||
@@ -131,6 +131,9 @@ int main(void) | |||
MX_USART1_UART_Init(); | |||
MX_TIM10_Init(); | |||
MX_TIM2_Init(); | |||
MX_TIM11_Init(); | |||
MX_TIM13_Init(); | |||
MX_TIM14_Init(); | |||
/* USER CODE BEGIN 2 */ | |||
@@ -267,41 +270,78 @@ void Y1Direction(void *p_arg) | |||
while(1) | |||
{ | |||
/* 脉冲加减速 */ | |||
/* 获取加减速所需要的脉冲数 */ | |||
GetAddCount(); | |||
/* 段切换时的脉冲加减速 */ | |||
if (ArrFlag == 1) | |||
{ | |||
if(TIM2->CNT < Options.AccUpTime) | |||
/* 脉冲加速 */ | |||
if (Acc > 0) | |||
{ | |||
if (TIM2->CNT < AccUpCount) | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc); | |||
if (TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */ | |||
} | |||
else | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency); | |||
ArrFlag = 0; | |||
} | |||
} | |||
/* 脉冲减速 */ | |||
else if (Acc <= 0) | |||
{ | |||
if (TIM2->CNT < AccDownCount) | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc); | |||
if(TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */ | |||
} | |||
else | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency); | |||
ArrFlag = 0; | |||
} | |||
} | |||
} | |||
/* 最后一段脉冲的减速 */ | |||
if (NowPulse == Options.AllPulse - 1) | |||
{ | |||
Acc = - (float)PulseOutput[NowPulse].Frequency / (float)AccDownCount;/* 计算加速度 */ | |||
if (TIM2->CNT > PulseOutput[NowPulse].PulseCount - AccUpCount - AccDownCount) /* 当达到脉冲减速的位置开始减速 */ | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency + TIM2->CNT * Acc); | |||
} | |||
} | |||
/* 第一段脉冲的加速 */ | |||
if (NowPulse == Options.StartPulse) | |||
{ | |||
Acc = (float)PulseOutput[NowPulse].Frequency / (float)AccUpCount;/* 计算加速度 */ | |||
if (AccUpCount < PulseOutput[NowPulse].PulseCount)//如果能够完成加速 | |||
{ | |||
if(TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */ | |||
SetFrequency(0, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc); | |||
if(TIM2->CNT < AccUpCount) | |||
{ | |||
SetFrequency(Options.SentPost, TIM2->CNT * Acc); | |||
} | |||
else | |||
{ | |||
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency); | |||
} | |||
} | |||
else | |||
else //不能完成加速 | |||
{ | |||
SetFrequency(0, PulseOutput[NowPulse].Frequency); | |||
ArrFlag = 0; | |||
} | |||
} | |||
AllPulseCNT = BaseCNT + TIM2->CNT; | |||
CountSave(); | |||
// /* 获取总的脉冲数 */ | |||
// if(EndFlag || FullFlag) | |||
// { | |||
// if(EndFlag) | |||
// { | |||
// AllPulseCNT = GetBase(NowPulse) + PulseOutput[NowPulse].PulseCount; | |||
// } | |||
// if(FullFlag) | |||
// { | |||
// AllPulseCNT = MAX_Pulse; | |||
// } | |||
// | |||
// } | |||
// else | |||
// { | |||
// AllPulseCNT = TIM2->CNT + GetBase(NowPulse); | |||
// } | |||
OSTimeDly(100, OS_OPT_TIME_DLY, &err); // 延时 100 个节拍 | |||
} | |||
} | |||
@@ -319,8 +359,11 @@ void PulseStartTsk(void *p_arg) | |||
while(1) | |||
{ | |||
PLSRPluseLoad(); //读取脉冲设置 | |||
PLSROptionLoad(); //读取脉冲基础设置 | |||
if(Register_L[0x3000] == 0x01 && EN == 1) | |||
{ | |||
{ | |||
PulseStart(); | |||
EN = 0; | |||
} | |||
@@ -328,9 +371,9 @@ void PulseStartTsk(void *p_arg) | |||
{ | |||
EN = 1; | |||
} | |||
PLSRPluseLoad(); //读取脉冲设置 | |||
PLSROptionLoad(); //读取脉冲基础设置 | |||
ModbusSaveSRAM(); | |||
OSTimeDly(100, OS_OPT_TIME_DLY, &err); // 延时 100 个节拍 | |||
} | |||
} | |||
@@ -397,129 +440,6 @@ void DirOutput(void *p_arg) | |||
} | |||
} | |||
#if 0 | |||
/** | |||
* @brief 定时器中断回调(PWM计数) | |||
* @return 无 | |||
*/ | |||
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) | |||
{ | |||
if (htim->Instance == TIM10) | |||
{ | |||
PulseCount++; | |||
if (1 == Base.PulseMod) /* 如果是绝对模式 */ | |||
{ | |||
if (TIM2->CNT == Base.MAX_Pulse) /* 达到了最大脉冲数 */ | |||
{ | |||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
} | |||
else if(PulseCount == PulseOutput[NowPulse].PulseCount) /* 如果当前段的计数等于要求的计数 */ | |||
{ | |||
PulseCount = 0; | |||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
if(Base.PulseNum - NowPulse >= 1) | |||
{ | |||
Base.PrePulse = NowPulse; /* 保存之前的脉冲段 */ | |||
if(PulseOutput[NowPulse].NextPulse == 0) | |||
{ | |||
NowPulse = NowPulse+ 1; | |||
} | |||
else | |||
{ | |||
NowPulse = PulseOutput[NowPulse].NextPulse; /* 进入下一段脉冲 */ | |||
} | |||
Acc = GetAcc(PulseOutput[Base.PrePulse].Frequency, | |||
PulseOutput[NowPulse].Frequency, Base.AccCount); /* 计算Acc */ | |||
ArrFlag = 1; | |||
PulseStart(); //开始产生脉冲 | |||
} | |||
} | |||
} | |||
else if (0 == Base.PulseMod) /* 如果是相对模式 */ | |||
{ | |||
if (PulseCount == PulseOutput[NowPulse].PulseCount) /* 如果当前段的计数等于要求的计数 */ | |||
{ | |||
PulseCount = 0; | |||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
if(Base.PulseNum - NowPulse > 1) | |||
{ | |||
Base.PrePulse = NowPulse; /* 保存之前的脉冲段 */ | |||
if(PulseOutput[NowPulse].NextPulse == 0) | |||
{ | |||
NowPulse = NowPulse+ 1; | |||
} | |||
else | |||
{ | |||
NowPulse = PulseOutput[NowPulse].NextPulse; /* 进入下一段脉冲 */ | |||
} | |||
Acc = GetAcc(PulseOutput[Base.PrePulse].Frequency, | |||
PulseOutput[NowPulse].Frequency, Base.AccCount); /* 计算Acc */ | |||
ArrFlag = 1; | |||
PulseStart(); //开始产生脉冲 | |||
} | |||
else | |||
{ | |||
PulseCount = 0; | |||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
} | |||
} | |||
} | |||
if (ArrFlag == 1) | |||
{ | |||
if(PulseCount < Base.AccCount) | |||
{ | |||
SetFrequency(0, PulseOutput[Base.PrePulse].Frequency + PulseCount * Acc); | |||
} | |||
else | |||
{ | |||
SetFrequency(0, PulseOutput[NowPulse].Frequency); | |||
ArrFlag = 0; | |||
} | |||
} | |||
} | |||
} | |||
#endif | |||
/** | |||
* @brief 掉电中断 | |||
* @return 无 | |||
*/ | |||
void HAL_PWR_PVDCallback(void) | |||
{ | |||
OSIntEnter(); /* 进入中断 */ | |||
// 检查电压是否低于阈值 | |||
if (__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO)) | |||
{ | |||
HAL_GPIO_TogglePin(GPIOH, Y12_Pin); | |||
/* 掉电处理内容 */ | |||
ModbusSaveSRAM(); | |||
} | |||
OSIntExit(); /* 退出中断 */ | |||
} | |||
/** | |||
* @brief PVD配置 | |||
* @return 无 | |||
*/ | |||
void PVD_Init(void) | |||
{ | |||
PWR_PVDTypeDef PvdStruct; | |||
HAL_PWR_EnablePVD(); /* 使能PVD */ | |||
PvdStruct.PVDLevel = PWR_PVDLEVEL_5; /* PVD阈值3.1V */ | |||
PvdStruct.Mode = PWR_PVD_MODE_IT_RISING; /* 检测掉电 */ | |||
HAL_PWR_ConfigPVD(&PvdStruct); | |||
HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* 配置PVD中断优先级 */ | |||
HAL_NVIC_EnableIRQ(PVD_IRQn); /* 使能PVD中断 */ | |||
} | |||
/* USER CODE END 4 */ | |||
/** | |||
@@ -217,6 +217,7 @@ void TIM2_IRQHandler(void) | |||
HAL_TIM_IRQHandler(&htim2); | |||
/* USER CODE BEGIN TIM2_IRQn 1 */ | |||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
PulseNum ++; /* 脉冲段数增加 */ | |||
BaseCNT += TIM2->ARR; | |||
@@ -236,10 +237,19 @@ void TIM2_IRQHandler(void) | |||
} | |||
/* 准备加减速 */ | |||
Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */ | |||
ArrFlag = 1; | |||
if(PulseOutput[PrePulse].Frequency <= PulseOutput[NowPulse].Frequency) | |||
{ | |||
Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */ | |||
} | |||
else | |||
{ | |||
Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
PulseOutput[NowPulse].Frequency, Options.AccDownTime); /* 计算加速度 */ | |||
} | |||
ArrFlag = 1; | |||
SetNextPulse();/* 设置下一次进入中断的脉冲数 */ | |||
} | |||
@@ -26,6 +26,9 @@ | |||
TIM_HandleTypeDef htim2; | |||
TIM_HandleTypeDef htim10; | |||
TIM_HandleTypeDef htim11; | |||
TIM_HandleTypeDef htim13; | |||
TIM_HandleTypeDef htim14; | |||
/* TIM2 init function */ | |||
void MX_TIM2_Init(void) | |||
@@ -118,6 +121,129 @@ void MX_TIM10_Init(void) | |||
/* USER CODE END TIM10_Init 2 */ | |||
HAL_TIM_MspPostInit(&htim10); | |||
} | |||
/* TIM11 init function */ | |||
void MX_TIM11_Init(void) | |||
{ | |||
/* USER CODE BEGIN TIM11_Init 0 */ | |||
/* USER CODE END TIM11_Init 0 */ | |||
TIM_OC_InitTypeDef sConfigOC = {0}; | |||
/* USER CODE BEGIN TIM11_Init 1 */ | |||
/* USER CODE END TIM11_Init 1 */ | |||
htim11.Instance = TIM11; | |||
htim11.Init.Prescaler = 0; | |||
htim11.Init.CounterMode = TIM_COUNTERMODE_UP; | |||
htim11.Init.Period = 65535; | |||
htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | |||
htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | |||
if (HAL_TIM_Base_Init(&htim11) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
if (HAL_TIM_PWM_Init(&htim11) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sConfigOC.OCMode = TIM_OCMODE_PWM1; | |||
sConfigOC.Pulse = 0; | |||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | |||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | |||
if (HAL_TIM_PWM_ConfigChannel(&htim11, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/* USER CODE BEGIN TIM11_Init 2 */ | |||
/* USER CODE END TIM11_Init 2 */ | |||
HAL_TIM_MspPostInit(&htim11); | |||
} | |||
/* TIM13 init function */ | |||
void MX_TIM13_Init(void) | |||
{ | |||
/* USER CODE BEGIN TIM13_Init 0 */ | |||
/* USER CODE END TIM13_Init 0 */ | |||
TIM_OC_InitTypeDef sConfigOC = {0}; | |||
/* USER CODE BEGIN TIM13_Init 1 */ | |||
/* USER CODE END TIM13_Init 1 */ | |||
htim13.Instance = TIM13; | |||
htim13.Init.Prescaler = 0; | |||
htim13.Init.CounterMode = TIM_COUNTERMODE_UP; | |||
htim13.Init.Period = 65535; | |||
htim13.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | |||
htim13.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | |||
if (HAL_TIM_Base_Init(&htim13) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
if (HAL_TIM_PWM_Init(&htim13) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sConfigOC.OCMode = TIM_OCMODE_PWM1; | |||
sConfigOC.Pulse = 0; | |||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | |||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | |||
if (HAL_TIM_PWM_ConfigChannel(&htim13, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/* USER CODE BEGIN TIM13_Init 2 */ | |||
/* USER CODE END TIM13_Init 2 */ | |||
HAL_TIM_MspPostInit(&htim13); | |||
} | |||
/* TIM14 init function */ | |||
void MX_TIM14_Init(void) | |||
{ | |||
/* USER CODE BEGIN TIM14_Init 0 */ | |||
/* USER CODE END TIM14_Init 0 */ | |||
TIM_OC_InitTypeDef sConfigOC = {0}; | |||
/* USER CODE BEGIN TIM14_Init 1 */ | |||
/* USER CODE END TIM14_Init 1 */ | |||
htim14.Instance = TIM14; | |||
htim14.Init.Prescaler = 0; | |||
htim14.Init.CounterMode = TIM_COUNTERMODE_UP; | |||
htim14.Init.Period = 65535; | |||
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | |||
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | |||
if (HAL_TIM_Base_Init(&htim14) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
if (HAL_TIM_PWM_Init(&htim14) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sConfigOC.OCMode = TIM_OCMODE_PWM1; | |||
sConfigOC.Pulse = 0; | |||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | |||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | |||
if (HAL_TIM_PWM_ConfigChannel(&htim14, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/* USER CODE BEGIN TIM14_Init 2 */ | |||
/* USER CODE END TIM14_Init 2 */ | |||
HAL_TIM_MspPostInit(&htim14); | |||
} | |||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) | |||
@@ -161,6 +287,39 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) | |||
/* USER CODE END TIM10_MspInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM11) | |||
{ | |||
/* USER CODE BEGIN TIM11_MspInit 0 */ | |||
/* USER CODE END TIM11_MspInit 0 */ | |||
/* TIM11 clock enable */ | |||
__HAL_RCC_TIM11_CLK_ENABLE(); | |||
/* USER CODE BEGIN TIM11_MspInit 1 */ | |||
/* USER CODE END TIM11_MspInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM13) | |||
{ | |||
/* USER CODE BEGIN TIM13_MspInit 0 */ | |||
/* USER CODE END TIM13_MspInit 0 */ | |||
/* TIM13 clock enable */ | |||
__HAL_RCC_TIM13_CLK_ENABLE(); | |||
/* USER CODE BEGIN TIM13_MspInit 1 */ | |||
/* USER CODE END TIM13_MspInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM14) | |||
{ | |||
/* USER CODE BEGIN TIM14_MspInit 0 */ | |||
/* USER CODE END TIM14_MspInit 0 */ | |||
/* TIM14 clock enable */ | |||
__HAL_RCC_TIM14_CLK_ENABLE(); | |||
/* USER CODE BEGIN TIM14_MspInit 1 */ | |||
/* USER CODE END TIM14_MspInit 1 */ | |||
} | |||
} | |||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) | |||
{ | |||
@@ -171,7 +330,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) | |||
/* USER CODE BEGIN TIM10_MspPostInit 0 */ | |||
/* USER CODE END TIM10_MspPostInit 0 */ | |||
__HAL_RCC_GPIOF_CLK_ENABLE(); | |||
/**TIM10 GPIO Configuration | |||
PF6 ------> TIM10_CH1 | |||
@@ -187,6 +345,69 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) | |||
/* USER CODE END TIM10_MspPostInit 1 */ | |||
} | |||
else if(timHandle->Instance==TIM11) | |||
{ | |||
/* USER CODE BEGIN TIM11_MspPostInit 0 */ | |||
/* USER CODE END TIM11_MspPostInit 0 */ | |||
__HAL_RCC_GPIOF_CLK_ENABLE(); | |||
/**TIM11 GPIO Configuration | |||
PF7 ------> TIM11_CH1 | |||
*/ | |||
GPIO_InitStruct.Pin = GPIO_PIN_7; | |||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | |||
GPIO_InitStruct.Pull = GPIO_NOPULL; | |||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | |||
GPIO_InitStruct.Alternate = GPIO_AF3_TIM11; | |||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); | |||
/* USER CODE BEGIN TIM11_MspPostInit 1 */ | |||
/* USER CODE END TIM11_MspPostInit 1 */ | |||
} | |||
else if(timHandle->Instance==TIM13) | |||
{ | |||
/* USER CODE BEGIN TIM13_MspPostInit 0 */ | |||
/* USER CODE END TIM13_MspPostInit 0 */ | |||
__HAL_RCC_GPIOF_CLK_ENABLE(); | |||
/**TIM13 GPIO Configuration | |||
PF8 ------> TIM13_CH1 | |||
*/ | |||
GPIO_InitStruct.Pin = GPIO_PIN_8; | |||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | |||
GPIO_InitStruct.Pull = GPIO_NOPULL; | |||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | |||
GPIO_InitStruct.Alternate = GPIO_AF9_TIM13; | |||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); | |||
/* USER CODE BEGIN TIM13_MspPostInit 1 */ | |||
/* USER CODE END TIM13_MspPostInit 1 */ | |||
} | |||
else if(timHandle->Instance==TIM14) | |||
{ | |||
/* USER CODE BEGIN TIM14_MspPostInit 0 */ | |||
/* USER CODE END TIM14_MspPostInit 0 */ | |||
__HAL_RCC_GPIOF_CLK_ENABLE(); | |||
/**TIM14 GPIO Configuration | |||
PF9 ------> TIM14_CH1 | |||
*/ | |||
GPIO_InitStruct.Pin = GPIO_PIN_9; | |||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | |||
GPIO_InitStruct.Pull = GPIO_NOPULL; | |||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | |||
GPIO_InitStruct.Alternate = GPIO_AF9_TIM14; | |||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); | |||
/* USER CODE BEGIN TIM14_MspPostInit 1 */ | |||
/* USER CODE END TIM14_MspPostInit 1 */ | |||
} | |||
} | |||
@@ -223,6 +444,39 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) | |||
/* USER CODE END TIM10_MspDeInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM11) | |||
{ | |||
/* USER CODE BEGIN TIM11_MspDeInit 0 */ | |||
/* USER CODE END TIM11_MspDeInit 0 */ | |||
/* Peripheral clock disable */ | |||
__HAL_RCC_TIM11_CLK_DISABLE(); | |||
/* USER CODE BEGIN TIM11_MspDeInit 1 */ | |||
/* USER CODE END TIM11_MspDeInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM13) | |||
{ | |||
/* USER CODE BEGIN TIM13_MspDeInit 0 */ | |||
/* USER CODE END TIM13_MspDeInit 0 */ | |||
/* Peripheral clock disable */ | |||
__HAL_RCC_TIM13_CLK_DISABLE(); | |||
/* USER CODE BEGIN TIM13_MspDeInit 1 */ | |||
/* USER CODE END TIM13_MspDeInit 1 */ | |||
} | |||
else if(tim_baseHandle->Instance==TIM14) | |||
{ | |||
/* USER CODE BEGIN TIM14_MspDeInit 0 */ | |||
/* USER CODE END TIM14_MspDeInit 0 */ | |||
/* Peripheral clock disable */ | |||
__HAL_RCC_TIM14_CLK_DISABLE(); | |||
/* USER CODE BEGIN TIM14_MspDeInit 1 */ | |||
/* USER CODE END TIM14_MspDeInit 1 */ | |||
} | |||
} | |||
/* USER CODE BEGIN 1 */ | |||
@@ -20,7 +20,7 @@ | |||
<LeaveTargetRunning>_ 0</LeaveTargetRunning> | |||
</StLinkDriver> | |||
<DebugChecksum> | |||
<Checksum>2315233233</Checksum> | |||
<Checksum>3713707742</Checksum> | |||
</DebugChecksum> | |||
<Exceptions> | |||
<StopOnUncaught>_ 0</StopOnUncaught> | |||
@@ -60,11 +60,12 @@ | |||
<regBase0>TIM2_CNT 10</regBase0> | |||
</Registers> | |||
<struct_types> | |||
<Fmt0>Option-AccUpTime 3 0</Fmt0> | |||
<Fmt1>Option-InitSpeed 3 0</Fmt1> | |||
<Fmt2>Pulse-Frequency 3 0</Fmt2> | |||
<Fmt3>Pulse-NextPulse 3 0</Fmt3> | |||
<Fmt4>Pulse-PulseCount 3 0</Fmt4> | |||
<Fmt0>Option-AccDownTime 3 0</Fmt0> | |||
<Fmt1>Option-AccUpTime 3 0</Fmt1> | |||
<Fmt2>Option-InitSpeed 3 0</Fmt2> | |||
<Fmt3>Pulse-Frequency 3 0</Fmt3> | |||
<Fmt4>Pulse-NextPulse 3 0</Fmt4> | |||
<Fmt5>Pulse-PulseCount 3 0</Fmt5> | |||
</struct_types> | |||
<array_types> | |||
<Fmt0>uint8_t[10000] 4 0</Fmt0> | |||
@@ -14,14 +14,15 @@ uint8_t NowPulse; /* | |||
uint8_t PrePulse; /* 之前处于第几段脉冲 */ | |||
uint8_t PulseNum; /* 一共有多少段脉冲 */ | |||
int32_t MAX_Pulse; /* 最多的脉冲数 */ | |||
int32_t AccCount; /* 加速脉冲数 */ | |||
int32_t AccUpCount; /* 加速脉冲数 */ | |||
int32_t AccDownCount; /* 减速脉冲数 */ | |||
int32_t NowMAXPulse; /* 当前要达到的总脉冲 */ | |||
int32_t PulseCount = 0; | |||
/** | |||
* @brief 根据脉冲的频率设置对应的PSC和ARR | |||
* @param[in] SentPost 脉冲通道(目前只有通道Y0) | |||
* @param[in] SentPost 脉冲通道 | |||
* @param[in] Ferquency 脉冲的频率 | |||
* @return 无 | |||
*/ | |||
@@ -31,6 +32,9 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency) | |||
switch(SentPost) | |||
{ | |||
case 0: TIM10->ARR = arr, TIM10->PSC = psc, TIM10->CCR1 = arr / 2; break; | |||
case 1: TIM11->ARR = arr, TIM11->PSC = psc, TIM11->CCR1 = arr / 2; break; | |||
case 2: TIM13->ARR = arr, TIM13->PSC = psc, TIM13->CCR1 = arr / 2; break; | |||
case 3: TIM14->ARR = arr, TIM14->PSC = psc, TIM14->CCR1 = arr / 2; break; | |||
} | |||
} | |||
@@ -66,11 +70,24 @@ void PulseBaseInit(uint8_t StartPulse, uint8_t PulseMod, int32_t MAX_Pulse) | |||
MAX_Pulse = MAX_Pulse; | |||
} | |||
/** | |||
* @brief 脉冲开始 | |||
* @param[in] StartPulse 起始脉冲段 | |||
* @return 无 | |||
*/ | |||
void PulseStart(void) | |||
{ | |||
SetFrequency(Options.DirPost, PulseOutput[NowPulse].Frequency); | |||
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency); | |||
TIM2->ARR = PulseOutput[NowPulse].PulseCount; | |||
HAL_TIM_PWM_Start_IT(&htim10, TIM_CHANNEL_1); | |||
switch(Options.SentPost) | |||
{ | |||
case 0: HAL_TIM_PWM_Start_IT(&htim10, TIM_CHANNEL_1); break; | |||
case 1: HAL_TIM_PWM_Start_IT(&htim11, TIM_CHANNEL_1); break; | |||
case 2: HAL_TIM_PWM_Start_IT(&htim13, TIM_CHANNEL_1); break; | |||
case 3: HAL_TIM_PWM_Start_IT(&htim14, TIM_CHANNEL_1); break; | |||
} | |||
} | |||
/** | |||
* @brief 获取加速度 | |||
@@ -207,7 +224,7 @@ void PLSROptionLoad(void) | |||
uint16_t tempH, tempL; | |||
Set8_16(&tempH, &Register_H[0x1009], &Register_L[0x1009]); | |||
Set8_16(&tempL, &Register_H[0x100A], &Register_L[0x100A]); | |||
Set16_32(&InitSpeed, &tempH, &tempL); | |||
Set16_32(&InitSpeed, &tempL, &tempH); | |||
/* 数据读取 */ | |||
Options.SentPost = Register_L[0x1000]; | |||
@@ -220,8 +237,9 @@ void PLSROptionLoad(void) | |||
Options.AllPulse = Register_L[0x1007]; | |||
Options.StartPulse = Register_L[0x1008]; | |||
Options.InitSpeed = InitSpeed; | |||
Options.AccUpTime = Register_L[0x100B]; | |||
Options.AccDownTime = Register_L[0x100C]; | |||
Options.AccUpTime = (Register_H[0x100B]<< 8) | Register_L[0x100B]; | |||
Options.AccDownTime = (Register_H[0x100C]<< 8) | Register_L[0x100C]; | |||
} | |||
void PLSRPluseLoad(void) | |||
@@ -250,6 +268,10 @@ void PLSRPluseLoad(void) | |||
} | |||
} | |||
/** | |||
* @brief 保存总的脉冲数至指定的寄存器 | |||
* @return 无 | |||
*/ | |||
void CountSave(void) | |||
{ | |||
int32_t temp_Count = 0; | |||
@@ -259,9 +281,18 @@ void CountSave(void) | |||
memcpy(&temp_Count, &AllPulseCNT, 4); | |||
DatH = temp_Count / 0xffff; | |||
DatL = temp_Count % 0xffff; | |||
Register_H[0x2001] = DatH / 0xff; | |||
Register_L[0x2001] = DatH % 0xff; | |||
Register_H[0x2000] = DatL / 0xff; | |||
Register_L[0x2000] = DatL % 0xff; | |||
} | |||
Register_H[0x2001] = (DatH >> 8); | |||
Register_L[0x2001] = (DatH & 0x00ff); | |||
Register_H[0x2000] = (DatL >> 8); | |||
Register_L[0x2000] = (DatL & 0x00ff); | |||
} | |||
/** | |||
* @brief 获取加减速的脉冲数 | |||
* @return 无 | |||
*/ | |||
void GetAddCount(void) | |||
{ | |||
AccUpCount = Options.AccUpTime * PulseOutput[NowPulse].Frequency / 1000; | |||
AccDownCount = Options.AccDownTime * PulseOutput[NowPulse].Frequency / 1000; | |||
} |
@@ -25,8 +25,8 @@ typedef struct | |||
uint8_t AllPulse; ///<<脉冲总段数 | |||
uint8_t StartPulse; ///<<起始执行段数 | |||
uint32_t InitSpeed; ///<<脉冲默认速度 | |||
uint8_t AccUpTime; ///<<脉冲默认速度加速时间 | |||
uint8_t AccDownTime; ///<<脉冲默认速度减速时间 | |||
uint16_t AccUpTime; ///<<脉冲默认速度加速时间 | |||
uint16_t AccDownTime; ///<<脉冲默认速度减速时间 | |||
} Option; | |||
/* 变量声明 */ | |||
@@ -37,11 +37,13 @@ extern uint8_t NowPulse; ///<< | |||
extern uint8_t PrePulse; ///<< 之前处于第几段脉冲 | |||
extern uint8_t PulseNum; ///<< 一共有多少段脉冲(中断内使用) | |||
extern int32_t MAX_Pulse; ///<< 最多的脉冲数 | |||
extern int32_t AccCount; ///<<加速脉冲数 | |||
extern int32_t AccUpCount; ///<<加速脉冲数 | |||
extern int32_t AccDownCount;///<<减速脉冲数 | |||
extern int32_t NowMAXPulse; ///<<当前要达到的总脉冲 | |||
extern int32_t PulseCount; | |||
extern int32_t NextPulseEND; | |||
/* 函数声明 */ | |||
void SetFrequency(uint8_t SentPost, uint32_t Frequency); | |||
void SetPulse(uint8_t Pulse, uint32_t Ferquency, int32_t Count, uint8_t Direction, int8_t NextPulse); | |||
@@ -54,6 +56,7 @@ void SetNextPulse(void); | |||
void PLSROptionLoad(void); | |||
void PLSRPluseLoad(void); | |||
void CountSave(void); | |||
void GetAddCount(void); | |||
uint32_t GetBase(uint8_t NowPulseNUM); | |||
@@ -129,7 +129,7 @@ void Frequency_Change_PSC_And_ARR(uint32_t Frequency, uint16_t* psc, uint16_t* a | |||
else | |||
{ | |||
*psc = 1; | |||
*arr = 72000000 / ((*psc) * Frequency); | |||
*arr = 36000000 / ((*psc) * Frequency); | |||
} | |||
} | |||
else | |||
@@ -36,23 +36,34 @@ Mcu.IP2=RCC | |||
Mcu.IP3=SYS | |||
Mcu.IP4=TIM2 | |||
Mcu.IP5=TIM10 | |||
Mcu.IP6=USART1 | |||
Mcu.IPNb=7 | |||
Mcu.IP6=TIM11 | |||
Mcu.IP7=TIM13 | |||
Mcu.IP8=TIM14 | |||
Mcu.IP9=USART1 | |||
Mcu.IPNb=10 | |||
Mcu.Name=STM32F407I(E-G)Tx | |||
Mcu.Package=LQFP176 | |||
Mcu.Pin0=PF6 | |||
Mcu.Pin1=PH0-OSC_IN | |||
Mcu.Pin10=VP_SYS_VS_Systick | |||
Mcu.Pin11=VP_TIM10_VS_ClockSourceINT | |||
Mcu.Pin2=PH1-OSC_OUT | |||
Mcu.Pin3=PH6 | |||
Mcu.Pin4=PH7 | |||
Mcu.Pin5=PH8 | |||
Mcu.Pin6=PH9 | |||
Mcu.Pin7=PA9 | |||
Mcu.Pin8=PA10 | |||
Mcu.Pin9=PA15 | |||
Mcu.PinsNb=12 | |||
Mcu.Pin1=PF7 | |||
Mcu.Pin10=PA9 | |||
Mcu.Pin11=PA10 | |||
Mcu.Pin12=PA13 | |||
Mcu.Pin13=PA14 | |||
Mcu.Pin14=PA15 | |||
Mcu.Pin15=VP_SYS_VS_Systick | |||
Mcu.Pin16=VP_TIM10_VS_ClockSourceINT | |||
Mcu.Pin17=VP_TIM11_VS_ClockSourceINT | |||
Mcu.Pin18=VP_TIM13_VS_ClockSourceINT | |||
Mcu.Pin19=VP_TIM14_VS_ClockSourceINT | |||
Mcu.Pin2=PF8 | |||
Mcu.Pin3=PF9 | |||
Mcu.Pin4=PH0-OSC_IN | |||
Mcu.Pin5=PH1-OSC_OUT | |||
Mcu.Pin6=PH6 | |||
Mcu.Pin7=PH7 | |||
Mcu.Pin8=PH8 | |||
Mcu.Pin9=PH9 | |||
Mcu.PinsNb=20 | |||
Mcu.ThirdPartyNb=0 | |||
Mcu.UserConstants= | |||
Mcu.UserName=STM32F407IGTx | |||
@@ -75,6 +86,10 @@ NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true | |||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | |||
PA10.Mode=Asynchronous | |||
PA10.Signal=USART1_RX | |||
PA13.Mode=Serial_Wire | |||
PA13.Signal=SYS_JTMS-SWDIO | |||
PA14.Mode=Serial_Wire | |||
PA14.Signal=SYS_JTCK-SWCLK | |||
PA15.GPIOParameters=GPIO_Speed | |||
PA15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH | |||
PA15.Locked=true | |||
@@ -83,6 +98,12 @@ PA9.Mode=Asynchronous | |||
PA9.Signal=USART1_TX | |||
PF6.Locked=true | |||
PF6.Signal=S_TIM10_CH1 | |||
PF7.Locked=true | |||
PF7.Signal=S_TIM11_CH1 | |||
PF8.Locked=true | |||
PF8.Signal=S_TIM13_CH1 | |||
PF9.Locked=true | |||
PF9.Signal=S_TIM14_CH1 | |||
PH0-OSC_IN.Mode=HSE-External-Oscillator | |||
PH0-OSC_IN.Signal=RCC_OSC_IN | |||
PH1-OSC_OUT.Mode=HSE-External-Oscillator | |||
@@ -132,7 +153,7 @@ ProjectManager.StackSize=0x400 | |||
ProjectManager.TargetToolchain=EWARM V8 | |||
ProjectManager.ToolChainLocation= | |||
ProjectManager.UnderRoot=false | |||
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_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-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_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM11_Init-TIM11-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_TIM14_Init-TIM14-false-HAL-true | |||
RCC.48MHZClocksFreq_Value=36000000 | |||
RCC.AHBFreq_Value=72000000 | |||
RCC.APB1CLKDivider=RCC_HCLK_DIV2 | |||
@@ -169,6 +190,12 @@ RCC.VCOOutputFreq_Value=144000000 | |||
RCC.VcooutputI2S=192000000 | |||
SH.S_TIM10_CH1.0=TIM10_CH1,PWM Generation1 CH1 | |||
SH.S_TIM10_CH1.ConfNb=1 | |||
SH.S_TIM11_CH1.0=TIM11_CH1,PWM Generation1 CH1 | |||
SH.S_TIM11_CH1.ConfNb=1 | |||
SH.S_TIM13_CH1.0=TIM13_CH1,PWM Generation1 CH1 | |||
SH.S_TIM13_CH1.ConfNb=1 | |||
SH.S_TIM14_CH1.0=TIM14_CH1,PWM Generation1 CH1 | |||
SH.S_TIM14_CH1.ConfNb=1 | |||
SH.S_TIM2_CH1_ETR.0=TIM2_ETR,ClockSourceETR_Mode2 | |||
SH.S_TIM2_CH1_ETR.ConfNb=1 | |||
TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE | |||
@@ -177,6 +204,12 @@ TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1 | |||
TIM10.OCPolarity_1=TIM_OCPOLARITY_LOW | |||
TIM10.Prescaler=72 | |||
TIM10.Pulse=32767 | |||
TIM11.Channel=TIM_CHANNEL_1 | |||
TIM11.IPParameters=Channel | |||
TIM13.Channel=TIM_CHANNEL_1 | |||
TIM13.IPParameters=Channel | |||
TIM14.Channel=TIM_CHANNEL_1 | |||
TIM14.IPParameters=Channel | |||
USART1.BaudRate=19200 | |||
USART1.IPParameters=VirtualMode,BaudRate,Parity,WordLength | |||
USART1.Parity=PARITY_ODD | |||
@@ -186,4 +219,10 @@ VP_SYS_VS_Systick.Mode=SysTick | |||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick | |||
VP_TIM10_VS_ClockSourceINT.Mode=Enable_Timer | |||
VP_TIM10_VS_ClockSourceINT.Signal=TIM10_VS_ClockSourceINT | |||
VP_TIM11_VS_ClockSourceINT.Mode=Enable_Timer | |||
VP_TIM11_VS_ClockSourceINT.Signal=TIM11_VS_ClockSourceINT | |||
VP_TIM13_VS_ClockSourceINT.Mode=Enable_Timer | |||
VP_TIM13_VS_ClockSourceINT.Signal=TIM13_VS_ClockSourceINT | |||
VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer | |||
VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT | |||
board=custom |