STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
То есть "->" - это указание?
GPIOB - структура (или массив), включающая в себя кучу регистров?
И GPIOB->OSPEEDR есть не что иное как обращение к регистру OSPEEDR?
Так почему тогда просто не пишут OSPEEDR |= 0xYYYY YYYY; ?
И что такое в данном случае GPIO_OSPEEDER_OSPEEDR7 ?
GPIOB - структура (или массив), включающая в себя кучу регистров?
И GPIOB->OSPEEDR есть не что иное как обращение к регистру OSPEEDR?
Так почему тогда просто не пишут OSPEEDR |= 0xYYYY YYYY; ?
И что такое в данном случае GPIO_OSPEEDER_OSPEEDR7 ?
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
Так не пишут, потому что ты должен внести изменение в элемент структуры, которым и является собственно регистр OSPEEDR. А обращение к элементу структуры через указатель осуществляется с помощью операции "->".
А GPIO_OSPEEDER_OSPEEDR7 в данном случае является одним из битов OSPEEDR. Ты его можешь установить, а можешь сбросить, меняя конфигурацию. Пробегись по адресам в хидере.
А GPIO_OSPEEDER_OSPEEDR7 в данном случае является одним из битов OSPEEDR. Ты его можешь установить, а можешь сбросить, меняя конфигурацию. Пробегись по адресам в хидере.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: STM32 новичку в ARM что к чему
Если так проще GPIOB - базовый адрес (см. datasheet), OSPEEDR - смещение от базы, а дальше через #define идут конкретные биты
(0x4001 0C00 - 0x4001 0FFF) GPIO Port B
GPIOx_ODR - смещение = 0x0C
значит GPIOB->ODR=0x4001 0C00+0x0C=0x4001 0C0C
ELcat с С придется разобраться
(0x4001 0C00 - 0x4001 0FFF) GPIO Port B
GPIOx_ODR - смещение = 0x0C
значит GPIOB->ODR=0x4001 0C00+0x0C=0x4001 0C0C
ELcat с С придется разобраться
Re: STM32 новичку в ARM что к чему
Пока что понятна лишь команда:
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 */
Всё остальное пока абсолютно ни...я не понятно.
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 */
Всё остальное пока абсолютно ни...я не понятно.
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: STM32 новичку в ARM что к чему
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]; результат назад в ячейку
Последний раз редактировалось ChipKiller Пн окт 08, 2012 17:09:11, всего редактировалось 2 раза.
- Реклама
Re: STM32 новичку в ARM что к чему
Что-то не пойму что за фигня творится с блокнотом? Тупо копирую строку из блокнота и он же её не находит.
Re: STM32 новичку в ARM что к чему
ChipKiller писал(а):RCC->AHBENR - адрес в памяти, т.е. сделать лог. ИЛИ со значением по указанному адресу и константой RCC_AHBENR_GPIOBEN, и записать результат обратно в ячейку
Ты меня начинаешь запутывать. Какая разница между ячейкой с заданным адресом в памяти и регистром, который находится по этому адресу? Суть ведь в том, что для компилятора указатель на этот адрес обозначен как элемент AHBENR структуры RCC? Или я опять не правильно понял?
Лучше объясни что означает GPIO_MODER_MODER7_0, потому как в библиотеке ни одного коммента по этому поводу.
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: STM32 новичку в ARM что к чему
...путать не хочу ни в коем разеТы меня начинаешь запутывать. Какая разница между ячейкой с заданным адресом в памяти и регистром, который находится по этому адресу?
GPIO_MODER_MODER7_0 - константа (режим_0 для бита 7) .... глянь в архиве, что я выкладывал Constans.inc файлик - он для stm32f100, но думаю разберешься
Re: STM32 новичку в ARM что к чему
В общем с подсказками SubDia и моими скитаниями по 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;
}, который компилируется и, наконец-то, мигает!!! 
Спойлер
#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;
}
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
Поздравляю!
Правда, глухие циклы не есть лучшее, что можно придумать для задержек, но для данной программки покатит.
Я вообще в таких случаях использую специальную функцию, которая позволяет делать задержки определенной длительности. Она основана на частоте HCLK, правда, для ее использования нужно будет добавлять в проект библиотечные файлы. Не знаю, готов ли ты к этому - у тебя и так, наверное, голова кругом сегодня. =))
Правда, глухие циклы не есть лучшее, что можно придумать для задержек, но для данной программки покатит.
Я вообще в таких случаях использую специальную функцию, которая позволяет делать задержки определенной длительности. Она основана на частоте HCLK, правда, для ее использования нужно будет добавлять в проект библиотечные файлы. Не знаю, готов ли ты к этому - у тебя и так, наверное, голова кругом сегодня. =))
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: STM32 новичку в ARM что к чему
ну для задержки можно и таймер использовать (их там куча). Самая частая ошибка - забывают включить тактирование для используемого модуля (по умолчанию все выключено для энергоэкономии)
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
Да, таймеры - самое грамотное решение. Я говорю о таких, простых задачах, когда циклы не будут мешать.
В плане тактирования у STM грамотно сделано. И логично. Нужно использовать модуль - включил и используй.
У S3C2440A (самсунговский SoC на ядре ARM920T) я сначала отключаю ненужную периферию - корейцы щедрые, у них все по умолчанию включено. =))
В плане тактирования у STM грамотно сделано. И логично. Нужно использовать модуль - включил и используй.
У S3C2440A (самсунговский SoC на ядре ARM920T) я сначала отключаю ненужную периферию - корейцы щедрые, у них все по умолчанию включено. =))
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: STM32 новичку в ARM что к чему
Да не то слово. К тому же у меня сейчас простуда, восприятие несколько притуплено. Далее впланах или LS020, или Nokia 3310/3410, ставшие уже почти "родными" после "Сталкера".SubDia писал(а):... у тебя и так, наверное, голова кругом сегодня. =))

- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
Не за что, подадим конечно. Насколько у самих рук хватит. 
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: STM32 новичку в ARM что к чему
Можно ещё такой вопрос? Там в цикле-задержке крутится число всего-то сто тысяч, причём в десятичной. При этом перемигивание происходит с частотой примерно раз в секунду. Это ж какая частота ядра получается? ~400-500кГц что ли?
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
А как ты думаешь, сколько тактов требуется на выполнение оператора for, сложение, сравнение, и т.д.?
Кстати, я пока не соображу, как это отражается на выполнении кода, но у тебя превышен предел i. Unsigned int - это 65535 максимум, а у тебя - imax=100000.
И прикрепи-ка филик system_stm32_blablabla.с поглядеть.
Кстати, я пока не соображу, как это отражается на выполнении кода, но у тебя превышен предел i. Unsigned int - это 65535 максимум, а у тебя - imax=100000.
И прикрепи-ка филик system_stm32_blablabla.с поглядеть.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: STM32 новичку в ARM что к чему
Это скачано с сайта ST в составе архива CMSIS.
- Вложения
-
- Include.zip
- (52.56 КБ) 211 скачиваний
Re: STM32 новичку в ARM что к чему
Ну, думаю, 2 - инкремент и условный переход.SubDia писал(а):А как ты думаешь, сколько тактов требуется на выполнение оператора for, сложение, сравнение, и т.д.?
Последний раз редактировалось ELcat Пн окт 08, 2012 22:22:01, всего редактировалось 1 раз.
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 новичку в ARM что к чему
Погоди. Дай мне исходники, зачем мне хидеры? Или дай проект целиком уже.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )



