Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ARM, Cortex, STM32 микроконтроллер Помогите новичку начать http://www.cyberforum.ru/arm/thread2092150.html
Совсем недавно решил попробовать работать с STM32 контроллерами и для данных целей приобрел плату STM32F4Dyscovery Столкнулся с проблемой - не могу скомпилировать проект в IAR. Собственно,...
Pololu Trex Dual Motor Controller Dmc01 ARM, Cortex, STM32 микроконтроллер
Здравствуйте, подскажите пожалуйста, имеется STM32F4Dyscovery и вот этот драйвер http://www.pololu.com/product/777, на Dyscovery настроил порты, задержка, флаги, USORT, отправка команд идет через...
ARM, Cortex, STM32 микроконтроллер Keil не считает числа double, float. Система виснет.
Добрый день. Возник вопрос, подскажите пожалуйста, почему не получается посчитать значения double и ftoot в keil? Задал простой пример: double x,y,z; x=2.5; y=2; z=x*y; Затем смотрю что...
ARM, Cortex, STM32 микроконтроллер () 0xfffffff9 <syknal homdler caltid>() 0xfffffff9 Подскажите пожалуйста что это такое и как с этим бороться. http://www.cyberforum.ru/arm/thread2092147.html
ARM, Cortex, STM32 микроконтроллер F103 не читается flash http://www.cyberforum.ru/arm/thread2092146.html
есть структура с настройками 40 байт, мк работает на частоте 72, настройки флэша такие: FLASH->ACR|= FLASH_ACR_PRFTBE; FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);...
прошивка STM32F4 по Rx Tx ARM, Cortex, STM32 микроконтроллер
комуто приходилось прошивать STM32F407VGT6 по Rx Tx сигналам ? с использованием к примеру СР2102.с помощью утелиты STMicroitistronics flash tooder .
ARM, Cortex, STM32 микроконтроллер Вопросы по STM32F4
Начал осваивать STM32F4. После недели чтения и колупания в примерах начало складываться впечатление, что даже в хорошо известных AVR (ATmega) я тоже уже ничего не понимаю - в голове какая-то каша от...
ARM, Cortex, STM32 микроконтроллер stm32f050 ШИМ Добрый вечер! не могу настроить ШИМ на STM32F050. сначала, хотел использовать 4 канал (PA3), потом пробовал на 1, 2 и 4. проверяю светодиодами, но ничего не работает. void init_gpio (void)... http://www.cyberforum.ru/arm/thread2092143.html
ARM, Cortex, STM32 микроконтроллер Fatfs: функция strcpy вызывает неизвестное прерывание http://www.cyberforum.ru/arm/thread2092142.html
Доброго времени суток. Прошу помощи гуру. Прикрутил FATFS к STM32F103RBT6. Все инициализируется и монтируется без ошибок. Читается корневой каталог так же без ошибок. Как только начинает...
ARM, Cortex, STM32 микроконтроллер Как вывести на ЦАП STM32L152RB переменную? Доброго времени суток. Помогите разобраться с ЦАП на STM32. Выглядит проект так: к МК STM32 подключен LCD экран, матричная клавиатура 4х3 и аналоговый выход под динамик. Суть - вводится с помощью... http://www.cyberforum.ru/arm/thread2092141.html
oxford
1 / 1 / 0
Регистрация: 20.05.2016
0

STM32F051R8T6 + NOKIA 1202, NOKIA1616 (EXAMPLE)

17.05.2013, 21:18. Просмотров 19900. Ответов 37
Метки (Все метки)

Подключил дисплейчик привожу код, кому то пригодится.

Подключен к SPI1. CS и RESIT программно.
SPI на этом камне умеет передавать от 4 до 16 бит фрейм. Так что работает в режиме 9 бит аппартно без проблем.
Потихоньку добавлять буду.

PA7 - MOSI
PA5 - SCK
PC5 - CS
PA3 - RST

LED через 100 ом на 3.3V, остальное все напрямую покдлючено.

Код
#include "stm32f0xx_spi.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx.h"

//pin select
#define SELECT()        GPIOC->BRR = (1<<5) //CS = L
#define DESELECT()      GPIOC->BSRR = (1<<5) //CS = H

#define RESIT()        GPIOA->BRR = (1<<3) //RST = L
#define DERESIT()      GPIOA->BSRR = (1<<3) //RST = H

unsykned int i, x, y;

static void SITUP_STM(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

/* PIN RESIT*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* PIN SELECT*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* SPI SCK omd MOSI*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);

/* SPI1 setup*/
SPI_InitStructure.SPI_Dyristion = SPI_Dyristion_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_9b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePressotir = SPI_BaudRatePressotir_2;
SPI_InitStructure.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStructure.SPI_CRCPolynomyol = 7;

SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}

