den2life

Stm32F429 + Tft

13 сообщений в этой теме

den2life    2

Помогите Пожалуйста. (среда Keil, ЦП: STM32429VG)

Вообщем не получается настроить проц для экрана 480 на 272 RGB, использую встроенный контроллер LTDC. Экран без контроллер.

даташит от экрана вставил.

Вот мой пример инициализации для данного экрана.

void initialization_LTDC (void)
{

 LTDC_InitTypeDef	   LTDC_InitStruct;
 LTDC_Layer_InitTypeDef LTDC_Layer_InitStruct;
 //A, B, C, D, E
  RCC->AHB1ENR |= (1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);

 GPIOE->MODER |= (1<<20); //DISP


 GPIOA->MODER |= (1<<25)| //12
	  (1<<23)| //11
	  (1<<13)| //6
	  (1<<9)|  //4
	  (1<<7);  //3

 GPIOB->MODER |= (1<<23)| //11
	  (1<<21)| //10
	  (1<<19)| //9
	  (1<<17)| //8
	  (1<<3)|  //1
	  (1<<1);  //0

 GPIOC->MODER |= (1<<21)| //10
	  (1<<15)| //7
	  (1<<13); //6

 GPIOE->MODER |= (1<<31)| //15
	  (1<<29)| //14
	  (1<<27)| //13
	  (1<<25)| //12
	  (1<<23); //11

 GPIOD->MODER |= (1<<21)| //10
	  (1<<7);  //3

 GPIOA->OSPEEDR |= 0x3C033C0;
 GPIOB->OSPEEDR |= 0xFF000F;
 GPIOC->OSPEEDR |= 0x30F000;
 GPIOE->OSPEEDR |= 0xFFC00000;
 GPIOD->OSPEEDR |= 0x3000C0;

 GPIOA->AFR[0] |= 0xE0EE000;
 GPIOA->AFR[1] |= 0xEE000;
 GPIOB->AFR[0] |= 0xEE;
 GPIOB->AFR[1] |= 0xEEEE;
 GPIOC->AFR[0] |= 0xEE000000;
 GPIOC->AFR[1] |= 0xE00;
 GPIOE->AFR[1] |= 0xEEEEE000;
 GPIOD->AFR[0] |= 0xE000;
 GPIOD->AFR[1] |= 0xE00;

 //LTDC
 RCC->APB2ENR |= (1<<26);

 //DMA2D
 RCC->AHB1ENR |= (1<<23);
 /* Configure PLLSAI prescalers for LCD */
 /* Enable Pixel Clock */
 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 192 Mhz */
 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAI_R = 192/4 = 48 Mhz */
 /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 48/8 = 6 Mhz */
 RCC_PLLSAIConfig(192, 7, 4);
 RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

//RCC->PLLSAICFGR |=
 /* Enable PLLSAI Clock */
 RCC_PLLSAICmd(ENABLE);
 /* Wait for PLLSAI activation */
 while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET)
 {
 }

/* LCD Size (Width and Height) */
#define  LCD_PIXEL_WIDTH    ((uint16_t)480)
#define  LCD_PIXEL_HEIGHT   ((uint16_t)272)
#define LCD_FRAME_BUFFER	   ((uint32_t)0xD0000000)
#define BUFFER_OFFSET		  ((uint32_t)0x50000)
#define HFP 2  //// HFP  96
#define HSYNC 40 //// HSYNC  22
#define HBP 87  //// HBP  33
///*************************************************************************************************
#define VFP 2  //// VFP  5
#define VSYNC 9  //// VSYNC 1
#define VBP 11  //// VBP  35
///*************************************************************************************************
#define ACTIVE_W 567//(HSYNC + LCD_PIXEL_WIDTH + HBP - 1)  //
#define ACTIVE_H 283//(VSYNC + LCD_PIXEL_HEIGHT + VBP - 1)
///*************************************************************************************************
#define TOTAL_WIDTH 575//(HSYNC + HBP + LCD_PIXEL_WIDTH + HFP - 1)  //
#define TOTAL_HEIGHT 286//(VSYNC + VBP + LCD_PIXEL_HEIGHT + VFP - 1)
///*************************************************************************************************
 /* Timing configuration */ 
 /* Configure horizontal synchronization width */	
 LTDC_InitStruct.LTDC_HorizontalSync = HSYNC;
 /* Configure vertical synchronization height */
 LTDC_InitStruct.LTDC_VerticalSync = VSYNC;
 /* Configure accumulated horizontal back porch */
 LTDC_InitStruct.LTDC_AccumulatedHBP = HBP+HSYNC-1;
 /* Configure accumulated vertical back porch */
 LTDC_InitStruct.LTDC_AccumulatedVBP = VSYNC+VBP-1; 
 /* Configure accumulated active width */ 
 LTDC_InitStruct.LTDC_AccumulatedActiveW = ACTIVE_W;
 /* Configure accumulated active height */
 LTDC_InitStruct.LTDC_AccumulatedActiveH = ACTIVE_H;
 /* Configure total width */
 LTDC_InitStruct.LTDC_TotalWidth = TOTAL_WIDTH;
 /* Configure total height */
 LTDC_InitStruct.LTDC_TotalHeigh = TOTAL_HEIGHT;

 LTDC_Init(&LTDC_InitStruct);

 /*//LTDC
 LTDC->SSCR = 0x90001; //Sync
 LTDC->BPCR = 0xE0005; //Back Porch
 LTDC->AWCR = 0x11E01E5; //Active Width
 LTDC->TWCR = 0x12001E7; //Total Width
 */
   /* Windowing configuration */
 /* In this case all the active display area is used to display a picture then :
 Horizontal start = horizontal synchronization + Horizontal back porch = 30
 Horizontal stop = Horizontal start + window width -1 = 30 + 240 -1
 Vertical start   = vertical synchronization + vertical back porch	 = 4
 Vertical stop   = Vertical start + window height -1  = 4 + 320 -1	  */	 
LTDC_Layer_InitStruct.LTDC_HorizontalStart = HBP+HSYNC;
LTDC_Layer_InitStruct.LTDC_HorizontalStop = (LCD_PIXEL_WIDTH + HBP+HSYNC - 1);
LTDC_Layer_InitStruct.LTDC_VerticalStart = VSYNC + VBP;
LTDC_Layer_InitStruct.LTDC_VerticalStop = (LCD_PIXEL_HEIGHT + VSYNC+VBP - 1);

 /* Pixel Format configuration*/
 LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
 /* Alpha constant (255 totally opaque) */
 LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255;
 /* Default Color configuration (configure A,R,G,B component values) */		 
 LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 255;	   
 LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 255;	  
 LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 255;		
 LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
 /* Configure blending factors */	  
 LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;   
 LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;

 /* the length of one line of pixels in bytes + 3 then :
 Line Lenth = Active high width x number of bytes per pixel + 3
 Active high width		 = LCD_PIXEL_WIDTH
 number of bytes per pixel = 2    (pixel_format : RGB565)
 */
 LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_PIXEL_WIDTH * 2) + 3);
 /* the pitch is the increment from the start of one line of pixels to the
 start of the next line in bytes, then :
 Pitch = Active high width x number of bytes per pixel */
 LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_PIXEL_WIDTH * 2);

 /* Configure the number of lines */ 
 LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PIXEL_HEIGHT;

 /* Start Address configuration : the LCD Frame buffer is defined on SDRAM */   
 LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER;

 /* Initialize LTDC layer 1 */
 LTDC_LayerInit(LTDC_Layer1, &LTDC_Layer_InitStruct);

 /* Configure Layer2 */
 /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */	
 LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER + BUFFER_OFFSET;

 /* Configure blending factors */	  
 LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;   
 LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;

 /* Initialize LTDC layer 2 */
 LTDC_LayerInit(LTDC_Layer2, &LTDC_Layer_InitStruct);

 /* LTDC configuration reload */ 
 LTDC_ReloadConfig(LTDC_IMReload);

 /* Enable foreground & background Layers */
 LTDC_LayerCmd(LTDC_Layer1, ENABLE);
 LTDC_LayerCmd(LTDC_Layer2, ENABLE);

 /* LTDC configuration reload */ 
 LTDC_ReloadConfig(LTDC_IMReload);

 /* Set default font */   
