Added support for working via timer
This commit is contained in:
16
.mxproject
16
.mxproject
File diff suppressed because one or more lines are too long
@@ -12,8 +12,10 @@ typedef struct DS_Encoder
|
||||
uint32_t PrevTick;
|
||||
|
||||
uint8_t ValueSignal1, ValueSignal2;
|
||||
TIM_HandleTypeDef *hTim;
|
||||
}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);
|
||||
|
||||
|
||||
@@ -61,10 +61,6 @@ void Error_Handler(void);
|
||||
#define CS_GPIO_Port GPIOA
|
||||
#define ENC_Button_Pin GPIO_PIN_5
|
||||
#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 */
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ extern "C" {
|
||||
/* #define HAL_SMARTCARD_MODULE_ENABLED */
|
||||
/* #define HAL_SMBUS_MODULE_ENABLED */
|
||||
#define HAL_SPI_MODULE_ENABLED
|
||||
/* #define HAL_TIM_MODULE_ENABLED */
|
||||
#define HAL_TIM_MODULE_ENABLED
|
||||
/* #define HAL_UART_MODULE_ENABLED */
|
||||
/* #define HAL_USART_MODULE_ENABLED */
|
||||
/* #define HAL_WWDG_MODULE_ENABLED */
|
||||
|
||||
@@ -1,7 +1,16 @@
|
||||
#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)
|
||||
{
|
||||
Encoder->hTim = 0;
|
||||
Encoder->Direction = 0;
|
||||
Encoder->State = 0;
|
||||
Encoder->PrevTick = HAL_GetTick();
|
||||
@@ -71,8 +80,20 @@ void DS_EncoderUpdate(DS_Encoder *Encoder)
|
||||
}
|
||||
|
||||
int8_t DS_EncoderGetState(DS_Encoder *Encoder)
|
||||
{
|
||||
if(Encoder->hTim != 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
SPI_HandleTypeDef hspi1;
|
||||
|
||||
TIM_HandleTypeDef htim3;
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
@@ -52,6 +54,7 @@ SPI_HandleTypeDef hspi1;
|
||||
void SystemClock_Config(void);
|
||||
static void MX_GPIO_Init(void);
|
||||
static void MX_SPI1_Init(void);
|
||||
static void MX_TIM3_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
@@ -91,6 +94,7 @@ int main(void)
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_SPI1_Init();
|
||||
MX_TIM3_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
DS_Button EncButton;
|
||||
DS_ButtonInit(&EncButton, ENC_Button_GPIO_Port, ENC_Button_Pin);
|
||||
@@ -101,7 +105,8 @@ int main(void)
|
||||
int64_t DisplayData = 0;
|
||||
|
||||
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 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -109,7 +114,7 @@ int main(void)
|
||||
while (1)
|
||||
{
|
||||
DS_ButtonUpdate(&EncButton);
|
||||
DS_EncoderUpdate(&Encoder);
|
||||
//DS_EncoderUpdate(&Encoder);
|
||||
|
||||
int8_t State = DS_EncoderGetState(&Encoder);
|
||||
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
|
||||
* @param None
|
||||
@@ -238,11 +292,11 @@ static void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : ENC_Button_Pin Enc_Line1_Pin Enc_Line2_Pin */
|
||||
GPIO_InitStruct.Pin = ENC_Button_Pin|Enc_Line1_Pin|Enc_Line2_Pin;
|
||||
/*Configure GPIO pin : ENC_Button_Pin */
|
||||
GPIO_InitStruct.Pin = ENC_Button_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
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 END MX_GPIO_Init_2 */
|
||||
|
||||
@@ -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 END 1 */
|
||||
|
||||
5272
Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_ll_tim.h
Normal file
5272
Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_ll_tim.h
Normal file
File diff suppressed because it is too large
Load Diff
22
Encoder.ioc
22
Encoder.ioc
@@ -11,7 +11,8 @@ Mcu.IP0=NVIC
|
||||
Mcu.IP1=RCC
|
||||
Mcu.IP2=SPI1
|
||||
Mcu.IP3=SYS
|
||||
Mcu.IPNb=4
|
||||
Mcu.IP4=TIM3
|
||||
Mcu.IPNb=5
|
||||
Mcu.Name=STM32G030F6Px
|
||||
Mcu.Package=TSSOP20
|
||||
Mcu.Pin0=PA1
|
||||
@@ -53,16 +54,12 @@ PA5.GPIO_Label=ENC_Button
|
||||
PA5.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PA5.Locked=true
|
||||
PA5.Signal=GPIO_Input
|
||||
PA6.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA6.GPIO_Label=Enc_Line1
|
||||
PA6.GPIOParameters=GPIO_PuPd
|
||||
PA6.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PA6.Locked=true
|
||||
PA6.Signal=GPIO_Input
|
||||
PA7.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA7.GPIO_Label=Enc_Line2
|
||||
PA6.Signal=S_TIM3_CH1
|
||||
PA7.GPIOParameters=GPIO_PuPd
|
||||
PA7.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PA7.Locked=true
|
||||
PA7.Signal=GPIO_Input
|
||||
PA7.Signal=S_TIM3_CH2
|
||||
PB0__PB1__PB2__PA8.StandardMode=true
|
||||
PB3__PB4__PB5__PB6.StandardMode=true
|
||||
PB7__PB8.StandardMode=true
|
||||
@@ -123,12 +120,19 @@ RCC.SYSCLKFreq_VALUE=16000000
|
||||
RCC.USART1Freq_Value=16000000
|
||||
RCC.VCOInputFreq_Value=16000000
|
||||
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.DataSize=SPI_DATASIZE_16BIT
|
||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize
|
||||
SPI1.Mode=SPI_MODE_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.Signal=SYS_VS_Systick
|
||||
board=custom
|
||||
|
||||
Reference in New Issue
Block a user