WH1602B запущен на STM32

Переделал без использования библиотеки stm32f10x_gpio.h. Вместо 4 битной шины использую 8 битную, так проще. Ни как не могу запонить #if #endif, там что добавляйте если это надо.
Теперь нормально запускается.


Читать дальше

ИНТЕРФЕЙСЫ ПЕРИФЕРИЙНЫХ УСТРОЙСТВ

Нашёл в гугле.
books.ifmo.ru/book/pdf/728.pdf
Ключев А.О., Ковязина Д.Р., Петров Е.В., Платунов А.Е. Интерфейсы
периферийных устройств. – СПб.: СПбГУ ИТМО, 2010. – 290 с.
Учебное пособие посвящено вопросам организации интерфейсов
периферийных устройств. В пособии рассматриваются: организация системы
ввода-вывода, способы обмена информацией между устройствами
вычислительной системы, аппаратные интерфейсы вычислительных систем. В
приложениях к учебному пособию помещены справочные данные и задания к
выполнению лабораторных работ с использованием учебного лабораторного
стенда SDK-1.1.
Для подготовки бакалавров и магистров по направлению 23.01.00
«Информатика и вычислительная техника»; по программам подготовки
магистров 23.01.00.33 «Проектирование встроенных вычислительных систем» и
23.01.00.34 «Системотехника интегральных вычислителей. Системы на
кристалле».
Рекомендовано к печати ученым советом факультета КТиУ, протокол №15
от 16.11.2010 г.

там по моеиу и pci есть, не смотрел ещё.
Что-то мне гугл начинается нравится.

ftp://ftp.ce.cctpu.edu.ru/ — куча инфы на русском.

Перевод документации.

Сегодня зарегестрровался на вы+ в гугле, потом дотопал по ссылкам до документов гугла, в онлайн редакторе документов в «инструменты» есть «перевести документ», так вот, скопипастенный даташит можно «переводить» чють ли не одним махом.
Если разделить pdf на маленькие куски то и файлами можно попробвать через загрузку в гугл переводчике.

как завести LCD 1602B в CooCox? pi_pio.h?

разбирался с di_tlcd.h

Вот пример из CooCox.
Мне не понятно как при заполнение структуры &LCD инициализируются выводы для подключения LCD? &pi_pio — в примере ни где не заполняется.

#include "pi_pio.h"
#include "di_tlcd.h"

/* Define a LCD1602 Device */
const TLCD_Dev LCD0 = {
  &pi_pio,          // Using PIO Interface
  COX_PIN(2, 2),    // RS  : P2.2
  COX_PIN(2, 3),    // RW  : P2.3
  COX_PIN(2, 4),    // E   : P2.4
  COX_PIN(2, 5),    // DB7 : P2.5
  COX_PIN(2, 6),    // DB6 : P2.6
  COX_PIN(2, 7),    // DB5 : P2.7
  COX_PIN(2, 8),    // DB4 : P2.8
  0,0,0,0,          // DB0-DB3 : Not used
  0,                // 4-Bit Mode
};

void lcd_test(void)
{
  Text_Lcd_Init   (&LCD0);
  Text_Lcd_Clear  (&LCD0);
  Text_Lcd_Puts   (&LCD0, "Hello Word      ");
  Text_Lcd_Locate (&LCD0, 1, 0);
  Text_Lcd_Puts   (&LCD0, "         -Coocox");
}


Вот мигалка для светодиода на плате STM32-Discovery и тут в pi_pio явно указывается что куда подавать на выход, с этим разобрался.
#include"stm32_pio.h"

void Delay(volatile uint32_t nCount) {
	for (; nCount != 0; nCount--);
}


int main(void) {

	COX_PIO_Dev LED =  COX_PIN(2,9);
	// COX_PIO (номер порта, номер контакте(пина))
	//Номер порта = A = 0, B=1, C=2... и.т.д
	//Номер пина - один из 16 котактов порта
	pi_pio.Init(LED); //Инициализируем порта A, контато 9
	pi_pio.Dir(LED,1);// Устнаваливаем порта А, контак 9 на выход

	while (1) {

          pi_pio.Out(LED,1); //порт А, контак 9 = 1
          Delay(0x4ffff);
          pi_pio.Out(LED,0); //порт А, контак 9 = 0
          Delay(0x0FFFF);

	}

}

Бегущий огонь на STM32 Discovery

Раз уж модно стало делать мигалки, тогда продолжим на CooCox.
Описание функции в прикреплённом файле. Использовался материал we.easyelectronics.ru/STM32/rukovodstvo-k-bystromu-startu-po-rabote-s-periferiey-stm32f10x.html
Второй день владения stm32-discovery прошёл успешно, светодиоды замигали:-) теперь бы ещё дальше пойти… АЦП, LCD, энкодер блин.

#include <stm32f10x.h>
#include <stm32f10x_conf.h>

#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>

void Delay(volatile uint32_t nCount) {
	for (; nCount != 0; nCount--);
}

int main(void) {
	/* SystemInit() вызывается из startup_stm32f10x_md_vl.c */

	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOC , &GPIO_InitStructure);

	GPIO_InitTypeDef GPIO_Init_In_Structure; //Настраиваем PortB0 на вход
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE );
	GPIO_Init_In_Structure.GPIO_Pin = GPIO_Pin_0;
	GPIO_Init_In_Structure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init_In_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOB,&GPIO_Init_In_Structure);

	int rab =0x8000;
	int i;
	while (1) {



		i = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
		if (i==0) { //если кнока нажата, то огонёк движется.
			rab=rab>>1; //сдвиг переменной rab
			if (rab ==0) rab= 0x8; //если pin0 = 0, то зажечь светодиод на pin3
		}

		GPIOC->ODR = rab;
		Delay(0x4FFff);
	}

}