// LCD_SetFont(&LCD_DEFAULT_FONT);

 /* dithering activation */
 LTDC_DitherCmd(ENABLE);

LTDC->GCR |= (1<<0);   //LTDC En

GPIOE->ODR |= (1<<10); //DISPLAY ON

Как быть? Фото вставил что из этого вышло.

NHD-4.3-480272MF-ATXI-T-1.pdf

post-144830-0-52185100-1395138873_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Диман    107

Вынул подобный экран из gps и подключаю его к stm32f407. Судя по фото, не правильно настроены такты горизонтальной и вертикальной синхронизации

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2
Судя по фото, не правильно настроены такты горизонтальной и вертикальной синхронизации

Как правильно настраивать hsync, vsync, horizontal and vertical back porch, etc? не правильно понял как настраивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2

Вс

не правильно настроены такты горизонтальной и вертикальной синхронизации

вообщем сделал по даташиту кристала все значения параметров tft. вышел такой код:

LTDC_InitTypeDef	 LTDC_InitStruct;
LTDC_Layer_InitTypeDef LTDC_Layer_InitStruct;
//A, B, C, D, E
RCC->AHB1ENR |= (1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);

GPIOE->MODER |= (1<<20); //DISP
GPIOE->ODR |= (1<<10);

GPIOA->MODER |= (1<<25)| //12
	 (1<<23)| //11
	 (1<<13)| //6
	 (1<<9)| //4
	 (1<<7); //3

GPIOB->MODER |= (1<<23)| //11
	 (1<<21)| //10
	 (1<<19)| //9
	 (1<<17)| //8
	 (1<<3)| //1
	 (1<<1); //0

GPIOC->MODER |= (1<<21)| //10
	 (1<<15)| //7
	 (1<<13); //6

GPIOE->MODER |= (1<<31)| //15
	 (1<<29)| //14
	 (1<<27)| //13
	 (1<<25)| //12
	 (1<<23); //11

GPIOD->MODER |= (1<<21)| //10
	 (1<<7); //3

GPIOA->OSPEEDR |= 0x3C033C0;
GPIOB->OSPEEDR |= 0xFF000F;
GPIOC->OSPEEDR |= 0x30F000;
GPIOE->OSPEEDR |= 0xFFC00000;
GPIOD->OSPEEDR |= 0x3000C0;

GPIOA->AFR[0] |= 0xE0EE000;
GPIOA->AFR[1] |= 0xEE000;
GPIOB->AFR[0] |= 0xEE;
GPIOB->AFR[1] |= 0xEEEE;
GPIOC->AFR[0] |= 0xEE000000;
GPIOC->AFR[1] |= 0xE00;
GPIOE->AFR[1] |= 0xEEEEE000;
GPIOD->AFR[0] |= 0xE000;
GPIOD->AFR[1] |= 0xE00;

//LTDC
RCC->APB2ENR |= (1<<26);

//DMA2D
RCC->AHB1ENR |= (1<<23);
/* Configure PLLSAI prescalers for LCD */
/* Enable Pixel Clock */
/* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
/* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 192 Mhz */
/* PLLLCDCLK = PLLSAI_VCO Output/PLLSAI_R = 192/4 = 48 Mhz */
/* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 48/8 = 6 Mhz */
RCC_PLLSAIConfig(192, 7, 4);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

//RCC->PLLSAICFGR |=
/* Enable PLLSAI Clock */
RCC_PLLSAICmd(ENABLE);
/* Wait for PLLSAI activation */
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET)
{
}

