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

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

Добавлено: Пн окт 08, 2012 16:09:55
ELcat
То есть "->" - это указание?
GPIOB - структура (или массив), включающая в себя кучу регистров?
И GPIOB->OSPEEDR есть не что иное как обращение к регистру OSPEEDR?
Так почему тогда просто не пишут OSPEEDR |= 0xYYYY YYYY; ?
И что такое в данном случае GPIO_OSPEEDER_OSPEEDR7 ?

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

Добавлено: Пн окт 08, 2012 16:34:03
SubDia
Так не пишут, потому что ты должен внести изменение в элемент структуры, которым и является собственно регистр OSPEEDR. А обращение к элементу структуры через указатель осуществляется с помощью операции "->".
А GPIO_OSPEEDER_OSPEEDR7 в данном случае является одним из битов OSPEEDR. Ты его можешь установить, а можешь сбросить, меняя конфигурацию. Пробегись по адресам в хидере.

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

Добавлено: Пн окт 08, 2012 16:36:57
ChipKiller
Если так проще GPIOB - базовый адрес (см. datasheet), OSPEEDR - смещение от базы, а дальше через #define идут конкретные биты

(0x4001 0C00 - 0x4001 0FFF) GPIO Port B
GPIOx_ODR - смещение = 0x0C
значит GPIOB->ODR=0x4001 0C00+0x0C=0x4001 0C0C


ELcat с С придется разобраться ;)

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

Добавлено: Пн окт 08, 2012 16:48:59
ELcat
Пока что понятна лишь команда:
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
С элементом AHBENR структуры RCC побитно сложить константу 0x00000002 и результат присвоить элементу AHBENR, так как RCC_AHBENR_GPIOBEN в CMSIS библиотеке объявлен как:
#define RCC_AHBENR_GPIOBEN ((uint32_t)0x00000002) /*!< GPIO port B clock enable */

Всё остальное пока абсолютно ни...я не понятно. :evil:

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

Добавлено: Пн окт 08, 2012 16:54:32
ChipKiller
RCC->AHBENR - адрес в памяти, т.е. сделать лог. ИЛИ со значением по указанному адресу и константой RCC_AHBENR_GPIOBEN, и записать результат обратно в ячейку

на ассемблере (может так понятней)

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

mov32 r0,#RCC_AHBENR; в r0 адрес ячейки
ldr r1,[r0]; в r1 содержимое ячейки
mov32 r2,#RCC_AHBENR_GPIOBEN; значение константы
orr r1,r2 ; лог. ИЛИ
str r1,[r0]; результат назад в ячейку

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

Добавлено: Пн окт 08, 2012 17:03:30
ELcat
Что-то не пойму что за фигня творится с блокнотом? Тупо копирую строку из блокнота и он же её не находит.
XpeHb.png
(164.93 КБ) 460 скачиваний

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

Добавлено: Пн окт 08, 2012 17:11:47
ELcat
ChipKiller писал(а):RCC->AHBENR - адрес в памяти, т.е. сделать лог. ИЛИ со значением по указанному адресу и константой RCC_AHBENR_GPIOBEN, и записать результат обратно в ячейку
Ты меня начинаешь запутывать. Какая разница между ячейкой с заданным адресом в памяти и регистром, который находится по этому адресу? Суть ведь в том, что для компилятора указатель на этот адрес обозначен как элемент AHBENR структуры RCC? Или я опять не правильно понял?
Лучше объясни что означает GPIO_MODER_MODER7_0, потому как в библиотеке ни одного коммента по этому поводу.

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

Добавлено: Пн окт 08, 2012 17:19:13
ChipKiller
Ты меня начинаешь запутывать. Какая разница между ячейкой с заданным адресом в памяти и регистром, который находится по этому адресу?
...путать не хочу ни в коем разе :)
GPIO_MODER_MODER7_0 - константа (режим_0 для бита 7) .... глянь в архиве, что я выкладывал Constans.inc файлик - он для stm32f100, но думаю разберешься

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

Добавлено: Пн окт 08, 2012 17:26:31
ELcat
В общем с подсказками SubDia и моими скитаниями по stm32l1xx.h получился такой код:
Спойлер#include "stm32l1xx.h"

