Страница 18 из 446

Re: STM32 новичку в ARM что к чему

Добавлено: Ср окт 10, 2012 16:15:23
Galizin
To ElCat
Посмотрите страничку
http://ziblog.ru/2012/09/09/linii-vvoda ... ast-3.html
там есть набор макросов для линий ввода-вывода. Как работать с этими макросами возможно написано в одной из тем ранее. Макросы гораздо сложнее Ваших. Но может будет полезно.

А где ж тогда переменные хранить? 24Сххх цеплять? Я вроде как видел eeprom в некоторых ARM-овских процах.

У ST есть AN по эмуляции EEPROM в FLASH. Вот моя заметка по этому поводу
http://we.easyelectronics.ru/STM32/prog ... flash.html
Вот реализация http://www.radiokot.ru/forum/viewtopic. ... 06#p889006 - хранение как во флеш так и в бекап сегменте

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 01:08:25
ELcat
ChipKiller писал(а):... самый "прямой"
ChipKiller писал(а): вообще то для "ногодрыга" у STM32 есть bit banding.....
..плюс в том что работая через bit banding не нужно думать о маске для остальных разрядов порта
А можно подробнее об этой фиче? Что это и как им пользоваться?

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 07:28:58
ChipKiller
А можно подробнее об этой фиче? Что это и как им пользоваться?
Запросто - смотри здесь а еще лучше здесь. Лучше всего внимательно посмотреть 2-ую доку, не даром там аж 600 страниц :) Ну и не забывай про GPIO port bit set/reset register (GPIOx_BSRR)

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 09:19:19
polyname

Код: Выделить всё

#ifdef __ARM_ARCH_7M__
	//ARM Cortex BitBand access macros
	#define BITBAND_SRAM_REF   0x20000000
	#define BITBAND_SRAM_BASE  0x22000000
	// Convert SRAM address
	#define BITBAND_SRAM(addr, bit) ((volatile U8 *)((BITBAND_SRAM_BASE + ((U32)(addr)-BITBAND_SRAM_REF)*32 + (bit*4))))
	#define BITM( addr, bit ) (BITBAND_SRAM(addr,bit))

	#define BITBAND_PERI_REF   0x40000000
	#define BITBAND_PERI_BASE  0x42000000
	// Convert PERIPHERAL address
	#define BITBAND_PERI(addr, bit) ((volatile U8 *)((BITBAND_PERI_BASE + ((U32)(addr)-BITBAND_PERI_REF)*32 + (bit*4))))
	#define BITP( addr, bit ) (BITBAND_PERI(addr,bit))
#endif

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 12:52:31
ELcat
#define PortBbit8 (*((volatile unsigned long *) 0x422181A0 ))
PB8 = 1; //включаем светодиод
Это то что мне надо! :) Но как рассчитать эти адреса в моём случае???

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 13:20:32
polyname
гляньте на один пост выше - там все есть

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 13:29:44
ChipKiller
ELcat писал(а):Но как рассчитать эти адреса в моём случае???
... да уж........ а посмотреть пост выше или глянуть в конец файла Constants.inc из моего проекта? Расписано лучше не придумаешь. Берешь из Dataseet_а адрес периферии и подставляешь в макрос ... и все.
Т.е. битовое поле представлено 32-битным адресом - пишешь по адресу 1 - установка бита, пишешь 0 - сброс.

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 16:07:35
ELcat
ChipKiller писал(а): ... да уж........
Мужики! Вы, пожалуйста, на меня не серчайте. У меня нету тех знаний и навыков которые есть у вас и потому каждая новая строчка, что вы пишете, воспринимается мной как... эммм... как новый иероглиф при изучении китайской грамоты. :)

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 16:32:20
polyname
этот кусок - с главного сайта ARM, там же и пример использования: http://infocenter.arm.com/help/index.js ... a4203.html
по поводу адресов периферии обращайтесь к stm32f10x.h

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 17:10:36
ChipKiller
Мужики! Вы, пожалуйста, на меня не серчайте....
... дело не в этом - просто уже не знаю как помочь....
если нет понимания как работать с bit banding_ом - аналог "ногодрыга" через BSRR

Код: Выделить всё

GPIOB->ODR |= GPIO_ODR_ODR_7; 
аналог с использованием BSRR
GPIOB->BSRR = GPIO_BSRR_BS_7; // или GPIOB->BSRR = (uint32_t)(1<<7);

GPIOB->ODR &=~GPIO_ODR_ODR_7;;
аналог с использованием BSRR
GPIOB->BSRR = GPIO_BSRR_BR_7; // или GPIOB->BSRR = (uint32_t)(1<<(7+16));
на просторах инета есть обзорная статья про STM32 на русском (pdf) - прочти, по крайней мере будет меньше ненужных вопросов. В принципе Datasheet достаточно хорош, чтобы обойтись без либ от ST.....

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 17:38:03
ELcat
ChipKiller писал(а):

Код: Выделить всё

GPIOB->ODR |= GPIO_ODR_ODR_7; 
аналог с использованием BSRR
GPIOB->BSRR = GPIO_BSRR_BS_7; // или GPIOB->BSRR = (uint32_t)(1<<7);