/* LCD Size (Width and Height) */
#define LCD_PIXEL_WIDTH ((uint16_t)480)
#define LCD_PIXEL_HEIGHT ((uint16_t)272)
#define LCD_FRAME_BUFFER	 ((uint32_t)0xD0000000)
#define BUFFER_OFFSET		 ((uint32_t)0x50000)
#define HFP 2 //// HFP 96
#define HSYNC 35 //// HSYNC 22
#define HBP 120 //// HBP 33
///*************************************************************************************************
#define VFP 2 //// VFP 5
#define VSYNC 7 //// VSYNC 1
#define VBP 11 //// VBP 35
///*************************************************************************************************
#define ACTIVE_W (HSYNC + HBP + LCD_PIXEL_WIDTH - 1)
#define ACTIVE_H (VSYNC + VBP+ LCD_PIXEL_HEIGHT - 1)
///*************************************************************************************************
#define TOTAL_WIDTH (HSYNC + HBP + LCD_PIXEL_WIDTH + HFP - 1) //
#define TOTAL_HEIGHT (VSYNC + VBP + LCD_PIXEL_HEIGHT + VFP - 1)
///*************************************************************************************************
/* Timing configuration */
/* Configure horizontal synchronization width */	
LTDC_InitStruct.LTDC_HorizontalSync = HSYNC;
/* Configure vertical synchronization height */
LTDC_InitStruct.LTDC_VerticalSync = VSYNC;
/* Configure accumulated horizontal back porch */
LTDC_InitStruct.LTDC_AccumulatedHBP = HBP+HSYNC-1;
/* Configure accumulated vertical back porch */
LTDC_InitStruct.LTDC_AccumulatedVBP = VSYNC+VBP-1;
/* Configure accumulated active width */
LTDC_InitStruct.LTDC_AccumulatedActiveW = ACTIVE_W;
/* Configure accumulated active height */
LTDC_InitStruct.LTDC_AccumulatedActiveH = ACTIVE_H;
/* Configure total width */
LTDC_InitStruct.LTDC_TotalWidth = TOTAL_WIDTH;
/* Configure total height */
LTDC_InitStruct.LTDC_TotalHeigh = TOTAL_HEIGHT;

LTDC_Init(&LTDC_InitStruct);

/*//LTDC
LTDC->SSCR = 0x90001; //Sync
LTDC->BPCR = 0xE0005; //Back Porch
LTDC->AWCR = 0x11E01E5; //Active Width
LTDC->TWCR = 0x12001E7; //Total Width
*/
/* Windowing configuration */
/* In this case all the active display area is used to display a picture then :
Horizontal start = horizontal synchronization + Horizontal back porch = 30
Horizontal stop = Horizontal start + window width -1 = 30 + 240 -1
Vertical start = vertical synchronization + vertical back porch	 = 4
Vertical stop = Vertical start + window height -1 = 4 + 320 -1	 */	
LTDC_Layer_InitStruct.LTDC_HorizontalStart = 2;//HBP+HSYNC;
LTDC_Layer_InitStruct.LTDC_HorizontalStop = (LCD_PIXEL_WIDTH + HBP+HSYNC - 1);
LTDC_Layer_InitStruct.LTDC_VerticalStart = 25;//VSYNC + VBP;
LTDC_Layer_InitStruct.LTDC_VerticalStop = (LCD_PIXEL_HEIGHT + VSYNC+VBP - 1);

/* Pixel Format configuration*/
LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
/* Alpha constant (255 totally opaque) */
LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255;
/* Default Color configuration (configure A,R,G,B component values) */		
LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 255;	
LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;	
LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;		
LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
/* Configure blending factors */	
LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;
LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;

/* the length of one line of pixels in bytes + 3 then :
Line Lenth = Active high width x number of bytes per pixel + 3
Active high width		 = LCD_PIXEL_WIDTH
number of bytes per pixel = 2 (pixel_format : RGB565)
*/
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_PIXEL_WIDTH * 2) + 3);
/* the pitch is the increment from the start of one line of pixels to the
start of the next line in bytes, then :
Pitch = Active high width x number of bytes per pixel */
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_PIXEL_WIDTH * 2);

/* Configure the number of lines */
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PIXEL_HEIGHT;

/* Start Address configuration : the LCD Frame buffer is defined on SDRAM */
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER;

/* Initialize LTDC layer 1 */
LTDC_LayerInit(LTDC_Layer1, &LTDC_Layer_InitStruct);

/* Configure Layer2 */
/* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */	
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER + BUFFER_OFFSET;

/* Configure blending factors */	
LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;
LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;

