lol481
Участник-
Постов
40 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о lol481
-
Звание
Участник
-
Ура, светодиодик зажегся!! Да, надо было просто раскоментировать строку с нужным контроллером в stm32f10x.h файле ИЛИ можно просто прописать "STM32F10X_MD_VL" в строке препроцессора С/С++ кейла. Думаю что второй вариант удобнее. Да уж, интересно, но вот зачем столько действий, я же выбирал контроллер для проекта, кейл мог бы запомнить и сам всё сделать. В любом случае спасибо Вам всем, буду продолжать обучение.
-
Такого не выбирал, и, честно сказать, даже не знал что это нужно делать. Подскажите пожалуйста как точно это сделать. Очень важно на первых порах получить хоть какой нибудь результат.
-
Так а почему же не загорается светодиод, где может быть ошибка в таком простом коде?
-
Попробовал, действительно компилится, всё хорошо. Но вот только светодиодики на плате не горят, может что то не так с кодом ? И почему компилятор выдает предупреждение если я переменную объявляю где нибудь в середине мэйна, и не ругается если сразу первой строчкой в мэйне, это нормально?
-
Хм, с одной строкой не пробовал, позже обязательно отпишусь, сейчас на работе.
-
Я пробовал и с этой строкой и без неё, всё равно не работает(
-
Здравствуйте, после долгого сидения на AVR, решил перейти на STM32F10x. Купил плату STM32F10xVLDISCOVERY, в качестве среды разработки решил выбрать Keil(uVision). При попытке откомпилировать код - постоянно выдает следующую ошибку: .\Out\test1.axf: Error: L6218E: Undefined symbol assert_failed (referred from stm32f10x_rcc.o). Я понимаю что причина в неопределенной функции "assert_failed", но ничего поделать с этим не могу. Помогите разобраться. Код ниже: #include <stm32f10x.h> #include <stm32f10x_conf.h> #include <stm32f10x_rcc.h> #include <stm32f10x_gpio.h> void InitAll(void) { GPIO_InitTypeDef GPIO_InitStructure; //объявляем инициализационную структуру GPIO_DeInit(GPIOC); //функция сбрасывающая текущие настройки порта в значения по умолчанию RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //включаем тактирование порта С GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; //настройки будут относится к 8 и 9 битам GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //настраиваем порт С на выход push-pull GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //максимальная частота переключения GPIO_Init(GPIOC, &GPIO_InitStructure); //функция инициализации порта с заданной структурой } int main(void) { InitAll(); while(1) { GPIOC->ODR = 0xFFFF; //выводим в порт С единицы } } test1.rar
-
Вообщем всё наконец таки заработало как надо, спасибо огромное товарищу "S17". Понимаю что С++ надо учить и учить что бы так свободно с ним обращаться как Вы. Спасибо всем, на днях напишу ещё свои функции для других операций с ЖКИ (в планах функция установки курсора в произвольное место DDRAM с координатами x,y и т.д), думаю сам справлюсь. Благодарю за помощь. Фото ЖКИ LCD_16x2_test.rar
-
Да, вы правы на счет цифр. Сейчас делаю таким макаром: int i=1; lcd_SendData(i+48); - подскажите всегда ли это будет работать с цифрами и какие недостатки таит в себе такой подход?
-
Вообщем переделал я немного функции и дисплей почти корректно заработал, но вот проблема походу кроется ещё в моем компиляторе: латиницу он нормально кодирует в соответствии ACSII, а вот вместо цифр и кириллицы на дисплее отображается всякие левые символы, к примеру я программирую что бы было "абвгдеёжз", а на дисплее "аЦЩдфцищ'". с цифрами всё ещё хуже - там вообще какие то вертикальные полосочки и крестики вместо них( например int i=1; lcd_SendData(i); - на дисплее две вертикальные палочки с черточкой посередине). Судя по таблице знакогенератора () - мой компилятор не корректно кодирует ACSII в двоичный код, так как если я ввожу в программе тупо код нужного мне символа - то всё прекрасно выводится на ЖКИ. Программирую в AtmelStudio 6.0.1863. Подскажите что бы такое изменить и где в студии или же как в программе переназначить кодировки символов (цифр и кириллицы). Вот работающий код: #define E 4 //E = PORTC.4 - стробирующий сигнал #define RS 5 //RS = PORTC.5 - определение типа данных: команда(RS=0) или данные(RS=1) #define RW 6 //RW = PORTC.6 - выбор режима: запись(RW=0) или чтение(RW=1) void lcd_SendCmd(unsigned char lcd) //функция передачи команд в дисплей { _delay_us(15); PORTC = (lcd>>4 & ~(1<<RS) & ~(1<<RW)) | (1<<E); //задаём тип данных, который хотим переслать, выводим в порт старшую тетраду команды, сигналы RS и E _delay_us(15); PORTC &= ~(1<<E); //cигнал записи команды _delay_us(15); PORTC = (lcd & ~(1<<RS) & ~(1<<RW)) | (1<<E); //задаём тип данных, который хотим переслать, выводим в порт младшую тетраду команды, сигналы RS и E _delay_us(10); PORTC &= ~(1<<E); //cигнал записи команды _delay_us(15); } void lcd_SendData(unsigned char lcd) //функция передачи данных в дисплей { _delay_us(15); PORTC = ((lcd>>4) | (1<<RS) | (1<<E)) & ~(1<<RW); //задаём тип данных, который хотим переслать, выводим в порт старшую тетраду данных, сигналы RS и E _delay_us(15); PORTC &= ~(1<<E); //cигнал записи данных _delay_us(15); PORTC = (lcd | (1<<RS) | (1<<E)) & ~(1<<RW); //задаём тип данных, который хотим переслать, выводим в порт младшую тетраду данных, сигналы RS и E _delay_us(15); PORTC &= ~(1<<E); //cигнал записи данных _delay_us(15); } void lcd_init(void) //функция инициализации дисплея { lcd_SendCmd(0b00101000); //4-бит интерфейс, 2 строки, 5х8 точек _delay_ms(3); lcd_SendCmd(0b00000110); //адресс будет инкреминтироваться, экран не движется _delay_ms(3); lcd_SendCmd(0b00000001); //очистка дисплея, указатель встал на 0x00 DDRAM _delay_ms(5); lcd_SendCmd(0b00001100); //включаем ЖКИ, без отображения курсора _delay_ms(3); }
-
Я ошибся когда писал сообщение, на самом деле там: PORTC =(lcd & ~(1<<RS)) | (1<<E);
-
Там всё очень сложно и запутано для меня. Ситуация такая что знакомый написал мне прошивку для проверки работоспособности LCD (выводит русский текст) - и всё нормально вывелось, т.е. косяк точно в моей программе. Один например уже нашел: Вместо - temp =(lcd & ~(1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать Нужно было - temp =(lcd | ~(1<<RS)) | (1<<E); Теперь я могу вывести на экран всякую белеберду, но не то что мне нужно и не там где мне нужно.
-
Инициализировал как в даташите - не помогло: курсор мигает черным прямоугольником в конце первой строки. На счет готовых библиотек - это ещё большие дебри, пробовал парочку - ничего не выводится, скорее всего я просто неумело их использую. Там куча всяких параметров, а мне много не надо. Я хочу сам разобраться на примере простых операций.
-
Сейчас поправлю и отпишусь. Не помогло.