Вт фев 18, 2014 16:04:25
Вт фев 18, 2014 16:57:14
Вт фев 18, 2014 17:23:40
titoFF писал(а):Открыл сишный файл CVAVR-ом. Там и правда кракозябры. Но ведь пишу- то я по русски, кракозябринского знать не знаю. И отображается в студии нормально. Что за трабл со студией и как его решить?
Вт фев 18, 2014 17:30:06
Вт фев 18, 2014 18:08:59
Вт фев 18, 2014 21:24:29
Вт мар 11, 2014 22:38:43
Чт мар 27, 2014 11:36:14
Пт май 02, 2014 20:58:12
Пн май 05, 2014 00:29:37
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;
#define F_CPU 24000000//Тактовая частоа процессора.
#define PIN_CS GPIO_Pin_0
#define PIN_DC GPIO_Pin_1
#define PIN_RD GPIO_Pin_2
#define PIN_RST GPIO_Pin_5
#define PIN_WR GPIO_Pin_6
#define NOP 0x00
#define SOFT_RESET 0x01
#define EXIT_SLEEP_MODE 0x11
#define SET_DISPLAY_ON 0x29
#define SET_CASET 0x2A
#define SET_RASET 0x2B
#define SET_RAMWR 0x2C
#define SET_ADDRESS_MODE 0x36
#define SET_COL_MODE 0x3A
// Определениецветов
#define black 0,0,0 // черный
#define red 255,0,0 // красный
#define green 0,255,0 // зеленый
#define blue 0,0,255 // синий
#define yellow 255,255,0 // жёлтый
#define cyan 0,255,255 // голубой
#define lilac 255,0,255 // сиреневый
#define white 255,255,255 // белый
void delay_ms(uint32_t ms)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000)*ms; // возвращает тактовоую частоту HCLK в Гц, делим на 10000 и всё множим на ms
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void delay_us(uint32_t us)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000000)*us;
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void lcd_reset(void)
{
GPIO_WriteBit(GPIOB, PIN_RST,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RST,Bit_SET);
}
void lcd_write_com(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_write_dat(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_clear(char color_r, char color_g, char color_b)// Заливка дисплея
{
unsigned long int i;
lcd_write_com(SET_CASET); // КомандаориетациипоХкоординате
lcd_write_dat(0);
lcd_write_dat(0); // ДанныеначалаХкоординат (0)
lcd_write_dat(0);
lcd_write_dat(176); // Данные конца Х координат (176)
lcd_write_com(SET_RASET); //Команда ориентации по Y координате
lcd_write_dat(0);
lcd_write_dat(0); // Данные начала Y координат (0)
lcd_write_dat(0);
lcd_write_dat(208); // Данные конца Y координат (208)
lcd_write_com(SET_RAMWR); //Команда записи в память дисплея
for (i=0;i<(208*176);i++)
{lcd_write_dat(color_r);
lcd_write_dat(color_g);
lcd_write_dat(color_b);
} // RGB Данные для записи в память дисплея
}
int main(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig( RCC_SYSCLK_Div1);
RCC_PCLK2Config( RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PLLConfig(0x00010000, 0x00040000);
RCC_PLLCmd( ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
lcd_reset();
delay_ms(20);
lcd_write_com(SOFT_RESET);
delay_ms(2);
lcd_write_com(EXIT_SLEEP_MODE);
delay_ms(2);
lcd_write_com(SET_DISPLAY_ON);
delay_ms(2);
lcd_write_com(SET_ADDRESS_MODE);
delay_ms(2);
lcd_write_dat(0xC0);// Книжная ориентация дисплея
delay_ms(2);
lcd_write_com(SET_COL_MODE);
delay_ms(2);
lcd_write_dat(0b00000111); // 24 битныйрежим
delay_ms(2);
lcd_clear(blue);
while(1)
{
}
}
Ср май 07, 2014 22:52:36
Пт июн 13, 2014 10:34:00
Вт июн 17, 2014 01:43:51
Чт июн 19, 2014 18:51:29
Пт авг 08, 2014 16:57:54
Ср авг 13, 2014 10:16:23
Ср авг 13, 2014 10:19:27
Сб окт 04, 2014 23:21:31
Пн окт 06, 2014 08:57:35
Чт окт 16, 2014 10:04:05
uk8amk писал(а):Есть такой вопрос. Те дисплеи, с которыми имел дело, требуют "идиотские" напряжения питания 1.8+2.8 вольт. Имеются ли ширпотребные и недорогие цветные дисплеи от мобилок с напряжением 3.3 вольт, чтоб напрямую привязать к STM32 без всяких резистивных делителей и преобразователей уровня?