Compare commits
2 Commits
9f4cd6f04a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3fbde591bd | ||
|
|
3adc9ff7bb |
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;
|
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);
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
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.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
|
||||||
|
|||||||
Submodule Library/DS_Button updated: e47fbdd4f5...014094f337
Submodule Library/DS_MAX7219 updated: ace707c10d...30a9b33b25
Reference in New Issue
Block a user