/* Initialize LTDC layer 2 */
LTDC_LayerInit(LTDC_Layer2, &LTDC_Layer_InitStruct);

/* LTDC configuration reload */
LTDC_ReloadConfig(LTDC_IMReload);

/* Enable foreground & background Layers */
LTDC_LayerCmd(LTDC_Layer1, ENABLE);
LTDC_LayerCmd(LTDC_Layer2, ENABLE);

/* LTDC configuration reload */
LTDC_ReloadConfig(LTDC_IMReload);

/* Set default font */
// LCD_SetFont(&LCD_DEFAULT_FONT);

/* dithering activation */
LTDC_DitherCmd(ENABLE);

LTDC->GCR |= (1<<0);

Фото прилагаю.

Немного не понял данное значение:

/* Default Color configuration (configure A,R,G,B component values) */		
LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 255;	
LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;	
LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;	
LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;

сделал так чтоб фон 2 слоев был синий, насколько я понял. Поправьте?

Синий цвет появился, но странно, почему он сверху и не на весь экран. Недоумеваю....

а ну это при том что

LTDC_Layer_InitStruct.LTDC_HorizontalStart = 2;//HBP+HSYNC;
LTDC_Layer_InitStruct.LTDC_VerticalStart = 25;//VSYNC + VBP;

поправлял "ручным" способом. Не по даташиту, а если делать как по даташиту то всё потемнеет и всё. Не синего цвета ни чего. только темный экран.

post-144830-0-94167300-1395183306_thumb.jpg

Изменено пользователем den2life

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2

Вообщем всё вроде б получилось. Всё сдал как нужно, по даташиту.

Теперь помогите вывести какое либо изображение, например для начало квадраты по дисплею с разными цветами. Как это сделать? Что тут никто не разбирался? Я думал тут форум, в котором могут помочь желающим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andryxa    225

Начните с простого, нарисуйте для начала один пиксель по заданным координатам. А дальше или писать свою графическую фиблиотеку или скачать чюжую и адаптировать под себя. Как записать пиксел незнаю, я стаким дисплеем работал через SSD1963

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2

