Собственно, чтоб проект не был совсем уж бесполезным, пусть он моргает светодиодом, коих целых два.
Один сидит на выводе PC9 (зелёный), а другой на PC8 (синий). Вспоминая предыдущий опыт, сделаем уже по канону: функции задержки, функции работы со светодиодом.
читать дальшеДумаю, никого не удивит, что заголовочный файл с описанием периферии называется stm32f0xx.h.
Описание регистров и флагов находится в документе RM0091 Reference manual «STM32F05xxx advanced ARM-based 32-bit MCUs».
Сперва надо включить тактирование у порта, на котором сидят светодиоды. Иначе ничего работать не будет. Ищем в содержании раздел Reset and clock control (RCC), в котором где-то есть регистр управления тактированием... Нашёл: это RCC_AHBENR. За порт C отвечает 19 бит (IOPCEN).
Т.е. код будет выглядеть так:
Называется в заголовочном файле он иначе, чем в мануале, но я прям поиском по AHBENR в файле stm32f0xx.h это название и нашёл. Остальные по названию регистра также легко ищутся.
Далее назначаем выводы на выход. Опять же, смотрим регистры в мануале.
В регистре MODER биты сгруппированы по парам. Нам надо установить младший в паре в единицу, согласно руководящим указаниям:
MODERy[1:0]: Port x configuration bits (y = 0..15)
01: General purpose output mode
Остальные параметры нас устраивают, потому дальше просто устанавливаем единицу в соответствующем бите или же снимаем её. Через регистр BSSR это делать удобнее:
Если оформить это в виде функций, то главный цикл будет выглядеть так:
Светодиод зелёный будет моргать после заливки программы в контроллер =) Успех!
Файлы:
main.c
Проект.<< Предыдущее Следующее >>
@темы:
arm,
программизмы,
электроника,
stm32f0discovery,
stm32
*** error 65: access violation at 0x00000000 : no 'execute/read' permission
что это может означать?
*** error 65: access violation at 0x00000000 : no 'execute/read' permission
что это может означать?
Только что надо это сделать правильно и по даташиту, я на память не помню ни опций оной команды, ни адресов =)
Хотя не исключаю, что оно заведётся. Надо пробовать =)
Хотя не исключаю, что оно заведётся. Надо пробовать =)
Получилась запустить симулятор установкой параметра SARMCM3.DLL ->> "-REMAP" во вкладке Debug. Тем не менее ошибки появляются при симуляции.
Спасибо за помощь, продолжаю пока в теории (нет возможности приобрести МК), вернусь домой - попробую в железе
Угу, алгоритмы общие можно обкатать и так =) Но если покупать/доывать дискавери, лучше брать не VL, больно уж она древняя и несовместимая со всеми остальными семействами.
Хоть я и писал их чисто себе на память как заметки, хорошо, что кому-то они тоже полезны)
я начинаю изучать stm 32 f0 и вот возник вопрос,итак внимание: объясните в чем вызвана разница в синтаксисе(в том числе во включение тактирования портов)
пример 1
// Включить тактирование порта C
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
// 9, 10 выводы - на выход (general purpose output mode)
GPIOC->MODER |= GPIO_MODER_MODER9_0 | GPIO_MODER_MODER10_0;
пример 2
GPIO_InitTypeDef GPIO_InitStruct_butt;
GPIO_InitTypeDef GPIO_InitStruct_led;
/*Enable or disable the AHB peripheral clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
вроде бы одно и тоже,но написано чуть по разному,тут мелькают практически все сообщения со вторым вариантом написания,
как правильнее писать, и еще вопрос почему когда в кейле пытаюсь написать первым вариантом он не может понять что я инициализурую( ну короче вообще не компилится и команды красным подчеркивает) я так понимаю,что в каком-то служебном файлике команды прописаны как во втором варианте,если я прав подскажите как файлик называется,уже столько времени копаюсь,что ппц...
спасибо всем тем кто поставит на путь истинный