Перейти к содержанию
    

lol481

Участник
  • Постов

    40
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о lol481

  • Звание
    Участник
    Участник
  1. Ура, светодиодик зажегся!! Да, надо было просто раскоментировать строку с нужным контроллером в stm32f10x.h файле ИЛИ можно просто прописать "STM32F10X_MD_VL" в строке препроцессора С/С++ кейла. Думаю что второй вариант удобнее. Да уж, интересно, но вот зачем столько действий, я же выбирал контроллер для проекта, кейл мог бы запомнить и сам всё сделать. В любом случае спасибо Вам всем, буду продолжать обучение.
  2. Такого не выбирал, и, честно сказать, даже не знал что это нужно делать. Подскажите пожалуйста как точно это сделать. Очень важно на первых порах получить хоть какой нибудь результат.
  3. Так а почему же не загорается светодиод, где может быть ошибка в таком простом коде?
  4. Попробовал, действительно компилится, всё хорошо. Но вот только светодиодики на плате не горят, может что то не так с кодом ? И почему компилятор выдает предупреждение если я переменную объявляю где нибудь в середине мэйна, и не ругается если сразу первой строчкой в мэйне, это нормально?
  5. Хм, с одной строкой не пробовал, позже обязательно отпишусь, сейчас на работе.
  6. Я пробовал и с этой строкой и без неё, всё равно не работает(
  7. Здравствуйте, после долгого сидения на 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
  8. Вообщем всё наконец таки заработало как надо, спасибо огромное товарищу "S17". Понимаю что С++ надо учить и учить что бы так свободно с ним обращаться как Вы. Спасибо всем, на днях напишу ещё свои функции для других операций с ЖКИ (в планах функция установки курсора в произвольное место DDRAM с координатами x,y и т.д), думаю сам справлюсь. Благодарю за помощь. Фото ЖКИ LCD_16x2_test.rar
  9. Да, вы правы на счет цифр. Сейчас делаю таким макаром: int i=1; lcd_SendData(i+48); - подскажите всегда ли это будет работать с цифрами и какие недостатки таит в себе такой подход?
  10. Вообщем переделал я немного функции и дисплей почти корректно заработал, но вот проблема походу кроется ещё в моем компиляторе: латиницу он нормально кодирует в соответствии 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); }
  11. Я ошибся когда писал сообщение, на самом деле там: PORTC =(lcd & ~(1<<RS)) | (1<<E);
  12. Там всё очень сложно и запутано для меня. Ситуация такая что знакомый написал мне прошивку для проверки работоспособности LCD (выводит русский текст) - и всё нормально вывелось, т.е. косяк точно в моей программе. Один например уже нашел: Вместо - temp =(lcd & ~(1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать Нужно было - temp =(lcd | ~(1<<RS)) | (1<<E); Теперь я могу вывести на экран всякую белеберду, но не то что мне нужно и не там где мне нужно.
  13. Инициализировал как в даташите - не помогло: курсор мигает черным прямоугольником в конце первой строки. На счет готовых библиотек - это ещё большие дебри, пробовал парочку - ничего не выводится, скорее всего я просто неумело их использую. Там куча всяких параметров, а мне много не надо. Я хочу сам разобраться на примере простых операций.
  14. Сейчас поправлю и отпишусь. Не помогло.
×
×
  • Создать...