GPIOB->ODR &=~GPIO_ODR_ODR_7;;
аналог с использованием BSRR
GPIOB->BSRR = GPIO_BSRR_BR_7; // или GPIOB->BSRR = (uint32_t)(1<<(7+16));
Да с этим я разобрался, а вот с бит-бндинг...
Вообще я эту среду не понимаю. Нах..я было создавать такую хрень в которой нельзя работать без предварительных часов секса с настройкой самой среды. Каждая привычная мелочь тут не работает. Для меня, например, полный ах..й от того, что безобидная, сцука, на первый взгляд фраза:
volatile unsigned int x=0;
x += 1;
вызывает, блеать, сразу аж три е..учих ошибки:
Error[Pe077]: this declaration has no storage class or type specifier
Error[Pe247]: variable "x" has already been defined (at line 14)
Error[Pe065]: expected a ";"
Иэто бля имеет место в ах..ительно платном пакете за немеряное количество зелёных бумажек???

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 22:16:20
ELcat
Ну так мне кто-нибудь подскажет, почему выскочили эти ошибки?

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 22:41:41
HHIMERA
ELcat писал(а): Но как рассчитать эти адреса в моём случае???
А не надо ничего рассчитывать... пусть препроцессор считает...

Код: Выделить всё

   // Convert SRAM address
   #define BITBAND_SRAM(addr, bit) (SRAM_BB_BASE + ((uint32_t)(addr)-SRAM_BASE)*32 + (bit*4))
	 
   // Convert PERIPHERAL address
   #define BITBAND_PERI(addr, bit) (PERIPH_BB_BASE + ((uint32_t)(addr)-PERIPH_BASE)*32 + (bit*4))	 
SRAM_BB_BASE, SRAM_BASE, PERIPH_BB_BASE и PERIPH_BASE уже определены в хэдэре МК...
Далее нужно определить чем рулить...

Код: Выделить всё

	 #define PortCbit8    (*((volatile uint32_t *) BITBAND_PERI(&(GPIOC->ODR) , 8) ))
	 #define PortCbit9    (*((volatile uint32_t *) BITBAND_PERI(&(GPIOC->ODR) , 9) ))

	 #define PortBbit2    (*((volatile uint32_t *) BITBAND_PERI(&(GPIOB->ODR) , 2) ))
Где GPIOC->ODR и GPIOB->ODR тоже стандартно определены...
Остаётся махать ногами в проге...

Код: Выделить всё

PortCbit8 = 1;
PortCbit9 = 1;
PortBbit2 = 1;

PortCbit8 = 0;
PortCbit9 = 0;
PortBbit8 = 0;

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 22:47:57
HHIMERA
ELcat писал(а): почему выскочили эти ошибки?
Ваш косяк... разбирайтесь...

Re: STM32 новичку в ARM что к чему

Добавлено: Чт окт 11, 2012 22:57:58
Satyr
ELcat писал(а): Вообще я эту среду не понимаю. Нах..я было создавать такую хрень в которой нельзя работать без предварительных часов секса с настройкой самой среды. Каждая привычная мелочь тут не работает. Для меня, например, полный ах..й от того, что безобидная, сцука, на первый взгляд фраза:
:))) :)))
дело в том, что ты слишком привык к 'среде'.
а тут не среда, а наконец стандартный взрослый компилятор.

Re: STM32 новичку в ARM что к чему

Добавлено: Пт окт 12, 2012 00:21:43
ELcat
Мужики, я всё таки хочу вернуться к вопросу о типах переменных char, int, word. Что из них 8, 16 и 32 бита? В CVAVR разрядность соответствует вышеуказанной, а как здесь?
И, что странно, сколько перегуглил статей, нигде и никто не даёт прямых ответов. На том же easyelectronics.ru кучу статей перечитал ценности от которых для меня никакой, потому как так и не получил прямых ответов на свои вопросы. Почему что касается 8051, PIC, AVR, MSP и некоторых других архитектур люди пишут настолько понятные и прозрачные статьи, по которым будучи даже полным чайником и неучем можно хоть как-то начать, освоиться и достичь какого-нибудь результата. Я в своё время по книжке Белова за 2 недели испробовал всю периферию AVR. Далее по книжке Редькина (за которую кстати выложил не малые для меня деньги) попытался разобраться с SAM7S - безрезультатно. Книга как будто бы написана на китайском. Может вы подскажете что можно почитать, для того чтобы хоть как-то начать работу со средой IAR? У меня уже просто пропадает желание, поскольку каждая новая строчка = ошибка.

Re: STM32 новичку в ARM что к чему

Добавлено: Пт окт 12, 2012 01:07:05
Satyr
ELcat писал(а):Может вы подскажете что можно почитать, для того чтобы хоть как-то начать работу со средой IAR?
http://dev-zzo.net/storage/books/5-7940 ... 4-v0_1.pdf

Нет никакой 'среды'. Есть просто компилятор стандартного языка C. Его и надо для начала разговора освоить.

Re: STM32 новичку в ARM что к чему

Добавлено: Пт окт 12, 2012 01:13:12
спящий
У меня такой вопрос: сложно перейти от AVR к ARM? это как заново начинать? и какой ARM самый простой,самый дешевый,соответсвенно программатор,и главное дофига примеров?ну я думаю в AVR это tinny2313.
И сильная разница в них то,в чем плюсы?кроме количества перефирий? Я думаю главное это частота? на АВР небольше 40 МГц

И вообще сложно перейти от одного ARM к другому ARM?всмысле коды для них сильно меняются(допустим ARM7 и ARM9)

Re: STM32 новичку в ARM что к чему

Добавлено: Пт окт 12, 2012 01:39:01
Foks
Самый дешевый - STM32. Общего с AVR очень мало. Но, знание Си - его не пропьешь.

ELcat, резюмируя последние две страницы темы, скажу, что отвечать на Ваши вопросы - медвежья услуга. Вы так никогда не научитесь читать документацию и учиться чему-нибудь самостоятельно.

Re: STM32 новичку в ARM что к чему

Добавлено: Пт окт 12, 2012 05:46:38
TripleKill
ELcat, выложите уже проект в архиве.