int main()
{
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;

GPIOB->MODER |= GPIO_MODER_MODER7_0; //GP
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_7; //GP+PP
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7; //max speed (40 MHz (50 MHz if line capacity = 30pF))
while(1)
{
GPIOB->ODR |= GPIO_ODR_ODR_7;
for (volatile unsigned int i=0; i<100000; i++) {}
GPIOB->ODR &= ~GPIO_ODR_ODR_7;
for (volatile unsigned int i=0; i<100000; i++) {}
}
return 0;
}
, который компилируется и, наконец-то, мигает!!! :))

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

Добавлено: Пн окт 08, 2012 17:39:17
SubDia
Поздравляю!
Правда, глухие циклы не есть лучшее, что можно придумать для задержек, но для данной программки покатит.
Я вообще в таких случаях использую специальную функцию, которая позволяет делать задержки определенной длительности. Она основана на частоте HCLK, правда, для ее использования нужно будет добавлять в проект библиотечные файлы. Не знаю, готов ли ты к этому - у тебя и так, наверное, голова кругом сегодня. =))

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

Добавлено: Пн окт 08, 2012 17:43:54
ChipKiller
ну для задержки можно и таймер использовать (их там куча). Самая частая ошибка - забывают включить тактирование для используемого модуля (по умолчанию все выключено для энергоэкономии)

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

Добавлено: Пн окт 08, 2012 17:47:02
SubDia
Да, таймеры - самое грамотное решение. Я говорю о таких, простых задачах, когда циклы не будут мешать.
В плане тактирования у STM грамотно сделано. И логично. Нужно использовать модуль - включил и используй.
У S3C2440A (самсунговский SoC на ядре ARM920T) я сначала отключаю ненужную периферию - корейцы щедрые, у них все по умолчанию включено. =))

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

Добавлено: Пн окт 08, 2012 18:42:23
ELcat
SubDia писал(а):... у тебя и так, наверное, голова кругом сегодня. =))
Да не то слово. К тому же у меня сейчас простуда, восприятие несколько притуплено. Далее впланах или LS020, или Nokia 3310/3410, ставшие уже почти "родными" после "Сталкера". :) Правда пока что проц сей для меня всего лишь "чёрная печенюшка" с Х его З что там внутри. Теперь, когда уже поочерёдно помигал двумя светодиодиками, у меня хотябы появился стимул "копать" дальше. Спасибо вам всем огромное за поддержку! Надеюсь, что и в дальнейшем не дадите споткнуться новичку и подадите руку помощи. :beer:

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

Добавлено: Пн окт 08, 2012 18:56:41
SubDia
Не за что, подадим конечно. Насколько у самих рук хватит. :)))

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

Добавлено: Пн окт 08, 2012 20:06:06
ELcat
Можно ещё такой вопрос? Там в цикле-задержке крутится число всего-то сто тысяч, причём в десятичной. При этом перемигивание происходит с частотой примерно раз в секунду. Это ж какая частота ядра получается? ~400-500кГц что ли?

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

Добавлено: Пн окт 08, 2012 21:41:44
SubDia
А как ты думаешь, сколько тактов требуется на выполнение оператора for, сложение, сравнение, и т.д.?
Кстати, я пока не соображу, как это отражается на выполнении кода, но у тебя превышен предел i. Unsigned int - это 65535 максимум, а у тебя - imax=100000.
И прикрепи-ка филик system_stm32_blablabla.с поглядеть.

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

Добавлено: Пн окт 08, 2012 22:15:57
ELcat
Это скачано с сайта ST в составе архива CMSIS.

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

Добавлено: Пн окт 08, 2012 22:16:52
ELcat
SubDia писал(а):А как ты думаешь, сколько тактов требуется на выполнение оператора for, сложение, сравнение, и т.д.?
Ну, думаю, 2 - инкремент и условный переход.

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

Добавлено: Пн окт 08, 2012 22:20:02
SubDia
Погоди. Дай мне исходники, зачем мне хидеры? Или дай проект целиком уже.

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

Добавлено: Пн окт 08, 2012 22:29:07
ELcat
Вот.