Compare commits

..

2 Commits

Author SHA1 Message Date
DomStudent
3fbde591bd Added support for working via timer 2024-05-25 22:54:22 +03:00
DomStudent
3adc9ff7bb Updating the library version 2024-05-25 22:32:27 +03:00
11 changed files with 5446 additions and 32 deletions

File diff suppressed because one or more lines are too long

View File

@@ -12,8 +12,10 @@ typedef struct DS_Encoder
uint32_t PrevTick; uint32_t PrevTick;
uint8_t ValueSignal1, ValueSignal2; uint8_t ValueSignal1, ValueSignal2;
TIM_HandleTypeDef *hTim;
}DS_Encoder; }DS_Encoder;
void DS_EncoderInitTim(DS_Encoder *Encoder, TIM_HandleTypeDef *hTim);
void DS_EncoderInit(DS_Encoder *Encoder, GPIO_TypeDef *PortSignal1, uint16_t PinSignal1, GPIO_TypeDef *PortSignal2, uint16_t PinSignal2); void DS_EncoderInit(DS_Encoder *Encoder, GPIO_TypeDef *PortSignal1, uint16_t PinSignal1, GPIO_TypeDef *PortSignal2, uint16_t PinSignal2);

View File

@@ -61,10 +61,6 @@ void Error_Handler(void);
#define CS_GPIO_Port GPIOA #define CS_GPIO_Port GPIOA
#define ENC_Button_Pin GPIO_PIN_5 #define ENC_Button_Pin GPIO_PIN_5
#define ENC_Button_GPIO_Port GPIOA #define ENC_Button_GPIO_Port GPIOA
#define Enc_Line1_Pin GPIO_PIN_6
#define Enc_Line1_GPIO_Port GPIOA
#define Enc_Line2_Pin GPIO_PIN_7
#define Enc_Line2_GPIO_Port GPIOA
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */

View File

