1
0

display adc measure with provided app

This commit is contained in:
Rémi Heredero 2024-01-13 19:15:56 +01:00
parent 65ff5de90f
commit bf3d58a8d0
5 changed files with 112 additions and 12 deletions

View File

@ -8,6 +8,10 @@
#include "stm32f7xx_hal.h" #include "stm32f7xx_hal.h"
#include "main.h" #include "main.h"
#include "board/buttonscontroller.h" #include "board/buttonscontroller.h"
#include "app/factory.h"
uint16_t adcValuesBuffer[ADC_VALUES_BUFFER_SIZE];
int ADCBufferIndex = 0;
extern "C" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) extern "C" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
@ -26,8 +30,10 @@ extern "C" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
} }
extern "C" void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef * hadc) { extern "C" void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef * hadc) {
HAL_GPIO_TogglePin(OUT1_GPIO_Port, OUT1_Pin); //HAL_GPIO_TogglePin(OUT1_GPIO_Port, OUT1_Pin);
volatile uint32_t value = HAL_ADC_GetValue(hadc); adcValuesBuffer[ADCBufferIndex] = HAL_ADC_GetValue(hadc);
ADCBufferIndex++;
if(ADCBufferIndex == ADC_VALUES_BUFFER_SIZE) ADCBufferIndex = 0;
} }

View File

@ -18,12 +18,14 @@
/* USER CODE END Header */ /* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "main.h" #include "main.h"
#include "app_touchgfx.h"
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "xf/xf.h" #include "xf/xf.h"
#include "xf/port/port-functions.h" #include "xf/port/port-functions.h"
#include "app/factory.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
@ -34,6 +36,22 @@
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */ /* USER CODE BEGIN PD */
#define REFRESH_COUNT 1835
#define SDRAM_TIMEOUT ((uint32_t)0xFFFF)
#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001)
#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002)
#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004)
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008)
#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020)
#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030)
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200)
/* USER CODE END PD */ /* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/
@ -67,7 +85,7 @@ UART_HandleTypeDef huart1;
SDRAM_HandleTypeDef hsdram1; SDRAM_HandleTypeDef hsdram1;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
static FMC_SDRAM_CommandTypeDef Command;
/* USER CODE END PV */ /* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
@ -87,6 +105,7 @@ static void MX_TIM3_Init(void);
static void MX_TIM5_Init(void); static void MX_TIM5_Init(void);
static void MX_TIM8_Init(void); static void MX_TIM8_Init(void);
static void MX_USART1_UART_Init(void); static void MX_USART1_UART_Init(void);
void TouchGFX_Task(void *argument);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* USER CODE END PFP */ /* USER CODE END PFP */
@ -142,8 +161,15 @@ int main(void)
MX_USART1_UART_Init(); MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1); //HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1);
HAL_ADC_Start_IT(&hadc3); //HAL_ADC_Start_IT(&hadc3);
MX_TouchGFX_Init();
XF_initialize(10);
Factory_initialize();
Factory_build();
XF_exec();
/* USER CODE END 2 */ /* USER CODE END 2 */
@ -151,8 +177,6 @@ int main(void)
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) { while (1) {
//HAL_Delay(2000);
/* USER CODE END WHILE */ /* USER CODE END WHILE */
@ -939,6 +963,61 @@ static void MX_FMC_Init(void)
/* USER CODE BEGIN FMC_Init 2 */ /* USER CODE BEGIN FMC_Init 2 */
__IO uint32_t tmpmrd = 0;
/* Step 1: Configure a clock configuration enable command */
Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 2: Insert 100 us minimum delay */
/* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
HAL_Delay(1);
/* Step 3: Configure a PALL (precharge all) command */
Command.CommandMode = FMC_SDRAM_CMD_PALL;
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 4: Configure an Auto Refresh command */
Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command.AutoRefreshNumber = 8;
Command.ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 5: Program the external memory mode register */
tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 | \
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | \
SDRAM_MODEREG_CAS_LATENCY_3 | \
SDRAM_MODEREG_OPERATING_MODE_STANDARD | \
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = tmpmrd;
/* Send the command */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 6: Set the refresh rate counter */
/* Set the device refresh rate */
HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT);
//Deactivate speculative/cache access to first FMC Bank to save FMC bandwidth
FMC_Bank1->BTCR[0] = 0x000030D2;
/* USER CODE END FMC_Init 2 */ /* USER CODE END FMC_Init 2 */
} }

