2024-04-12 05:12 AM
I am trying to read 4-20mA Transducer using ADC and DMA Enabled. Normally OLED works fine.
But when i enabled DMA, OLED is blank. What could be wrong ?
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_I2C1_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, ADC_BUF_LEN); // start the adc in dma mode
ssd1306_Init();
// here value is the buffer, where the adc values are going to store
// 3 is the number of values going to store == no. of channels we are using
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// HAL_ADC_Start_DMA(&hadc1, value, 2); // start the adc in dma mode
//ssd1306_TestFPS();
//ssd1306_TestAll();
// ssd1306_TestFonts22();
// Example loop to demonstrate the counter increment
for (int i = 0; i < 1000; i++) {
// adc1x = value[0];
ssd1306_TestFonts22(); // Display the current counter value
incrementCounter(); // Increment the counter
// HAL_Delay(50);
}
}
/* USER CODE END 3 */
}
void ssd1306_TestFonts22() {
#ifdef SSD1306_INCLUDE_FONT_16x24
uint8_t x1, y1, x2, y2;
// Convert the float counter value to a string
// char counter_str[6]; // Assuming the format is XX.XX
// snprintf(counter_str, 5, "%2.2f", counter);
char float_str[10]; // Assuming the format is XX.XX
snprintf(float_str, 10, "%02.2f" "%%rH", counter);
// char decimal_str[10]; // Assuming the format is XX.XX
// snprintf(decimal_str, 10, "%4d", adc1x);
ssd1306_Fill(Black);
// Display the counter value
ssd1306_SetCursor(0, 4);
ssd1306_WriteString(float_str, Font_16x24, White);
// Other text
// ssd1306_SetCursor(0, 4+24+8);
// ssd1306_WriteString(decimal_str, Font_16x24, White);
// Underline
x1 = 6*16;
y1 = 4+24+8+24;
x2 = x1+16;
y2 = y1+2;
ssd1306_FillRectangle(x1, y1, x2, y2, White);
ssd1306_UpdateScreen();
#endif
}
2024-04-12 05:33 AM
>But when i enabled DMA, OLED is blank. What could be wrong ?
Something in your program...! :)
Check where DMA is writing to and size of target area - really in the array you set ?
btw
I made a small DSO , using F103 + SSD1306 ; no problems . Used u8g lib (see on github).