@@ -54,7 +54,7 @@ extern "C" {
/* #define HAL_SMARTCARD_MODULE_ENABLED */ /* #define HAL_SMARTCARD_MODULE_ENABLED */
/* #define HAL_SMBUS_MODULE_ENABLED */ /* #define HAL_SMBUS_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED #define HAL_SPI_MODULE_ENABLED
/* #define HAL_TIM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED
/* #define HAL_UART_MODULE_ENABLED */ /* #define HAL_UART_MODULE_ENABLED */
/* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_USART_MODULE_ENABLED */
/* #define HAL_WWDG_MODULE_ENABLED */ /* #define HAL_WWDG_MODULE_ENABLED */

View File

@@ -1,7 +1,16 @@
#include "Encoder.h" #include "Encoder.h"
void DS_EncoderInitTim(DS_Encoder *Encoder, TIM_HandleTypeDef *hTim)
{
Encoder->hTim = hTim;
Encoder->State = 0;
HAL_TIM_Base_Start(Encoder->hTim);
}
void DS_EncoderInit(DS_Encoder *Encoder, GPIO_TypeDef *PortSignal1, uint16_t PinSignal1, GPIO_TypeDef *PortSignal2, uint16_t PinSignal2) void DS_EncoderInit(DS_Encoder *Encoder, GPIO_TypeDef *PortSignal1, uint16_t PinSignal1, GPIO_TypeDef *PortSignal2, uint16_t PinSignal2)
{ {
Encoder->hTim = 0;
Encoder->Direction = 0; Encoder->Direction = 0;
Encoder->State = 0; Encoder->State = 0;
Encoder->PrevTick = HAL_GetTick(); Encoder->PrevTick = HAL_GetTick();
@@ -72,7 +81,19 @@ void DS_EncoderUpdate(DS_Encoder *Encoder)
int8_t DS_EncoderGetState(DS_Encoder *Encoder) int8_t DS_EncoderGetState(DS_Encoder *Encoder)
{ {
int8_t ValueToReturn = Encoder->State; if(Encoder->hTim != 0)
Encoder->State = 0; {
return ValueToReturn; int8_t CurrentCounter = Encoder->hTim->Instance->CNT / 4;
int8_t ValueToReturn = CurrentCounter - Encoder->State;
Encoder->State = CurrentCounter;
return ValueToReturn;
}
else
{
int8_t ValueToReturn = Encoder->State;
Encoder->State = 0;
return ValueToReturn;
}
} }

View File

@@ -44,6 +44,8 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi1; SPI_HandleTypeDef hspi1;
TIM_HandleTypeDef htim3;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
/* USER CODE END PV */ /* USER CODE END PV */
@@ -52,6 +54,7 @@ SPI_HandleTypeDef hspi1;
void SystemClock_Config(void); void SystemClock_Config(void);
static void MX_GPIO_Init(void); static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void); static void MX_SPI1_Init(void);
static void MX_TIM3_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* USER CODE END PFP */ /* USER CODE END PFP */
@@ -91,6 +94,7 @@ int main(void)
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */
MX_GPIO_Init(); MX_GPIO_Init();
MX_SPI1_Init(); MX_SPI1_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
DS_Button EncButton; DS_Button EncButton;
DS_ButtonInit(&EncButton, ENC_Button_GPIO_Port, ENC_Button_Pin); DS_ButtonInit(&EncButton, ENC_Button_GPIO_Port, ENC_Button_Pin);
@@ -101,7 +105,8 @@ int main(void)
int64_t DisplayData = 0; int64_t DisplayData = 0;
DS_Encoder Encoder; DS_Encoder Encoder;
DS_EncoderInit(&Encoder, Enc_Line1_GPIO_Port, Enc_Line1_Pin, Enc_Line2_GPIO_Port, Enc_Line2_Pin); //DS_EncoderInit(&Encoder, Enc_Line1_GPIO_Port, Enc_Line1_Pin, Enc_Line2_GPIO_Port, Enc_Line2_Pin);
DS_EncoderInitTim(&Encoder, &htim3);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
@@ -109,7 +114,7 @@ int main(void)
while (1) while (1)
{ {
DS_ButtonUpdate(&EncButton); DS_ButtonUpdate(&EncButton);
DS_EncoderUpdate(&Encoder); //DS_EncoderUpdate(&Encoder);
int8_t State = DS_EncoderGetState(&Encoder); int8_t State = DS_EncoderGetState(&Encoder);
if(State !=0 ) if(State !=0 )
@@ -214,6 +219,55 @@ static void MX_SPI1_Init(void)
} }
/**
* @brief TIM3 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM3_Init(void)
{
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_Encoder_InitTypeDef sConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
sConfig.IC1Filter = 0;
sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
sConfig.IC2Filter = 0;
if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
}
/** /**
* @brief GPIO Initialization Function * @brief GPIO Initialization Function
* @param None * @param None
@@ -238,11 +292,11 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : ENC_Button_Pin Enc_Line1_Pin Enc_Line2_Pin */ /*Configure GPIO pin : ENC_Button_Pin */
GPIO_InitStruct.Pin = ENC_Button_Pin|Enc_Line1_Pin|Enc_Line2_Pin; GPIO_InitStruct.Pin = ENC_Button_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(ENC_Button_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */

View File

@@ -142,6 +142,71 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
} }
/**
* @brief TIM_Encoder MSP Initialization
* This function configures the hardware resources used in this example
* @param htim_encoder: TIM_Encoder handle pointer
* @retval None
*/
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim_encoder->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 */
/* USER CODE END TIM3_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM3_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM3 GPIO Configuration
PA6 ------> TIM3_CH1
PA7 ------> TIM3_CH2
*/
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
}
/**
* @brief TIM_Encoder MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param htim_encoder: TIM_Encoder handle pointer
* @retval None
*/
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder)
{
if(htim_encoder->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 */
/* USER CODE END TIM3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM3_CLK_DISABLE();
/**TIM3 GPIO Configuration
PA6 ------> TIM3_CH1
PA7 ------> TIM3_CH2
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6|GPIO_PIN_7);
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
/* USER CODE END 1 */ /* USER CODE END 1 */

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,8 @@ Mcu.IP0=NVIC
Mcu.IP1=RCC Mcu.IP1=RCC
Mcu.IP2=SPI1 Mcu.IP2=SPI1
Mcu.IP3=SYS Mcu.IP3=SYS
Mcu.IPNb=4 Mcu.IP4=TIM3
Mcu.IPNb=5
Mcu.Name=STM32G030F6Px Mcu.Name=STM32G030F6Px
Mcu.Package=TSSOP20 Mcu.Package=TSSOP20
Mcu.Pin0=PA1 Mcu.Pin0=PA1
@@ -53,16 +54,12 @@ PA5.GPIO_Label=ENC_Button
PA5.GPIO_PuPd=GPIO_PULLDOWN PA5.GPIO_PuPd=GPIO_PULLDOWN
PA5.Locked=true PA5.Locked=true
PA5.Signal=GPIO_Input PA5.Signal=GPIO_Input
PA6.GPIOParameters=GPIO_PuPd,GPIO_Label PA6.GPIOParameters=GPIO_PuPd
PA6.GPIO_Label=Enc_Line1
PA6.GPIO_PuPd=GPIO_PULLDOWN PA6.GPIO_PuPd=GPIO_PULLDOWN
PA6.Locked=true PA6.Signal=S_TIM3_CH1
PA6.Signal=GPIO_Input PA7.GPIOParameters=GPIO_PuPd
PA7.GPIOParameters=GPIO_PuPd,GPIO_Label
PA7.GPIO_Label=Enc_Line2
PA7.GPIO_PuPd=GPIO_PULLDOWN PA7.GPIO_PuPd=GPIO_PULLDOWN
PA7.Locked=true PA7.Signal=S_TIM3_CH2
PA7.Signal=GPIO_Input
PB0__PB1__PB2__PA8.StandardMode=true PB0__PB1__PB2__PA8.StandardMode=true
PB3__PB4__PB5__PB6.StandardMode=true PB3__PB4__PB5__PB6.StandardMode=true
PB7__PB8.StandardMode=true PB7__PB8.StandardMode=true
@@ -123,12 +120,19 @@ RCC.SYSCLKFreq_VALUE=16000000
RCC.USART1Freq_Value=16000000 RCC.USART1Freq_Value=16000000
RCC.VCOInputFreq_Value=16000000 RCC.VCOInputFreq_Value=16000000
RCC.VCOOutputFreq_Value=128000000 RCC.VCOOutputFreq_Value=128000000
SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface
SH.S_TIM3_CH1.ConfNb=1
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
SH.S_TIM3_CH2.ConfNb=1
SPI1.CalculateBaudRate=8.0 MBits/s SPI1.CalculateBaudRate=8.0 MBits/s
SPI1.DataSize=SPI_DATASIZE_16BIT SPI1.DataSize=SPI_DATASIZE_16BIT
SPI1.Direction=SPI_DIRECTION_2LINES SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize
SPI1.Mode=SPI_MODE_MASTER SPI1.Mode=SPI_MODE_MASTER
SPI1.VirtualType=VM_MASTER SPI1.VirtualType=VM_MASTER
TIM3.ClockDivision=TIM_CLOCKDIVISION_DIV4
TIM3.EncoderMode=TIM_ENCODERMODE_TI12
TIM3.IPParameters=ClockDivision,EncoderMode
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
board=custom board=custom