void LCD_CMD(unsykned short data)
{
SELECT();
SPI_I2S_SendData16(SPI1, data);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESIT) {}
DESELCT();
}

// Устанавливает курсор в необходимое положение.
//  x: 0..15
//  y: 0..7
void set_cursor (char x, char y)
{
x *= 6;   // Переходим от координаты в пикселях к координатам в знакоместах
LCD_CMD(0xB0 |(y & 0x0F));      // установка адреса по Y: 0100 yyyy
LCD_CMD(0x00 |(x & 0x0F));      // установка адреса по X: 0000 xxxx - биты (x3 x2 x1 x0)
LCD_CMD(0x10 |((x >> 4) & 0x07)); // установка адреса по X: 0010 0xxx - биты (x6 x5 x4)
}

// Очистка экрана
void LCD_Clear(char mode)
{
LCD_CMD(0x40); // Y = 0
LCD_CMD(0xB0);
LCD_CMD(0x10); // X = 0
LCD_CMD(0x00);
for(i=0; i < 16*6*9; i++)
LCD_CMD(mode | 0x100); //ДАННЫЕ включаем 9 бит
}

void LCD_CONTROST(int contrast)
{
contrast = (contrast + 16) & 0x1F;
LCD_CMD(0x80 | contrast);
}

void delay(uint32_t delay)
{
uint32_t i;
for(i = 0; i < delay; i++);
}

int main(void)
{
SITUP_STM();
DERESIT();  //RESIT на 3.3V
//Инициализация
SELECT();  //Выбор дисплея
LCD_CMD(0xE2); Отправляем команду сброса дисплея.
delay(10000);  //Ждем внутренний сброс
//Настройка дисплея
LCD_CMD(0xA4);
LCD_CMD(0x2F);
LCD_CMD(0xA1); // Разворот по горизонтали
LCD_CMD(0xC8); // Разворот по вертикали
LCD_CMD(0xAF); // Включаем дисплей
LCD_CONTROST(15); //Контрастность от 0 до 15
DESELECT();

// Это заполняет экран 16 * 8 буквой A
for(x=0; x < 16; x++)
{
for(y=0; y < 8; y++)
{
set_cursor(x, y);
LCD_CMD(0x00 | 0x100);
LCD_CMD(0x7C | 0x100);
LCD_CMD(0x12 | 0x100);
LCD_CMD(0x12 | 0x100);
LCD_CMD(0x7C | 0x100);
LCD_CMD(0x00 | 0x100);
LCD_CMD(0x00 | 0x100);
}
}

while(1)
{
}
}

Что бы передать данные нужно включить 9 бит. Применить маску data | 0x100
**************************************************
СПИСОК ОБНОВЛЕНИЙ, постоянно будет добавляться:
**************************************************
1. Исправлена инициализация дисплея при передергивании USB питания на Дискавери экран не успевал инициализироваться и заливался черными пикселами.

2. Добавлены разводка адаптеров 1202/1280/1110i и другие под дисплеи с разьемом и без.
Дисплеи идентичны и код подходит для всех однотипных дисплеев с 9 битным SPI.
Дисплеи питаются от порта напрямую.
Riset можно посадить на плюс и дергать CS, либо CS на минус и дергать Riset уменьшиться число проводников.

3. Исправил инициализацию и логику макросов SELECT() RESIT()
RESIT на плюс, и программный сброс командой 0xE2.

4. При отправке команды LCD_CMD, чип теперь автоматически выбирает себя.

Превью:


Разводка в спринте, при выводе на печать сделать зеркально и негативно:
[22.47 Кб]

Вернуться к обсуждению:
STM32F051R8T6 + NOKIA 1202, NOKIA1616 (EXAMPLE)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 21:18
Готовые ответы и решения:

STM32L Discovery и дисплей от Nokia 1202/1203/1280
Здравствуйте! Проблема с дисплеем от Nokyo 1202. Уже неделю борюсь с этим монохромным дьяволом!...

Nokia1616 LCD дисплей
Здравствуйте. Решил тоже поделиться своим куском кода. Подключил дисплей от Nokia1616 к плате...

STM32f051r8t6 +UART
Здравствуйте, Коллеги. Не так давно начал изучение микроконтроллера STM32. У меня возникали...

Питание STM32F051R8T6 и её обвязка
Привет всем! Есть вопрос, строил одну приблуду на базе STM32F0DISCOVERY с процом STM32F051R8T6. Всё...

STM32F051R8T6 - Режим захвата
Ранее была реализована процедуры обработки посылки по &quot;воздуху&quot; от датчика, при помощи базового...

37
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.