Compare commits
5 Commits
26f5cfe3ce
...
527585217c
| Author | SHA1 | Date | |
|---|---|---|---|
| 527585217c | |||
| d3d896a419 | |||
| a690f3a209 | |||
| d7e25af8bf | |||
| 40e0ca1d0c |
@@ -1 +1 @@
|
||||
[]
|
||||
[{"node":"ADC1","expanded":true,"format":0,"pinned":false}]
|
||||
3
firmware/.vscode/settings.json
vendored
3
firmware/.vscode/settings.json
vendored
@@ -18,5 +18,6 @@
|
||||
"ulog.h": "c",
|
||||
"ctrl_generator.h": "c",
|
||||
"type_traits": "c"
|
||||
}
|
||||
},
|
||||
"cortex-debug.variableUseNaturalFormat": true
|
||||
}
|
||||
@@ -23,8 +23,7 @@
|
||||
#define __MAIN_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
@@ -34,25 +33,25 @@ extern "C"
|
||||
/* USER CODE BEGIN Includes */
|
||||
// #include "SEGGER_RTT.h"
|
||||
#include "ulog.h"
|
||||
/* USER CODE END Includes */
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
/* USER CODE END ET */
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
void Error_Handler(void);
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
void Error_Handler(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
@@ -61,41 +60,55 @@ extern "C"
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define B1_Pin GPIO_PIN_13
|
||||
#define B1_GPIO_Port GPIOC
|
||||
#define BTN1_Pin GPIO_PIN_0
|
||||
#define BTN1_GPIO_Port GPIOA
|
||||
#define BTN2_Pin GPIO_PIN_1
|
||||
#define BTN2_GPIO_Port GPIOA
|
||||
#define USART_TX_Pin GPIO_PIN_2
|
||||
#define USART_TX_GPIO_Port GPIOA
|
||||
#define USART_RX_Pin GPIO_PIN_3
|
||||
#define USART_RX_GPIO_Port GPIOA
|
||||
#define LD2_Pin GPIO_PIN_5
|
||||
#define LD2_GPIO_Port GPIOA
|
||||
#define BTN1_Pin GPIO_PIN_1
|
||||
#define BTN1_GPIO_Port GPIOB
|
||||
#define BTN2_Pin GPIO_PIN_2
|
||||
#define BTN2_GPIO_Port GPIOB
|
||||
#define BTN3_Pin GPIO_PIN_11
|
||||
#define BTN3_GPIO_Port GPIOB
|
||||
#define BTN4_Pin GPIO_PIN_12
|
||||
#define BTN4_GPIO_Port GPIOB
|
||||
#define BTN5_Pin GPIO_PIN_11
|
||||
#define BTN3_Pin GPIO_PIN_4
|
||||
#define BTN3_GPIO_Port GPIOA
|
||||
#define BTN4_Pin GPIO_PIN_5
|
||||
#define BTN4_GPIO_Port GPIOA
|
||||
#define DDS2_CS_Pin GPIO_PIN_10
|
||||
#define DDS2_CS_GPIO_Port GPIOB
|
||||
#define AMP1_CS_Pin GPIO_PIN_11
|
||||
#define AMP1_CS_GPIO_Port GPIOB
|
||||
#define DDS1_CS_Pin GPIO_PIN_12
|
||||
#define DDS1_CS_GPIO_Port GPIOB
|
||||
#define ST7565_RST_Pin GPIO_PIN_8
|
||||
#define ST7565_RST_GPIO_Port GPIOC
|
||||
#define ST7565_A0_Pin GPIO_PIN_9
|
||||
#define ST7565_A0_GPIO_Port GPIOC
|
||||
#define BTN5_Pin GPIO_PIN_8
|
||||
#define BTN5_GPIO_Port GPIOA
|
||||
#define BTN_CH1_Pin GPIO_PIN_9
|
||||
#define BTN_CH1_GPIO_Port GPIOA
|
||||
#define LED_CH1_Pin GPIO_PIN_10
|
||||
#define LED_CH1_GPIO_Port GPIOA
|
||||
#define BTN_CH2_Pin GPIO_PIN_11
|
||||
#define BTN_CH2_GPIO_Port GPIOA
|
||||
#define LED_CH2_Pin GPIO_PIN_12
|
||||
#define LED_CH2_GPIO_Port GPIOA
|
||||
#define TMS_Pin GPIO_PIN_13
|
||||
#define TMS_GPIO_Port GPIOA
|
||||
#define TCK_Pin GPIO_PIN_14
|
||||
#define TCK_GPIO_Port GPIOA
|
||||
#define ST7565_CS_Pin GPIO_PIN_15
|
||||
#define ST7565_CS_GPIO_Port GPIOA
|
||||
#define ST7565_SCK_Pin GPIO_PIN_10
|
||||
#define ST7565_SCK_GPIO_Port GPIOC
|
||||
#define ST7565_RST_Pin GPIO_PIN_11
|
||||
#define ST7565_RST_GPIO_Port GPIOC
|
||||
#define ST7565_CS_Pin GPIO_PIN_11
|
||||
#define ST7565_CS_GPIO_Port GPIOC
|
||||
#define ST7565_MOSI_Pin GPIO_PIN_12
|
||||
#define ST7565_MOSI_GPIO_Port GPIOC
|
||||
#define ST7565_A0_Pin GPIO_PIN_2
|
||||
#define ST7565_A0_GPIO_Port GPIOD
|
||||
#define SWO_Pin GPIO_PIN_3
|
||||
#define SWO_GPIO_Port GPIOB
|
||||
/* USER CODE BEGIN Private defines */
|
||||
#define AMP2_CS_Pin GPIO_PIN_9
|
||||
#define AMP2_CS_GPIO_Port GPIOB
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -36,12 +36,17 @@ extern TIM_HandleTypeDef htim2;
|
||||
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
|
||||
extern TIM_HandleTypeDef htim17;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_TIM2_Init(void);
|
||||
void MX_TIM3_Init(void);
|
||||
void MX_TIM17_Init(void);
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file gpio.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of all used GPIO pins.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
******************************************************************************
|
||||
* @file gpio.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of all used GPIO pins.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
@@ -49,16 +49,15 @@ void MX_GPIO_Init(void)
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOA, LD2_Pin|ST7565_CS_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOB, DDS2_CS_Pin|AMP1_CS_Pin|DDS1_CS_Pin|AMP2_CS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(ST7565_RST_GPIO_Port, ST7565_RST_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOC, ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(ST7565_A0_GPIO_Port, ST7565_A0_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, LED_CH1_Pin|LED_CH2_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = B1_Pin;
|
||||
@@ -66,39 +65,35 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PAPin PAPin PAPin PAPin
|
||||
PAPin PAPin PAPin */
|
||||
GPIO_InitStruct.Pin = BTN1_Pin|BTN2_Pin|BTN3_Pin|BTN4_Pin
|
||||
|BTN5_Pin|BTN_CH1_Pin|BTN_CH2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
|
||||
GPIO_InitStruct.Pin = DDS2_CS_Pin|AMP1_CS_Pin|DDS1_CS_Pin|AMP2_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PCPin PCPin PCPin */
|
||||
GPIO_InitStruct.Pin = ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PAPin PAPin */
|
||||
GPIO_InitStruct.Pin = LD2_Pin|ST7565_CS_Pin;
|
||||
GPIO_InitStruct.Pin = LED_CH1_Pin|LED_CH2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
|
||||
GPIO_InitStruct.Pin = BTN1_Pin|BTN2_Pin|BTN3_Pin|BTN4_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = BTN5_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(BTN5_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = ST7565_RST_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(ST7565_RST_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = ST7565_A0_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(ST7565_A0_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
@@ -67,44 +67,44 @@ void RTT_console_logger(ulog_level_t severity, char *msg);
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
* @brief The application entry point.
|
||||
* @retval int
|
||||
*/
|
||||
* @brief The application entry point.
|
||||
* @retval int
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
/* USER CODE BEGIN 1 */
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
|
||||
/* USER CODE BEGIN Init */
|
||||
/* USER CODE BEGIN Init */
|
||||
|
||||
/* USER CODE END Init */
|
||||
/* USER CODE END Init */
|
||||
|
||||
/* Configure the system clock */
|
||||
SystemClock_Config();
|
||||
/* Configure the system clock */
|
||||
SystemClock_Config();
|
||||
|
||||
/* USER CODE BEGIN SysInit */
|
||||
/* USER CODE BEGIN SysInit */
|
||||
|
||||
/* USER CODE END SysInit */
|
||||
/* USER CODE END SysInit */
|
||||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_USART2_UART_Init();
|
||||
MX_SPI2_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_SPI3_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_TIM3_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_USART2_UART_Init();
|
||||
MX_SPI2_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_SPI3_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_TIM3_Init();
|
||||
MX_TIM17_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
ulog_init();
|
||||
ulog_subscribe(RTT_console_logger, ULOG_DEBUG_LEVEL);
|
||||
ulog_subscribe(RTT_console_logger, ULOG_TRACE_LEVEL);
|
||||
|
||||
APP_init(&app_data);
|
||||
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
|
||||
// SEGGER_RTT_WriteString(0, "App start...\n");
|
||||
ULOG_INFO("start app...");
|
||||
@@ -118,14 +118,15 @@ int main(void)
|
||||
hst7565.rst_pin = ST7565_RST_Pin;
|
||||
ST7565_Init(&hst7565, &disp);
|
||||
|
||||
/* USER CODE END 2 */
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
DISP_clearScreen(&disp);
|
||||
ST7565_DisplayAll(&hst7565);
|
||||
|
||||
HAL_Delay(1000);
|
||||
uint32_t last_tick = HAL_GetTick();
|
||||
APP_init(&app_data);
|
||||
while (1)
|
||||
{
|
||||
CTRL_buttonsHandler();
|
||||
@@ -135,59 +136,63 @@ int main(void)
|
||||
ST7565_DisplayAll(&hst7565);
|
||||
LAY_drawDisplayLayout(&disp, &app_data);
|
||||
}
|
||||
/* USER CODE END WHILE */
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
/* USER CODE BEGIN 3 */
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System Clock Configuration
|
||||
* @retval None
|
||||
*/
|
||||
* @brief System Clock Configuration
|
||||
* @retval None
|
||||
*/
|
||||
void SystemClock_Config(void)
|
||||
{
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
||||
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
|
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
||||
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
|
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/** Initializes the CPU, AHB and APB buses clocks
|
||||
*/
|
||||
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.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||
/** Initializes the CPU, AHB and APB buses clocks
|
||||
*/
|
||||
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.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_TIM2 | RCC_PERIPHCLK_TIM34;
|
||||
PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
|
||||
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
|
||||
PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK;
|
||||
PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_I2C1
|
||||
|RCC_PERIPHCLK_TIM17|RCC_PERIPHCLK_TIM2
|
||||
|RCC_PERIPHCLK_TIM34;
|
||||
PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
|
||||
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
|
||||
PeriphClkInit.Tim17ClockSelection = RCC_TIM17CLK_HCLK;
|
||||
PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK;
|
||||
PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
@@ -201,33 +206,33 @@ void RTT_console_logger(ulog_level_t severity, char *msg)
|
||||
/* USER CODE END 4 */
|
||||
|
||||
/**
|
||||
* @brief This function is executed in case of error occurrence.
|
||||
* @retval None
|
||||
*/
|
||||
* @brief This function is executed in case of error occurrence.
|
||||
* @retval None
|
||||
*/
|
||||
void Error_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN Error_Handler_Debug */
|
||||
/* USER CODE BEGIN Error_Handler_Debug */
|
||||
/* User can add his own implementation to report the HAL error return state */
|
||||
__disable_irq();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END Error_Handler_Debug */
|
||||
/* USER CODE END Error_Handler_Debug */
|
||||
}
|
||||
|
||||
#ifdef USE_FULL_ASSERT
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief Reports the name of the source file and the source line number
|
||||
* where the assert_param error has occurred.
|
||||
* @param file: pointer to the source file name
|
||||
* @param line: assert_param error line source number
|
||||
* @retval None
|
||||
*/
|
||||
* @brief Reports the name of the source file and the source line number
|
||||
* where the assert_param error has occurred.
|
||||
* @param file: pointer to the source file name
|
||||
* @param line: assert_param error line source number
|
||||
* @retval None
|
||||
*/
|
||||
void assert_failed(uint8_t *file, uint32_t line)
|
||||
{
|
||||
/* USER CODE BEGIN 6 */
|
||||
/* USER CODE BEGIN 6 */
|
||||
/* User can add his own implementation to report the file name and line number,
|
||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
/* USER CODE END 6 */
|
||||
/* USER CODE END 6 */
|
||||
}
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
|
||||
@@ -42,7 +42,7 @@ void MX_SPI2_Init(void)
|
||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim3;
|
||||
TIM_HandleTypeDef htim17;
|
||||
|
||||
/* TIM2 init function */
|
||||
void MX_TIM2_Init(void)
|
||||
@@ -110,6 +111,64 @@ void MX_TIM3_Init(void)
|
||||
|
||||
/* USER CODE END TIM3_Init 2 */
|
||||
|
||||
}
|
||||
/* TIM17 init function */
|
||||
void MX_TIM17_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM17_Init 0 */
|
||||
|
||||
/* USER CODE END TIM17_Init 0 */
|
||||
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM17_Init 1 */
|
||||
|
||||
/* USER CODE END TIM17_Init 1 */
|
||||
htim17.Instance = TIM17;
|
||||
htim17.Init.Prescaler = 0;
|
||||
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim17.Init.Period = 2;
|
||||
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim17.Init.RepetitionCounter = 0;
|
||||
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim17) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 1;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim17, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
||||
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
||||
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
||||
sBreakDeadTimeConfig.DeadTime = 0;
|
||||
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
||||
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
||||
sBreakDeadTimeConfig.BreakFilter = 0;
|
||||
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
||||
if (HAL_TIMEx_ConfigBreakDeadTime(&htim17, &sBreakDeadTimeConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM17_Init 2 */
|
||||
|
||||
/* USER CODE END TIM17_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim17);
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
@@ -126,6 +185,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
}
|
||||
else if(tim_baseHandle->Instance==TIM17)
|
||||
{
|
||||
/* USER CODE BEGIN TIM17_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM17_MspInit 0 */
|
||||
/* TIM17 clock enable */
|
||||
__HAL_RCC_TIM17_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM17_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM17_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
|
||||
@@ -157,6 +227,33 @@ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
|
||||
/* USER CODE END TIM3_MspInit 1 */
|
||||
}
|
||||
}
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(timHandle->Instance==TIM17)
|
||||
{
|
||||
/* USER CODE BEGIN TIM17_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM17_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**TIM17 GPIO Configuration
|
||||
PB5 ------> TIM17_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_5;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF10_TIM17;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM17_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM17_MspPostInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
{
|
||||
@@ -172,6 +269,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
else if(tim_baseHandle->Instance==TIM17)
|
||||
{
|
||||
/* USER CODE BEGIN TIM17_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM17_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM17_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM17_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM17_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
##########################################################################################################################
|
||||
# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Fri Apr 21 19:03:25 CEST 2023]
|
||||
# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Tue Aug 01 10:57:07 CEST 2023]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
|
||||
@@ -15,41 +15,51 @@ Mcu.IP4=SPI3
|
||||
Mcu.IP5=SYS
|
||||
Mcu.IP6=TIM2
|
||||
Mcu.IP7=TIM3
|
||||
Mcu.IP8=USART2
|
||||
Mcu.IPNb=9
|
||||
Mcu.IP8=TIM17
|
||||
Mcu.IP9=USART2
|
||||
Mcu.IPNb=10
|
||||
Mcu.Name=STM32F303R(D-E)Tx
|
||||
Mcu.Package=LQFP64
|
||||
Mcu.Pin0=PC13
|
||||
Mcu.Pin1=PC14-OSC32_IN
|
||||
Mcu.Pin10=PB1
|
||||
Mcu.Pin11=PB2
|
||||
Mcu.Pin12=PB11
|
||||
Mcu.Pin13=PB12
|
||||
Mcu.Pin14=PB13
|
||||
Mcu.Pin15=PB14
|
||||
Mcu.Pin16=PB15
|
||||
Mcu.Pin17=PA11
|
||||
Mcu.Pin18=PA13
|
||||
Mcu.Pin19=PA14
|
||||
Mcu.Pin10=PA5
|
||||
Mcu.Pin11=PA6
|
||||
Mcu.Pin12=PA7
|
||||
Mcu.Pin13=PB10
|
||||
Mcu.Pin14=PB11
|
||||
Mcu.Pin15=PB12
|
||||
Mcu.Pin16=PB13
|
||||
Mcu.Pin17=PB14
|
||||
Mcu.Pin18=PB15
|
||||
Mcu.Pin19=PC8
|
||||
Mcu.Pin2=PC15-OSC32_OUT
|
||||
Mcu.Pin20=PA15
|
||||
Mcu.Pin21=PC10
|
||||
Mcu.Pin22=PC11
|
||||
Mcu.Pin23=PC12
|
||||
Mcu.Pin24=PD2
|
||||
Mcu.Pin25=PB3
|
||||
Mcu.Pin26=PB6
|
||||
Mcu.Pin27=PB7
|
||||
Mcu.Pin28=VP_SYS_VS_Systick
|
||||
Mcu.Pin29=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin20=PC9
|
||||
Mcu.Pin21=PA8
|
||||
Mcu.Pin22=PA9
|
||||
Mcu.Pin23=PA10
|
||||
Mcu.Pin24=PA11
|
||||
Mcu.Pin25=PA12
|
||||
Mcu.Pin26=PA13
|
||||
Mcu.Pin27=PA14
|
||||
Mcu.Pin28=PC10
|
||||
Mcu.Pin29=PC11
|
||||
Mcu.Pin3=PF0-OSC_IN
|
||||
Mcu.Pin30=PC12
|
||||
Mcu.Pin31=PB3
|
||||
Mcu.Pin32=PB5
|
||||
Mcu.Pin33=PB6
|
||||
Mcu.Pin34=PB7
|
||||
Mcu.Pin35=PB9
|
||||
Mcu.Pin36=VP_SYS_VS_Systick
|
||||
Mcu.Pin37=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin38=VP_TIM17_VS_ClockSourceINT
|
||||
Mcu.Pin4=PF1-OSC_OUT
|
||||
Mcu.Pin5=PA2
|
||||
Mcu.Pin6=PA3
|
||||
Mcu.Pin7=PA5
|
||||
Mcu.Pin8=PA6
|
||||
Mcu.Pin9=PA7
|
||||
Mcu.PinsNb=30
|
||||
Mcu.Pin5=PA0
|
||||
Mcu.Pin6=PA1
|
||||
Mcu.Pin7=PA2
|
||||
Mcu.Pin8=PA3
|
||||
Mcu.Pin9=PA4
|
||||
Mcu.PinsNb=39
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F303RETx
|
||||
@@ -66,10 +76,26 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:false
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false
|
||||
PA0.GPIOParameters=GPIO_Label
|
||||
PA0.GPIO_Label=BTN1
|
||||
PA0.Locked=true
|
||||
PA0.Signal=GPIO_Input
|
||||
PA1.GPIOParameters=GPIO_Label
|
||||
PA1.GPIO_Label=BTN2
|
||||
PA1.Locked=true
|
||||
PA1.Signal=GPIO_Input
|
||||
PA10.GPIOParameters=GPIO_Label
|
||||
PA10.GPIO_Label=LED_CH1
|
||||
PA10.Locked=true
|
||||
PA10.Signal=GPIO_Output
|
||||
PA11.GPIOParameters=GPIO_Label
|
||||
PA11.GPIO_Label=BTN5
|
||||
PA11.GPIO_Label=BTN_CH2
|
||||
PA11.Locked=true
|
||||
PA11.Signal=GPIO_Input
|
||||
PA12.GPIOParameters=GPIO_Label
|
||||
PA12.GPIO_Label=LED_CH2
|
||||
PA12.Locked=true
|
||||
PA12.Signal=GPIO_Output
|
||||
PA13.GPIOParameters=GPIO_Label
|
||||
PA13.GPIO_Label=TMS
|
||||
PA13.Locked=true
|
||||
@@ -80,10 +106,6 @@ PA14.GPIO_Label=TCK
|
||||
PA14.Locked=true
|
||||
PA14.Mode=Serial_Wire
|
||||
PA14.Signal=SYS_JTCK-SWCLK
|
||||
PA15.GPIOParameters=GPIO_Label
|
||||
PA15.GPIO_Label=ST7565_CS
|
||||
PA15.Locked=true
|
||||
PA15.Signal=GPIO_Output
|
||||
PA2.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode
|
||||
PA2.GPIO_Label=USART_TX
|
||||
PA2.GPIO_Mode=GPIO_MODE_AF_PP
|
||||
@@ -100,54 +122,64 @@ PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW
|
||||
PA3.Locked=true
|
||||
PA3.Mode=Asynchronous
|
||||
PA3.Signal=USART2_RX
|
||||
PA5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode
|
||||
PA5.GPIO_Label=LD2 [Green Led]
|
||||
PA5.GPIO_Mode=GPIO_MODE_OUTPUT_PP
|
||||
PA5.GPIO_PuPd=GPIO_NOPULL
|
||||
PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW
|
||||
PA4.GPIOParameters=GPIO_Label
|
||||
PA4.GPIO_Label=BTN3
|
||||
PA4.Locked=true
|
||||
PA4.Signal=GPIO_Input
|
||||
PA5.GPIOParameters=GPIO_Label
|
||||
PA5.GPIO_Label=BTN4
|
||||
PA5.Locked=true
|
||||
PA5.Signal=GPIO_Output
|
||||
PA5.Signal=GPIO_Input
|
||||
PA6.Signal=S_TIM3_CH1
|
||||
PA7.Locked=true
|
||||
PA7.Signal=S_TIM3_CH2
|
||||
PB1.GPIOParameters=GPIO_Label
|
||||
PB1.GPIO_Label=BTN1
|
||||
PB1.Locked=true
|
||||
PB1.Signal=GPIO_Input
|
||||
PA8.GPIOParameters=GPIO_Label
|
||||
PA8.GPIO_Label=BTN5
|
||||
PA8.Locked=true
|
||||
PA8.Signal=GPIO_Input
|
||||
PA9.GPIOParameters=GPIO_Label
|
||||
PA9.GPIO_Label=BTN_CH1
|
||||
PA9.Locked=true
|
||||
PA9.Signal=GPIO_Input
|
||||
PB10.GPIOParameters=GPIO_Label
|
||||
PB10.GPIO_Label=DDS2_CS
|
||||
PB10.Locked=true
|
||||
PB10.Signal=GPIO_Output
|
||||
PB11.GPIOParameters=GPIO_Label
|
||||
PB11.GPIO_Label=BTN3
|
||||
PB11.GPIO_Label=AMP1_CS
|
||||
PB11.Locked=true
|
||||
PB11.Signal=GPIO_Input
|
||||
PB11.Signal=GPIO_Output
|
||||
PB12.GPIOParameters=GPIO_Label
|
||||
PB12.GPIO_Label=BTN4
|
||||
PB12.GPIO_Label=DDS1_CS
|
||||
PB12.Locked=true
|
||||
PB12.Signal=GPIO_Input
|
||||
PB12.Signal=GPIO_Output
|
||||
PB13.Mode=Full_Duplex_Master
|
||||
PB13.Signal=SPI2_SCK
|
||||
PB14.Mode=Full_Duplex_Master
|
||||
PB14.Signal=SPI2_MISO
|
||||
PB15.Mode=Full_Duplex_Master
|
||||
PB15.Signal=SPI2_MOSI
|
||||
PB2.GPIOParameters=GPIO_Label
|
||||
PB2.GPIO_Label=BTN2
|
||||
PB2.Locked=true
|
||||
PB2.Signal=GPIO_Input
|
||||
PB3.GPIOParameters=GPIO_Label
|
||||
PB3.GPIO_Label=SWO
|
||||
PB3.Locked=true
|
||||
PB3.Signal=SYS_JTDO-TRACESWO
|
||||
PB5.Signal=S_TIM17_CH1
|
||||
PB6.Locked=true
|
||||
PB6.Mode=I2C
|
||||
PB6.Signal=I2C1_SCL
|
||||
PB7.Mode=I2C
|
||||
PB7.Signal=I2C1_SDA
|
||||
PB9.GPIOParameters=GPIO_Label
|
||||
PB9.GPIO_Label=AMP2_CS
|
||||
PB9.Locked=true
|
||||
PB9.Signal=GPIO_Output
|
||||
PC10.GPIOParameters=GPIO_Label
|
||||
PC10.GPIO_Label=ST7565_SCK
|
||||
PC10.Locked=true
|
||||
PC10.Mode=Simplex_Bidirectional_Master
|
||||
PC10.Signal=SPI3_SCK
|
||||
PC11.GPIOParameters=GPIO_Label
|
||||
PC11.GPIO_Label=ST7565_RST
|
||||
PC11.GPIO_Label=ST7565_CS
|
||||
PC11.Locked=true
|
||||
PC11.Signal=GPIO_Output
|
||||
PC12.GPIOParameters=GPIO_Label
|
||||
@@ -165,10 +197,14 @@ PC14-OSC32_IN.Signal=RCC_OSC32_IN
|
||||
PC15-OSC32_OUT.Locked=true
|
||||
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
|
||||
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
|
||||
PD2.GPIOParameters=GPIO_Label
|
||||
PD2.GPIO_Label=ST7565_A0
|
||||
PD2.Locked=true
|
||||
PD2.Signal=GPIO_Output
|
||||
PC8.GPIOParameters=GPIO_Label
|
||||
PC8.GPIO_Label=ST7565_RST
|
||||
PC8.Locked=true
|
||||
PC8.Signal=GPIO_Output
|
||||
PC9.GPIOParameters=GPIO_Label
|
||||
PC9.GPIO_Label=ST7565_A0
|
||||
PC9.Locked=true
|
||||
PC9.Signal=GPIO_Output
|
||||
PF0-OSC_IN.Locked=true
|
||||
PF0-OSC_IN.Mode=HSE-External-Clock-Source
|
||||
PF0-OSC_IN.Signal=RCC_OSC_IN
|
||||
@@ -202,7 +238,7 @@ ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=Makefile
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_SPI3_Init-SPI3-false-HAL-true,7-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_USART2_UART_Init-USART2-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_SPI3_Init-SPI3-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true
|
||||
RCC.ADC12outputFreq_Value=72000000
|
||||
RCC.ADC34outputFreq_Value=72000000
|
||||
RCC.AHBFreq_Value=72000000
|
||||
@@ -221,9 +257,9 @@ RCC.I2C1Freq_Value=8000000
|
||||
RCC.I2C2Freq_Value=8000000
|
||||
RCC.I2C3Freq_Value=8000000
|
||||
RCC.I2SClocksFreq_Value=72000000
|
||||
RCC.IPParameters=ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SClocksFreq_Value,LSI_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLP,PLLQ,RCC_PLLsource_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOOutput2Freq_Value
|
||||
RCC.IPParameters=ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SClocksFreq_Value,LSI_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLP,PLLQ,RCC_MCODiv,RCC_MCOSource,RCC_PLLsource_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOOutput2Freq_Value
|
||||
RCC.LSI_VALUE=40000
|
||||
RCC.MCOFreq_Value=72000000
|
||||
RCC.MCOFreq_Value=9000000
|
||||
RCC.PLLCLKFreq_Value=72000000
|
||||
RCC.PLLM=8
|
||||
RCC.PLLMCOFreq_Value=72000000
|
||||
@@ -231,6 +267,8 @@ RCC.PLLMUL=RCC_PLL_MUL9
|
||||
RCC.PLLN=336
|
||||
RCC.PLLP=RCC_PLLP_DIV4
|
||||
RCC.PLLQ=7
|
||||
RCC.RCC_MCODiv=RCC_MCODIV_8
|
||||
RCC.RCC_MCOSource=RCC_MCO1SOURCE_PLLCLK
|
||||
RCC.RCC_PLLsource_Clock_Source_FROM_HSE=RCC_HSE_PREDIV_DIV2
|
||||
RCC.RTCFreq_Value=40000
|
||||
RCC.RTCHSEDivFreq_Value=250000
|
||||
@@ -253,15 +291,18 @@ RCC.USBFreq_Value=72000000
|
||||
RCC.VCOOutput2Freq_Value=8000000
|
||||
SH.GPXTI13.0=GPIO_EXTI13
|
||||
SH.GPXTI13.ConfNb=1
|
||||
SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1
|
||||
SH.S_TIM17_CH1.ConfNb=1
|
||||
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
|
||||
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32
|
||||
SPI2.CLKPolarity=SPI_POLARITY_HIGH
|
||||
SPI2.CalculateBaudRate=1.125 MBits/s
|
||||
SPI2.DataSize=SPI_DATASIZE_8BIT
|
||||
SPI2.Direction=SPI_DIRECTION_2LINES
|
||||
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler
|
||||
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler,CLKPolarity
|
||||
SPI2.Mode=SPI_MODE_MASTER
|
||||
SPI2.NSSPMode=SPI_NSS_PULSE_ENABLE
|
||||
SPI2.VirtualType=VM_MASTER
|
||||
@@ -272,6 +313,12 @@ SPI3.Direction=SPI_DIRECTION_1LINE
|
||||
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize
|
||||
SPI3.Mode=SPI_MODE_MASTER
|
||||
SPI3.VirtualType=VM_MASTER
|
||||
TIM17.Channel=TIM_CHANNEL_1
|
||||
TIM17.IPParameters=Channel,Period,OCFastMode_PWM,OCIdleState_1,Pulse
|
||||
TIM17.OCFastMode_PWM=TIM_OCFAST_ENABLE
|
||||
TIM17.OCIdleState_1=TIM_OCIDLESTATE_RESET
|
||||
TIM17.Period=2
|
||||
TIM17.Pulse=1
|
||||
TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE
|
||||
TIM2.IPParameters=AutoReloadPreload
|
||||
TIM3.IC1Filter=15
|
||||
@@ -282,6 +329,8 @@ USART2.IPParameters=VirtualMode-Asynchronous
|
||||
USART2.VirtualMode-Asynchronous=VM_ASYNC
|
||||
VP_SYS_VS_Systick.Mode=SysTick
|
||||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
||||
VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
|
||||
VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
|
||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||
board=NUCLEO-F303RE
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#include "main.h"
|
||||
#include "tim.h"
|
||||
#include "hw_button.h"
|
||||
#include "ctrl_bottom_button.h"
|
||||
#include "ctrl_channel_button.h"
|
||||
#include "ctrl_encoder.h"
|
||||
#include "ctrl_generator.h"
|
||||
|
||||
#include "ctrl_app.h"
|
||||
|
||||
@@ -19,20 +21,66 @@ static GEN_pwm_t pwm_gen[3];
|
||||
|
||||
static const CMD_button_t btn_command[BTN_STATE_MAX][DISP_BTN_MAX];
|
||||
static const LAY_dispBtn_t btn_hw_to_disp[BTN_BOT_MAX] = {DISP_BTN_1, DISP_BTN_2, DISP_BTN_3, DISP_BTN_4, DISP_BTN_5};
|
||||
static const GEN_channel_t btn_ch_to_chan[CHANNEL_MAX] = {CHANNEL1, CHANNEL2, CHANNEL3, CHANNEL4, CHANNEL5, CHANNEL6};
|
||||
static const uint32_t pow_of_10[7] = {1, 10, 100, 1000, 10000, 100000, 1000000};
|
||||
|
||||
static HW_BotBtnName_t last_key;
|
||||
static APP_data_t *_app_data;
|
||||
|
||||
static const GENERATOR_t generators[CHANNEL_MAX] = {
|
||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[0]},
|
||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[1]},
|
||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[2]},
|
||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[0]},
|
||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[1]},
|
||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[2]},
|
||||
static GEN_sig_t signal_gen[CHANNEL_MAX] = {
|
||||
{.type = GEN_FG_TYPE, .gen = &func_gen[0]},
|
||||
{.type = GEN_FG_TYPE, .gen = &func_gen[1]},
|
||||
{.type = GEN_FG_TYPE, .gen = &func_gen[2]},
|
||||
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[0]},
|
||||
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[1]},
|
||||
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[2]},
|
||||
};
|
||||
|
||||
void _signalGenDefaultValues(void)
|
||||
{
|
||||
for (GEN_channel_t channel = 0; channel < CHANNEL_MAX; channel++)
|
||||
{
|
||||
switch (signal_gen[channel].type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
{
|
||||
GEN_fg_t *gen = signal_gen[channel].gen;
|
||||
gen->frequency = 1000;
|
||||
gen->amplitude = 100;
|
||||
gen->offset = 165;
|
||||
gen->phase = 0;
|
||||
gen->wave = GEN_SIN;
|
||||
gen->enabled = FALSE;
|
||||
gen->link = 0;
|
||||
break;
|
||||
}
|
||||
case GEN_PWM_TYPE:
|
||||
{
|
||||
GEN_pwm_t *gen = signal_gen[channel].gen;
|
||||
gen->frequency = 1000;
|
||||
gen->amplitude = 0;
|
||||
gen->offset = 0;
|
||||
gen->phase = 0;
|
||||
gen->duty = 50;
|
||||
gen->enabled = FALSE;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _setGenInitailState(GEN_channel_t channel)
|
||||
{
|
||||
setFreq(&signal_gen[channel], channel);
|
||||
setWave(&signal_gen[channel], channel);
|
||||
setPhase(&signal_gen[channel], channel);
|
||||
setAmplitude(&signal_gen[channel], channel);
|
||||
setEnabled(&signal_gen[channel], channel);
|
||||
// setOfsset(&signal_gen[channel], channel);
|
||||
}
|
||||
|
||||
void APP_init(APP_data_t *app_data)
|
||||
{
|
||||
_app_data = app_data;
|
||||
@@ -42,11 +90,12 @@ void APP_init(APP_data_t *app_data)
|
||||
_app_data->phas_focus_digit = 0;
|
||||
_app_data->duty_focus_digit = 0;
|
||||
|
||||
_app_data->curr_gen_type = GEN_FG_TYPE;
|
||||
_app_data->generator = generators[CHANNEL1].gen;
|
||||
_app_data->curr_gen_type = signal_gen[CHANNEL1].type;
|
||||
_app_data->curr_gen = signal_gen[CHANNEL1].gen;
|
||||
|
||||
_app_data->curr_state_lay = LAY_MAIN;
|
||||
_app_data->curr_state_btn = BTN_MAIN_FG;
|
||||
_app_data->curr_channel = CHANNEL1;
|
||||
|
||||
_app_data->isChannelChange = 1;
|
||||
_app_data->isGraphChange = 1;
|
||||
@@ -54,14 +103,18 @@ void APP_init(APP_data_t *app_data)
|
||||
_app_data->isButtonChange = 1;
|
||||
_app_data->isButtonBlink = 1;
|
||||
|
||||
_signalGenDefaultValues();
|
||||
CTRL_buttonsInit();
|
||||
gen_init();
|
||||
_setGenInitailState(CHANNEL1);
|
||||
_setGenInitailState(CHANNEL2);
|
||||
}
|
||||
|
||||
void CTRL_buttonsInit(void)
|
||||
{
|
||||
|
||||
CTRL_bottomButtonInit();
|
||||
// CTRL_channelButtonInit();
|
||||
CTRL_channelButtonInit();
|
||||
}
|
||||
|
||||
void CTRL_buttonsHandler(void)
|
||||
@@ -81,12 +134,59 @@ void CTRL_pushedDispBtnEvent(ButtonKey_t *key)
|
||||
void CTRL_pushedChanBtnEvent(ButtonKey_t *key)
|
||||
{
|
||||
ULOG_TRACE("Chan btn: %d", key->instance);
|
||||
UNUSED(key);
|
||||
GEN_channel_t channel = btn_ch_to_chan[key->instance];
|
||||
|
||||
_app_data->curr_gen_type = signal_gen[channel].type;
|
||||
_app_data->curr_gen = signal_gen[channel].gen;
|
||||
|
||||
_app_data->curr_state_lay = LAY_MAIN;
|
||||
_app_data->curr_state_btn = BTN_MAIN_FG;
|
||||
_app_data->curr_channel = channel;
|
||||
|
||||
_app_data->isChannelChange = 1;
|
||||
_app_data->isGraphChange = 1;
|
||||
_app_data->isValueChange = 1;
|
||||
_app_data->isButtonChange = 1;
|
||||
_app_data->isButtonBlink = 1;
|
||||
}
|
||||
|
||||
void CTRL_longPushedChanBtnEvent(ButtonKey_t *key)
|
||||
{
|
||||
ULOG_TRACE("Chan btn(long): %d", key->instance);
|
||||
GEN_channel_t channel = btn_ch_to_chan[key->instance];
|
||||
|
||||
if (channel == CHANNEL2)
|
||||
{
|
||||
if (HAL_TIM_Base_Start(&htim17) == HAL_ERROR)
|
||||
{
|
||||
HAL_TIM_Base_Stop(&htim17);
|
||||
}
|
||||
}
|
||||
|
||||
switch (signal_gen[channel].type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
{
|
||||
GEN_fg_t *gen = signal_gen[channel].gen;
|
||||
gen->enabled = gen->enabled ? FALSE : TRUE;
|
||||
setEnabled(&signal_gen[channel], channel);
|
||||
break;
|
||||
}
|
||||
case GEN_PWM_TYPE:
|
||||
{
|
||||
GEN_pwm_t *gen = signal_gen[channel].gen;
|
||||
gen->enabled = gen->enabled ? FALSE : TRUE;
|
||||
setEnabled(&signal_gen[channel], channel);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void _changeValueFunGen(int8_t dir)
|
||||
{
|
||||
GEN_fg_t *gen = (GEN_fg_t *)_app_data->generator;
|
||||
GEN_fg_t *gen = (GEN_fg_t *)_app_data->curr_gen;
|
||||
|
||||
switch (_app_data->curr_state_lay)
|
||||
{
|
||||
@@ -99,6 +199,7 @@ static void _changeValueFunGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->frequency = new_freq;
|
||||
setFreq(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
|
||||
break;
|
||||
}
|
||||
case LAY_AMPL:
|
||||
@@ -110,6 +211,7 @@ static void _changeValueFunGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->amplitude = new_ampl;
|
||||
setAmplitude(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
|
||||
break;
|
||||
}
|
||||
case LAY_OFFS:
|
||||
@@ -121,6 +223,7 @@ static void _changeValueFunGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->offset = new_offs;
|
||||
setOfsset(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
|
||||
break;
|
||||
}
|
||||
case LAY_PHAS:
|
||||
@@ -132,6 +235,7 @@ static void _changeValueFunGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->phase = new_phas;
|
||||
setPhase(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -145,7 +249,7 @@ static void _changeValueFunGen(int8_t dir)
|
||||
|
||||
static void _changeValuePwmGen(int8_t dir)
|
||||
{
|
||||
GEN_pwm_t *gen = (GEN_pwm_t *)_app_data->generator;
|
||||
GEN_pwm_t *gen = (GEN_pwm_t *)_app_data->curr_gen;
|
||||
|
||||
switch (_app_data->curr_state_lay)
|
||||
{
|
||||
@@ -158,6 +262,7 @@ static void _changeValuePwmGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->frequency = new_freq;
|
||||
|
||||
break;
|
||||
}
|
||||
case LAY_AMPL:
|
||||
@@ -169,6 +274,7 @@ static void _changeValuePwmGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->amplitude = new_ampl;
|
||||
|
||||
break;
|
||||
}
|
||||
case LAY_OFFS:
|
||||
@@ -180,6 +286,7 @@ static void _changeValuePwmGen(int8_t dir)
|
||||
return;
|
||||
}
|
||||
gen->offset = new_offs;
|
||||
|
||||
break;
|
||||
}
|
||||
case LAY_PHAS:
|
||||
|
||||
@@ -26,9 +26,9 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GEN_type_t gen_type;
|
||||
GEN_type_t type;
|
||||
void *const gen;
|
||||
} GENERATOR_t;
|
||||
} GEN_sig_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -39,7 +39,7 @@ typedef struct
|
||||
uint8_t duty_focus_digit;
|
||||
|
||||
GEN_type_t curr_gen_type;
|
||||
void *generator;
|
||||
void *curr_gen;
|
||||
|
||||
GEN_channel_t curr_channel;
|
||||
STATE_layout_t curr_state_lay;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
#define FUN_GEN_FOCUS_MAX 6U
|
||||
#define PWM_GEN_FOCUS_MAX 4U
|
||||
#define MAX_FREQ 1000000U
|
||||
#define MAX_VOLT_POS 500
|
||||
#define MAX_VOLT_NEG -500
|
||||
#define MAX_VOLT_POS 360
|
||||
#define MAX_VOLT_NEG 0
|
||||
#define MAX_PHAS 360
|
||||
#define MAX_DUTY 100
|
||||
|
||||
|
||||
@@ -11,31 +11,31 @@ void CTRL_bottomButtonInit(void)
|
||||
bottom_buttons[BTN_BOT_1].buttonPressed = CTRL_pushedDispBtnEvent;
|
||||
bottom_buttons[BTN_BOT_1].gpio_port = BTN1_GPIO_Port;
|
||||
bottom_buttons[BTN_BOT_1].gpio_pin = BTN1_Pin;
|
||||
bottom_buttons[BTN_BOT_1].pushed_state = GPIO_PIN_SET;
|
||||
bottom_buttons[BTN_BOT_1].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
bottom_buttons[BTN_BOT_2].instance = BTN_BOT_2;
|
||||
bottom_buttons[BTN_BOT_2].buttonPressed = CTRL_pushedDispBtnEvent;
|
||||
bottom_buttons[BTN_BOT_2].gpio_port = BTN2_GPIO_Port;
|
||||
bottom_buttons[BTN_BOT_2].gpio_pin = BTN2_Pin;
|
||||
bottom_buttons[BTN_BOT_2].pushed_state = GPIO_PIN_SET;
|
||||
bottom_buttons[BTN_BOT_2].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
bottom_buttons[BTN_BOT_3].instance = BTN_BOT_3;
|
||||
bottom_buttons[BTN_BOT_3].buttonPressed = CTRL_pushedDispBtnEvent;
|
||||
bottom_buttons[BTN_BOT_3].gpio_port = BTN3_GPIO_Port;
|
||||
bottom_buttons[BTN_BOT_3].gpio_pin = BTN3_Pin;
|
||||
bottom_buttons[BTN_BOT_3].pushed_state = GPIO_PIN_SET;
|
||||
bottom_buttons[BTN_BOT_3].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
bottom_buttons[BTN_BOT_4].instance = BTN_BOT_4;
|
||||
bottom_buttons[BTN_BOT_4].buttonPressed = CTRL_pushedDispBtnEvent;
|
||||
bottom_buttons[BTN_BOT_4].gpio_port = BTN4_GPIO_Port;
|
||||
bottom_buttons[BTN_BOT_4].gpio_pin = BTN4_Pin;
|
||||
bottom_buttons[BTN_BOT_4].pushed_state = GPIO_PIN_SET;
|
||||
bottom_buttons[BTN_BOT_4].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
bottom_buttons[BTN_BOT_5].instance = BTN_BOT_5;
|
||||
bottom_buttons[BTN_BOT_5].buttonPressed = CTRL_pushedDispBtnEvent;
|
||||
bottom_buttons[BTN_BOT_5].gpio_port = BTN5_GPIO_Port;
|
||||
bottom_buttons[BTN_BOT_5].gpio_pin = BTN5_Pin;
|
||||
bottom_buttons[BTN_BOT_5].pushed_state = GPIO_PIN_SET;
|
||||
bottom_buttons[BTN_BOT_5].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
for (HW_BotBtnName_t btn_key = BTN_BOT_1; btn_key < BTN_BOT_MAX; btn_key++)
|
||||
{
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#include "hw_button.h"
|
||||
#include "ctrl_channel_button.h"
|
||||
|
||||
#define DUMMY_GPIO_Port GPIOA
|
||||
#define DUMMY_GPIO_Pin GPIO_PIN_0
|
||||
#define DUMMY_GPIO_Port B1_GPIO_Port
|
||||
#define DUMMY_GPIO_Pin B1_Pin
|
||||
|
||||
static ButtonKey_t channel_buttons[BTN_CH_MAX];
|
||||
|
||||
@@ -11,39 +11,41 @@ void CTRL_channelButtonInit(void)
|
||||
{
|
||||
channel_buttons[BTN_CH_1].instance = BTN_CH_1;
|
||||
channel_buttons[BTN_CH_1].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_1].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_1].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_1].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_1].buttonLongPressed = CTRL_longPushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_1].gpio_port = BTN_CH1_GPIO_Port;
|
||||
channel_buttons[BTN_CH_1].gpio_pin = BTN_CH1_Pin;
|
||||
channel_buttons[BTN_CH_1].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
channel_buttons[BTN_CH_2].instance = BTN_CH_2;
|
||||
channel_buttons[BTN_CH_2].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_2].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_2].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_2].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_2].buttonLongPressed = CTRL_longPushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_2].gpio_port = BTN_CH2_GPIO_Port;
|
||||
channel_buttons[BTN_CH_2].gpio_pin = BTN_CH2_Pin;
|
||||
channel_buttons[BTN_CH_2].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
channel_buttons[BTN_CH_3].instance = BTN_CH_3;
|
||||
channel_buttons[BTN_CH_3].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_3].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_3].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_3].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_3].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
channel_buttons[BTN_CH_4].instance = BTN_CH_4;
|
||||
channel_buttons[BTN_CH_4].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_4].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_4].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_4].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_4].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
channel_buttons[BTN_CH_5].instance = BTN_CH_5;
|
||||
channel_buttons[BTN_CH_5].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_5].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_5].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_5].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_5].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
channel_buttons[BTN_CH_6].instance = BTN_CH_6;
|
||||
channel_buttons[BTN_CH_6].buttonPressed = CTRL_pushedChanBtnEvent;
|
||||
channel_buttons[BTN_CH_6].gpio_port = DUMMY_GPIO_Port;
|
||||
channel_buttons[BTN_CH_6].gpio_pin = DUMMY_GPIO_Pin;
|
||||
channel_buttons[BTN_CH_6].pushed_state = GPIO_PIN_SET;
|
||||
channel_buttons[BTN_CH_6].pushed_state = GPIO_PIN_RESET;
|
||||
|
||||
for (HW_chanBtnName_t btn_key = BTN_CH_1; btn_key < BTN_CH_MAX; btn_key++)
|
||||
{
|
||||
@@ -63,6 +65,11 @@ void CTRL_channelButtonsHandler(void)
|
||||
}
|
||||
|
||||
__weak void CTRL_pushedChanBtnEvent(ButtonKey_t *key)
|
||||
{
|
||||
UNUSED(key);
|
||||
}
|
||||
|
||||
__weak void CTRL_longPushedChanBtnEvent(ButtonKey_t *key)
|
||||
{
|
||||
UNUSED(key);
|
||||
}
|
||||
@@ -13,4 +13,5 @@ typedef enum
|
||||
|
||||
void CTRL_channelButtonInit(void);
|
||||
void CTRL_channelButtonsHandler(void);
|
||||
void CTRL_pushedChanBtnEvent(ButtonKey_t *key);
|
||||
void CTRL_pushedChanBtnEvent(ButtonKey_t *key);
|
||||
void CTRL_longPushedChanBtnEvent(ButtonKey_t *key);
|
||||
@@ -2,7 +2,6 @@
|
||||
#include "spi.h"
|
||||
#include "i2c.h"
|
||||
#include "ctrl_app_types.h"
|
||||
#include "ctrl_app.h"
|
||||
#include "ad9833.h"
|
||||
#include "ltc2631.h"
|
||||
#include "mcp41x.h"
|
||||
@@ -10,12 +9,19 @@
|
||||
|
||||
typedef struct FG_handle_s FG_handle_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GPIO_TypeDef *port;
|
||||
uint16_t pin;
|
||||
} GEN_led_t;
|
||||
|
||||
struct FG_handle_s
|
||||
{
|
||||
ad9833_handle_t hdds;
|
||||
ltc2631_handle_t hoffs;
|
||||
mcp41x_handle_t hampl;
|
||||
FG_handle_t *link[2];
|
||||
GEN_led_t hled;
|
||||
};
|
||||
|
||||
typedef uint8_t timer_handle_t;
|
||||
@@ -24,6 +30,7 @@ typedef struct
|
||||
timer_handle_t hpwm;
|
||||
ltc2631_handle_t hoffs;
|
||||
mcp41x_handle_t hampl;
|
||||
GEN_led_t hled;
|
||||
} PWM_handle_t;
|
||||
|
||||
typedef enum
|
||||
@@ -47,35 +54,55 @@ PWM_handle_t pwm_gen[PWM_CHAN_MAX];
|
||||
|
||||
uint8_t ch_to_gen_ch[CHANNEL_MAX] = {FG_CHAN1, FG_CHAN2, FG_CHAN3, PWM_CHAN1, PWM_CHAN2, PWM_CHAN3};
|
||||
|
||||
#define DDS1_CS_PORT GPIOC
|
||||
#define DDS2_CS_PORT GPIOC
|
||||
#define DDS3_CS_PORT GPIOC
|
||||
// #define DDS1_CS_PORT GPIOC
|
||||
// #define DDS2_CS_PORT GPIOC
|
||||
// #define DDS3_CS_PORT GPIOC
|
||||
|
||||
#define DDS1_CS_PIN GPIO_PIN_0
|
||||
#define DDS2_CS_PIN GPIO_PIN_0
|
||||
#define DDS3_CS_PIN GPIO_PIN_0
|
||||
// #define DDS1_CS_PIN GPIO_PIN_0
|
||||
// #define DDS2_CS_PIN GPIO_PIN_0
|
||||
// #define DDS3_CS_PIN GPIO_PIN_0
|
||||
|
||||
#define AMP1_CS_PORT GPIOC
|
||||
#define AMP2_CS_PORT GPIOC
|
||||
#define AMP3_CS_PORT GPIOC
|
||||
// #define AMP1_CS_PORT GPIOC
|
||||
// #define AMP2_CS_PORT GPIOC
|
||||
// #define AMP3_CS_PORT GPIOC
|
||||
|
||||
#define AMP1_CS_PIN GPIO_PIN_0
|
||||
#define AMP2_CS_PIN GPIO_PIN_0
|
||||
#define AMP3_CS_PIN GPIO_PIN_0
|
||||
// #define AMP1_CS_PIN GPIO_PIN_0
|
||||
// #define AMP2_CS_PIN GPIO_PIN_0
|
||||
// #define AMP3_CS_PIN GPIO_PIN_0
|
||||
void led_init(GEN_led_t *hled, GPIO_TypeDef *port, uint16_t pin)
|
||||
{
|
||||
hled->port = port;
|
||||
hled->pin = pin;
|
||||
|
||||
HAL_GPIO_WritePin(port, pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
void led_on(GEN_led_t *hled)
|
||||
{
|
||||
HAL_GPIO_WritePin(hled->port, hled->pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
void led_off(GEN_led_t *hled)
|
||||
{
|
||||
HAL_GPIO_WritePin(hled->port, hled->pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
void gen_init()
|
||||
{
|
||||
ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_PORT, DDS1_CS_PIN);
|
||||
ad9833_init(&dds_gen[FG_CHAN2].hdds, &hspi2, DDS2_CS_PORT, DDS2_CS_PIN);
|
||||
ad9833_init(&dds_gen[FG_CHAN3].hdds, &hspi2, DDS3_CS_PORT, DDS3_CS_PIN);
|
||||
ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_GPIO_Port, DDS1_CS_Pin);
|
||||
ad9833_init(&dds_gen[FG_CHAN2].hdds, &hspi2, DDS2_CS_GPIO_Port, DDS2_CS_Pin);
|
||||
// ad9833_init(&dds_gen[FG_CHAN3].hdds, &hspi2, DDS3_CS_PORT, DDS3_CS_PIN);
|
||||
|
||||
ltc2631_init(&dds_gen[FG_CHAN1].hoffs, &hi2c1, 0x00, LTC2631_8BIT, LTC_REF_2V5);
|
||||
ltc2631_init(&dds_gen[FG_CHAN2].hoffs, &hi2c1, 0x01, LTC2631_8BIT, LTC_REF_2V5);
|
||||
ltc2631_init(&dds_gen[FG_CHAN3].hoffs, &hi2c1, 0x02, LTC2631_8BIT, LTC_REF_2V5);
|
||||
// ltc2631_init(&dds_gen[FG_CHAN1].hoffs, &hi2c1, 0x00, LTC2631_8BIT, LTC_REF_2V5);
|
||||
// ltc2631_init(&dds_gen[FG_CHAN2].hoffs, &hi2c1, 0x01, LTC2631_8BIT, LTC_REF_2V5);
|
||||
// ltc2631_init(&dds_gen[FG_CHAN3].hoffs, &hi2c1, 0x02, LTC2631_8BIT, LTC_REF_2V5);
|
||||
|
||||
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP1_CS_PORT, AMP1_CS_PIN, MCP41X_10K);
|
||||
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP2_CS_PORT, AMP2_CS_PIN, MCP41X_10K);
|
||||
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K);
|
||||
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP1_CS_GPIO_Port, AMP1_CS_Pin, MCP41X_10K);
|
||||
mcp41x_init(&dds_gen[FG_CHAN2].hampl, &hspi2, AMP2_CS_GPIO_Port, AMP2_CS_Pin, MCP41X_10K);
|
||||
// mcp41x_init(&dds_gen[FG_CHAN3].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K);
|
||||
|
||||
led_init(&dds_gen[FG_CHAN1].hled, LED_CH1_GPIO_Port, LED_CH1_Pin);
|
||||
led_init(&dds_gen[FG_CHAN2].hled, LED_CH2_GPIO_Port, LED_CH2_Pin);
|
||||
}
|
||||
|
||||
static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
|
||||
@@ -88,25 +115,25 @@ static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
|
||||
static void _setOffset(ltc2631_handle_t *hoffs, int16_t offs_x100)
|
||||
{
|
||||
uint32_t value = (offs_x100 + MAX_VOLT_POS) * LTC_REF_2V5;
|
||||
ULOG_DEBUG("(%d:_setAmplitude) offs_x100: %d, value: %d", __LINE__, offs_x100, value);
|
||||
ULOG_DEBUG("(%d:_setOffset) offs_x100: %d, value: %d", __LINE__, offs_x100, value);
|
||||
ltc2631_setOutputVoltage_u(hoffs, value);
|
||||
}
|
||||
|
||||
static void _setFreqDdsGen(ad9833_handle_t *hdds, uint32_t freq)
|
||||
{
|
||||
ULOG_DEBUG("(%d:_setAmplitude) freq: %d", __LINE__, freq);
|
||||
ULOG_DEBUG("(%d:_setFreqDdsGen) freq: %d", __LINE__, freq);
|
||||
ad9833_setFrequency(hdds, CHAN_0, freq);
|
||||
}
|
||||
|
||||
static void _setPhaseDdsGen(ad9833_handle_t *hdds, uint32_t phas)
|
||||
{
|
||||
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, phas);
|
||||
ULOG_DEBUG("(%d:_setPhaseDdsGen) phase: %d", __LINE__, phas);
|
||||
ad9833_setPhase(hdds, CHAN_0, phas);
|
||||
}
|
||||
|
||||
static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave)
|
||||
{
|
||||
ULOG_DEBUG("(%d:_setAmplitude) wave: %d", __LINE__, wave);
|
||||
ULOG_DEBUG("(%d:_setWaveDdsGen) wave: %d", __LINE__, wave);
|
||||
switch (wave)
|
||||
{
|
||||
case GEN_SIN:
|
||||
@@ -125,16 +152,18 @@ static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave)
|
||||
}
|
||||
}
|
||||
|
||||
static void _setEnabledDdsGen(ad9833_handle_t *hdds, GEN_fg_t *gen)
|
||||
static void _setEnabledDdsGen(FG_handle_t *hfg, GEN_fg_t *gen)
|
||||
{
|
||||
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, gen->enabled);
|
||||
ULOG_DEBUG("(%d:_setEnabledDdsGen) enabled: %d", __LINE__, gen->enabled);
|
||||
switch (gen->enabled)
|
||||
{
|
||||
case FALSE:
|
||||
ad9833_setMode(hdds, MODE_OFF);
|
||||
ad9833_setMode(&hfg->hdds, MODE_OFF);
|
||||
led_off(&hfg->hled);
|
||||
break;
|
||||
case TRUE:
|
||||
_setWaveDdsGen(hdds, gen->wave);
|
||||
_setWaveDdsGen(&hfg->hdds, gen->wave);
|
||||
led_on(&hfg->hled);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -155,13 +184,13 @@ static void _setDutyPwmGen(timer_handle_t *hpwm, uint8_t duty)
|
||||
{
|
||||
}
|
||||
|
||||
static void _setEnabledPwmGen(timer_handle_t *hpwm, bool_t en)
|
||||
static void _setEnabledPwmGen(PWM_handle_t *hpwm, bool_t en)
|
||||
{
|
||||
}
|
||||
|
||||
void setFreq(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setFreq(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setFreqDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->frequency);
|
||||
@@ -171,14 +200,14 @@ void setFreq(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setAmplitude(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setAmpliude(&dds_gen[ch_to_gen_ch[channel]].hampl, ((GEN_fg_t *)gen->gen)->amplitude);
|
||||
@@ -188,14 +217,14 @@ void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setOfsset(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setOfsset(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setOffset(&dds_gen[ch_to_gen_ch[channel]].hoffs, ((GEN_fg_t *)gen->gen)->offset);
|
||||
@@ -205,14 +234,14 @@ void setOfsset(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setPhase(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setPhase(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setPhaseDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->phase);
|
||||
@@ -222,56 +251,56 @@ void setPhase(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setWave(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setWave(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setWaveDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->wave);
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setDuty(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setDuty(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_PWM_TYPE:
|
||||
_setDutyPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->duty);
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setEnabled(GENERATOR_t *gen, GEN_channel_t channel)
|
||||
void setEnabled(GEN_sig_t *gen, GEN_channel_t channel)
|
||||
{
|
||||
switch (gen->gen_type)
|
||||
switch (gen->type)
|
||||
{
|
||||
case GEN_FG_TYPE:
|
||||
_setEnabledDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen));
|
||||
_setEnabledDdsGen(&dds_gen[ch_to_gen_ch[channel]], ((GEN_fg_t *)gen->gen));
|
||||
break;
|
||||
case GEN_PWM_TYPE:
|
||||
_setEnabledPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->enabled);
|
||||
_setEnabledPwmGen(&pwm_gen[ch_to_gen_ch[channel]], ((GEN_pwm_t *)gen->gen)->enabled);
|
||||
break;
|
||||
|
||||
default:
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type);
|
||||
ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setLink(GENERATOR_t *source_gen, GEN_channel_t source_ch, GENERATOR_t *dest_gen, GEN_channel_t dest_ch)
|
||||
void setLink(GEN_sig_t *source_gen, GEN_channel_t source_ch, GEN_sig_t *dest_gen, GEN_channel_t dest_ch)
|
||||
{
|
||||
}
|
||||
@@ -1 +1,12 @@
|
||||
#pragma once
|
||||
#include "ctrl_app.h"
|
||||
|
||||
void setLink(GEN_sig_t *source_gen, GEN_channel_t source_ch, GEN_sig_t *dest_gen, GEN_channel_t dest_ch);
|
||||
void setEnabled(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setDuty(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setWave(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setPhase(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setOfsset(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setAmplitude(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void setFreq(GEN_sig_t *gen, GEN_channel_t channel);
|
||||
void gen_init();
|
||||
@@ -180,7 +180,7 @@ static void _drawPhaseValueHelper(GFX_display_t *disp, uint32_t phase, uint8_t f
|
||||
|
||||
static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data)
|
||||
{
|
||||
GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator;
|
||||
GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->curr_gen;
|
||||
switch (app_data->curr_state_lay)
|
||||
{
|
||||
case LAY_FREQ:
|
||||
@@ -220,7 +220,7 @@ static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data)
|
||||
|
||||
static void _drawPwmGenValues(GFX_display_t *disp, APP_data_t *app_data)
|
||||
{
|
||||
// GEN_pwm_t *pwm_gen = app_data->generator;
|
||||
// GEN_pwm_t *pwm_gen = app_data->curr_gen;
|
||||
}
|
||||
|
||||
static void _drawValues(GFX_display_t *disp, APP_data_t *app_data)
|
||||
@@ -249,7 +249,7 @@ static void _drawOffsetLine(GFX_display_t *disp, int16_t offs, uint32_t ampl)
|
||||
vert_shift = MIN(vert_shift, 20);
|
||||
vert_shift = MAX(vert_shift, -19);
|
||||
|
||||
ULOG_TRACE("<OFFSLINE> shift: %i", vert_shift);
|
||||
// ULOG_DEBUG("<OFFSLINE> shift: %i", vert_shift);
|
||||
DISP_drawHorizontalLine(disp, 2, 31 + vert_shift, 57, GFX_WHITE);
|
||||
}
|
||||
|
||||
@@ -264,7 +264,7 @@ static void _drawOffsetLine(GFX_display_t *disp, int16_t offs, uint32_t ampl)
|
||||
|
||||
static void _drawFunGenGraph(GFX_display_t *disp, APP_data_t *app_data)
|
||||
{
|
||||
GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator;
|
||||
GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->curr_gen;
|
||||
DISP_clearRegion(disp, 3, 12, 57, 40);
|
||||
|
||||
switch (fun_gen->wave)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#include "ad9833.h"
|
||||
|
||||
// Convenience calculations
|
||||
static uint32_t ad9833_calcFreq(float f); // Calculate AD9833 frequency register from a frequency
|
||||
static uint16_t ad9833_calcPhase(float a); // Calculate AD9833 phase register from phase
|
||||
// static uint32_t ad9833_calcFreq(float f); // Calculate AD9833 frequency register from a frequency
|
||||
// static uint16_t ad9833_calcPhase(float a); // Calculate AD9833 phase register from phase
|
||||
|
||||
static void ad9833_transmit16(ad9833_handle_t *hfg, uint16_t data)
|
||||
{
|
||||
@@ -51,11 +51,10 @@ void ad9833_init(ad9833_handle_t *hfg, SPI_HandleTypeDef *hspi, GPIO_TypeDef *cs
|
||||
ad9833_setFrequency(hfg, CHAN_1, AD_DEFAULT_FREQ);
|
||||
ad9833_setPhase(hfg, CHAN_0, AD_DEFAULT_PHASE);
|
||||
ad9833_setPhase(hfg, CHAN_1, AD_DEFAULT_PHASE);
|
||||
ad9833_reset(hfg, 0); // full transition
|
||||
|
||||
ad9833_setMode(hfg, MODE_OFF);
|
||||
ad9833_setActiveChannelFreq(hfg, CHAN_0);
|
||||
ad9833_setActiveChannelPhase(hfg, CHAN_0);
|
||||
ad9833_setActiveChannelFreq(hfg, CHAN_0);
|
||||
ad9833_setMode(hfg, MODE_OFF);
|
||||
ad9833_reset(hfg, 0); // full transition
|
||||
}
|
||||
|
||||
void ad9833_setActiveChannelFreq(ad9833_handle_t *hfg, AD_channel_t chan)
|
||||
@@ -146,26 +145,35 @@ void ad9833_setMode(ad9833_handle_t *hfg, AD_mode_t mode)
|
||||
ad9833_transmit16(hfg, hfg->_regCtl);
|
||||
}
|
||||
|
||||
static uint32_t ad9833_calcFreq(float f)
|
||||
// Calculate register value for AD9833 frequency register from a frequency
|
||||
// static uint32_t ad9833_calcFreq(float f)
|
||||
// // Calculate register value for AD9833 frequency register from a frequency
|
||||
// {
|
||||
// return (uint32_t)((f * AD_2POW28 / AD_MCLK) + 0.5f);
|
||||
// }
|
||||
|
||||
static uint32_t ad9833_calcFreq_uint(uint32_t f)
|
||||
{
|
||||
return (uint32_t)((f * AD_2POW28 / AD_MCLK) + 0.5f);
|
||||
return ((f * AD_2POW28 + AD_MCLK_DIV2) / AD_MCLK); // ((n + d/2)/d)
|
||||
}
|
||||
|
||||
static uint16_t ad9833_calcPhase(float a)
|
||||
// Calculate the value for AD9833 phase register from given phase in tenths of a degree
|
||||
{
|
||||
return (uint16_t)((512.0f * (a / 10) / 45) + 0.5f);
|
||||
}
|
||||
// static uint16_t ad9833_calcPhase(float a)
|
||||
// // Calculate the value for AD9833 phase register from given phase in tenths of a degree
|
||||
// {
|
||||
// return (uint16_t)((512.0f * (a / 10) / 45) + 0.5f);
|
||||
// }
|
||||
|
||||
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, float freq)
|
||||
static uint16_t ad9833_calcPhase_uint(uint16_t p)
|
||||
{
|
||||
return ((p * 4096U + 180) / 360);
|
||||
}
|
||||
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, uint32_t freq)
|
||||
{
|
||||
// PRINT("\nsetFreq CHAN_", chan);
|
||||
uint16_t freq_channel = 0;
|
||||
|
||||
hfg->_freq[chan] = freq;
|
||||
|
||||
hfg->_regFreq[chan] = ad9833_calcFreq(freq);
|
||||
hfg->_regFreq[chan] = ad9833_calcFreq_uint(freq);
|
||||
|
||||
// select the address mask
|
||||
|
||||
@@ -198,7 +206,7 @@ void ad9833_setPhase(ad9833_handle_t *hfg, AD_channel_t chan, uint16_t phase)
|
||||
uint16_t phase_channel = 0;
|
||||
|
||||
hfg->_phase[chan] = phase;
|
||||
hfg->_regPhase[chan] = ad9833_calcPhase(phase);
|
||||
hfg->_regPhase[chan] = ad9833_calcPhase_uint(phase);
|
||||
|
||||
// select the address mask
|
||||
switch (chan)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#define AD_DEFAULT_FREQ 1000U ///< Default initialisation frequency (Hz)
|
||||
#define AD_DEFAULT_PHASE 0 ///< Default initialisation phase angle (degrees)
|
||||
#define AD_MCLK 25000000UL ///< Clock speed of the AD9833 reference clock in Hz
|
||||
#define AD_DEFAULT_FREQ 1000U ///< Default initialisation frequency (Hz)
|
||||
#define AD_DEFAULT_PHASE 0 ///< Default initialisation phase angle (degrees)
|
||||
#define AD_MCLK 25000000U ///< Clock speed of the AD9833 reference clock in Hz
|
||||
#define AD_MCLK_DIV2 12500000U ///< Clock speed of the AD9833 reference clock in Hz
|
||||
/**
|
||||
* Channel enumerated type.
|
||||
*
|
||||
@@ -52,5 +53,5 @@ AD_channel_t ad9833_getActiveChannelFreq(ad9833_handle_t *hfg);
|
||||
void ad9833_setActiveChannelPhase(ad9833_handle_t *hfg, AD_channel_t chan);
|
||||
AD_channel_t ad9833_getActiveChannelPhase(ad9833_handle_t *hfg);
|
||||
void ad9833_setMode(ad9833_handle_t *hfg, AD_mode_t mode);
|
||||
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, float freq);
|
||||
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, uint32_t freq);
|
||||
void ad9833_setPhase(ad9833_handle_t *hfg, AD_channel_t chan, uint16_t phase);
|
||||
@@ -41,4 +41,4 @@
|
||||
#define SEL_PHASE1 (1 << AD_FREQ0 | 1 << AD_FREQ1 | 1 << AD_PHASE)
|
||||
|
||||
// AD9833 frequency and phase calculation macros
|
||||
#define AD_2POW28 (1UL << 28) ///< Used when calculating output frequency
|
||||
#define AD_2POW28 (1ULL << 28) ///< Used when calculating output frequency
|
||||
|
||||
Reference in New Issue
Block a user