Использовать dma2d необходимо, вроде б нужно. только вот как точку эту на экране поставить?;*(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andryxa    225
как точку эту на экране поставить?

Если я правильно понял, нужно инициализировать SDRAM и в нее записать три байта (RGB)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Диман    107

Всё сдал как нужно, по даташиту.

А какому именно датащиту, в том что прикреплён не вижу ни временных диаграмм, ни таймингов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2

Если я правильно понял, нужно инициализировать SDRAM и в нее записать три байта (RGB)

Внешнюю оперативку? Мне кажется 256кбайт оперативы должен справится с статическим цветом точки на экране.

А какому именно датащиту, в том что прикреплён не вижу ни временных диаграмм, ни таймингов

если внимательно присмотрется в даташите есть ссылка на другой док пдф. Если точнее на рекомендованный компанией контроллер дисплея. Там в конце того дока имеется таблица со всеми характеристиками дисплея с которым контроллер сможет работать для разрешения экрана 480x272.

Изменено пользователем den2life

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
den2life    2

Посмею всех огорчить. Без оперативки на всю мощь дисплейчика не поюзаешь. Спасибо всем за не оказанную помощь. Тема закрыта

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Диман    107

Без оперативки

А в чём проблема внешнюю подключить, если посмотреть в реальных устройствах, то там так и сделано (в gps, который я разобрал, так и сделано, там даже 2 оперативки внешних стоит)

Изменено пользователем Диман

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
castiel    1

В каком режиме может работать tft контроллер в stm32f429? тоже хочу подключить экран, непонятно, он работает в de-mode или sync-mode?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Arseniy Popov
      Добрый день! Необходимо подобрать микроконтроллер, который будет получать команды по serial от esp8266 и димировать RGBW светодиод по следующему алгоритму: 
      https://docs.google.com/document/d/1FkPLiIgxleuDQn8pjihICQGRrMPXbwFzqCt6StQZjhU/edit?usp=sharing
      а также написать для него прошивку на си.
      Отвечать можете в телеграм arsenicum32 или сюда.
      Пишите цену / сроки, находитесь ли в МСК и/или в области.
    • Автор: Zhuk72
      Доброго дня всем.
      Такое вот дело, нужно сделать некую железку, функционал сейчас не важен. Имеется на руках плата Nucleo-F401RE и дисплей.
      Поскольку сделан он под Ардуину, а платы Nucleo имеют (в том числе) совместимую с ним разводку разъемов под периферию, дисплей втыкается без переделки, как есть. Все это и красиво и удобно, но вот шина данных, а в данной реализации дисплея используется 8-битная шина, не попадают пин-в-пин с портами МК. Переделка не планируется, надо исходить из то, что есть. Следовательно имеем такую картину:
      LCD_D7 - PA8 LCD_D6 - PB10 LCD_D5 - PB4 LCD_D4 - PB5 LCD_D3 - PB3 LCD_D2 - PA10 LCD_D1 - PC7 LCD_D0 - PA9 Чтобы отправить байт в дисплей, нужно его раскидать побитно. Моя реализация работает, вот так она выглядит:
      void lcd35_setData(unsigned char lcd35_data) { // Share data between data bus pins. unsigned int d7, d6, d5, d4, d3, d2, d1, d0; // Clear data bus pins. GPIOA->BSRR = (GPIO_BSRR_BR10 | GPIO_BSRR_BR9 | GPIO_BSRR_BR8); GPIOB->BSRR = (GPIO_BSRR_BR10 | GPIO_BSRR_BR5 | GPIO_BSRR_BR4 | GPIO_BSRR_BR3); GPIOC->BSRR = GPIO_BSRR_BR7; // Split bits d7 = (unsigned int)((lcd35_data & 0x80) << 1); d6 = (unsigned int)((lcd35_data & 0x40) << 4); d5 = (unsigned int)((lcd35_data & 0x20) >> 1); d4 = (unsigned int)((lcd35_data & 0x10) << 1); d3 = (unsigned int)(lcd35_data & 0x08); d2 = (unsigned int)((lcd35_data & 0x04) << 8); d1 = (unsigned int)((lcd35_data & 0x02) << 6); d0 = (unsigned int)((lcd35_data & 0x01) << 9); // Set data GPIOA->ODR |= (d7 | d2 | d0); GPIOB->ODR |= (d6 | d5 | d4 | d3); GPIOC->ODR |= d1; } Может можно сделать оптимальнее? Это прилично замедляет вывод изображения, особенно если выводить картинку целиком (480*320 по 2 байта на пиксель). Я всегда подстраивал железо под удобство написания кода, а тут вот вынужден извращаться.
      Кстати, гугление по данному экрану (Renesas R61581) выводило только на ардуинистов, неужели никто не подключал его к другим железкам?! Он, говорят, почти совместим с ILI9488. Я бегло прошелся по протоколу оного, да, есть такое, но в команды не углублялся. Вроде все отличие кроется в инициализации.
      P.S. Сейчас вот подумал, может сперва стоило привести lcd35_data к соответствующему типу, а потом уже применять маску и сдвиг.
    • Автор: Holm
      Приветствую!
      Собираю пульсоксиметр на MAX30100. Нашел на просторах интернета готовый код,но под STM32,но на винду хп драйвера не идут.
      Может кто-нибудь помочь переделать код под Ардуино Уно. Отблагодарю))
       



    • Автор: LoKeR
      Доброго времени суток, нашел хорошую статью Usart прием и отправка строки. Настроил на порт Usart3 перестал работать, попробовал на Usart2 перекинуть тоже не работает, как правильно переделать подскажите...
      stm32-uart-spl.rar
    • Автор: Digitalmax
      Доброго времени суток. Хотел бы попросить вас помочь мне изучить микроконтроллеры STM32. Я знаком с AVR, ну STM32  кажется мне сложнее, хотелось бы получить от ВАС какую-то литературу, полезные ссылки. Начать своё изучения я хочу с мигания светодиода).  Сперва я думал сам сделать себе отладочную плату, ну потом мной было принято решения взять себе не очень дорогой вариант Discovery, так как он имеет встроенный программатор, который можно использовать к разным МК этой компании.