View File

@ -6,6 +6,9 @@
extern "C" TIM_HandleTypeDef htim1; // Defined in main.c extern "C" TIM_HandleTypeDef htim1; // Defined in main.c
extern "C" ADC_HandleTypeDef hadc3; // Defined in main.c extern "C" ADC_HandleTypeDef hadc3; // Defined in main.c
extern "C" uint16_t adcValuesBuffer[ADC_VALUES_BUFFER_SIZE];
extern "C" int ADCBufferIndex;
oscilloscope::Controller Factory::_oscilloscopeController; oscilloscope::Controller Factory::_oscilloscopeController;
oscilloscope::Gui Factory::_gui; oscilloscope::Gui Factory::_gui;
external::FrequencyGenerator Factory::_fgen; external::FrequencyGenerator Factory::_fgen;
@ -34,8 +37,7 @@ void Factory::initialize()
Trace::out("---------------------------------------------"); Trace::out("---------------------------------------------");
Trace::out("Initializing..."); Trace::out("Initializing...");
// TODO: Uncomment code line below in order to call OscilloscopeController's initialize() method getOscilloscopeController().initialize(getGui(), adcValuesBuffer, ADC_VALUES_BUFFER_SIZE);
// getOscilloscopeController().initialize(getGui(), adcValuesBuffer, ADC_VALUES_BUFFER_SIZE);
getFrequencyGenerator().initialize(); getFrequencyGenerator().initialize();
getFreqGenController().initialize(getGui()); getFreqGenController().initialize(getGui());
#if (TOUCHGFX_BAREMETAL != 0) #if (TOUCHGFX_BAREMETAL != 0)

View File

@ -18,6 +18,8 @@
#include "board/buttonscontroller.h" #include "board/buttonscontroller.h"
using external::FrequencyGenerator; using external::FrequencyGenerator;
#define ADC_VALUES_BUFFER_SIZE 8000
/** /**
* @brief Factory creating all objects/components and relations between them. * @brief Factory creating all objects/components and relations between them.
*/ */

View File

@ -108,9 +108,20 @@ void Controller::onCheckBoxTriggerCheckState(bool checked)
GEN(evCheckBoxTrigger(checked, CHECK_BOX_TRIGGER_ID)); GEN(evCheckBoxTrigger(checked, CHECK_BOX_TRIGGER_ID));
} }
void Controller::doShowAnalogSignal() void Controller::doShowAnalogSignal() {
{
// TODO: Call gui().drawGraphPoints() with the appropriate data. /*
* 460px for 8 div
* fs = 100kHz => 100 samples/ms
* 500 us/div => 400 samples => scale = 400/460 = 0,870
* 1 ms/div => 800 samples => scale = 800/460 = 1,739
* 2 ms/div => 1600 samples => scale = 1600/460 = 3,478
* 5 ms/div => 4000 samples => scale = 4000/460 = 8,696
* 10 ms/div => 8000 samples => scale = 8000/460 = 17,391
*/
static float scales[7] = {0.87,0.87,1.739,3.478,8.696,17.391,17.391};
float scale = scales[this->_tdivValue];
gui().drawGraphPoints(_adcValuesBuffer, _adcValuesBufferSize, scale);
} }
void Controller::doButtonTimePlusPressed() void Controller::doButtonTimePlusPressed()