Перейти к содержанию
    

Что использовать при создании первой программы для STM32

Начинаю писать для STM32 в Keil uVision3. Понятно, что будет файл типа main.c. А что вызывать из него для инициализации процессора? startup_stm32f10x_hd.s - инициализация стека и таблица векторов прерываний. А дальше? В каталоге Keil\ARM\Boards\ST\EK-STM32F есть примеры, в которых в файлах STM32_Init.c есть Configuration Wizard, в котором можно настроить всю периферию, частоты, и т.д. А в библиотеке stm32f10x_stdperiph_lib, скачанной с сайта ST, ничего подобного нет. Да и изменить в них ничего нельзя, у них атрибут "только для чтения". Что же, использовать их только как пример, писать свои файлы? Подскажите примерную структуру проекта, а то накидал файлов, что уже заблудился в них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коль никто не ответил, попробую ответить себе сам:

Не е** мозги, напиши свою инициализацию, назови файл, к примеру, Init_STM32.c, и по-порядочку, задай работу генераторов, прерываний, памяти... все, что вычитаешь в datashet и в примерах. Для описания регистров, битов, структур создай отдельный заголовочный файл, тоже на основе готовых, например stm32f10x.h. Тогда и в периферии быстрее разберешься. И всех делов. Тебе ж не нужна некая универсальная инициализация, что приведена в библиотеках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто то для инициализации пользуется фирменными библиотеками.

Я привык работать напрямую с регистрами - делов-то (правда, для этого надо хорошенько "вкурить" мануал).

 

Совсем необязательно для инициализации создавать отдельный файл - достаточно всего лишь одной функции.

Например:

void	Init()
{

//Enable SysTick as periodic timer
SysTick->LOAD   =   SYSTICK_PERIOD;
SysTick->CTRL   =   SysTick_CTRL_ENABLE | SysTick_CTRL_CLKSOURCE | SysTick_CTRL_TICKINT;

//configure clocks
FLASH->ACR  |=  FLASH_ACR_LATENCY_1;	//flash latency = 2 wait states
RCC->CR |=  RCC_CR_HSEON;
RCC->CFGR   =   RCC_CFGR_PLLMULL9 | RCC_CFGR_PLLSRC | RCC_CFGR_PPRE1_DIV2;
while (!(RCC->CR & RCC_CR_HSERDY));
RCC->CR |=  RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY));
RCC->CFGR   |=  RCC_CFGR_SW_PLL;
while ((RCC->CFGR & (RCC_CFGR_SWS_HSE | RCC_CFGR_SWS_PLL)) != RCC_CFGR_SWS_PLL);

//Enable clocking of the peripherals
RCC->APB2ENR	=   RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN |
					RCC_APB2ENR_IOPDEN | RCC_APB2ENR_SPI1EN;
RCC->APB1ENR	=   RCC_APB1ENR_SPI2EN | RCC_APB1ENR_USBEN;
RCC->AHBENR =   RCC_AHBENR_FLITFEN | RCC_AHBENR_SRAMEN | RCC_AHBENR_DMA1EN;

//SPI1
SPI1->CR1   =   SPI_CR1_DFF | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_0 | SPI_CR1_SPE;		//18 Mbit @ 72 MHz

//SPI2
SPI2->CR1   =   SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0 | SPI_CR1_SPE;	//281 Kbit @ 72 MHz
SPI2->CR2   =   SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN;		//enable DMA support

//setup ports
//PortA
GPIOA->ODR  =   PIN15 | PIN13 | PIN9 | PIN6;
GPIOA->CRH  =   (IN_Pull	<< 28)  |	/* PIN15 */
				(IN_Pull	<< 24)  |	/* PIN14 */
				(IN_Pull	<< 20)  |	/* PIN13 */
				(IN_Pull	<< 16)  |	/* PIN12 */
				(IN_Pull	<< 12)  |	/* PIN11 */
				(OUT_PP	 << 8)   |	/* PIN10 */
				(OUT_PP	 << 4)   |	/* PIN9	 */
				(OUT_PP	 << 0);		/* PIN8	 */
GPIOA->CRL  =   (OUT_AltPP  << 28)  |	/* PIN7	 */
				(OUT_PP	 << 24)  |	/* PIN6	 */
				(OUT_AltPP  << 20)  |	/* PIN5	 */
				(IN_Pull	<< 16)  |	/* PIN4	 */
				(IN_Pull	<< 12)  |	/* PIN3	 */
				(IN_Pull	<< 8)   |	/* PIN2	 */
				(IN_Pull	<< 4)   |	/* PIN1	 */
				(IN_Pull	<< 0);		/* PIN0	 */
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто то для инициализации пользуется фирменными библиотеками.

Я привык работать напрямую с регистрами - делов-то (правда, для этого надо хорошенько "вкурить" мануал).

 

Совсем необязательно для инициализации создавать отдельный файл - достаточно всего лишь одной функции.

 

А регистры, адреса тоже должны быть где-то расписаны, например, в файле stm32f10x_map.h, который сам уже имеет немалый размер.

Т.е. без библиотек не обойтись, наверное. Нужно включить файлик stm32f10x_lib.h, а остальное само прилепится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А регистры, адреса тоже должны быть где-то расписаны, например, в файле stm32f10x_map.h, который сам уже имеет немалый размер.

Т.е. без библиотек не обойтись, наверное. Нужно включить файлик stm32f10x_lib.h, а остальное само прилепится.

Я включил только stm32f10x_map.h, либа мне нафиг не нужна.

Громоздкие вызовы, корявый код...

 

Смотрите сами, как вам удобнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>>Я включил только stm32f10x_map.h, либа мне нафиг не нужна.

Навскидку, поискал в этом хидере SysTick_CTRL_ENABLE - нет такого. Нужно использовать stm32f10x.h (тот, который качать с st.com)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Докладываю, до чего дошел.

Решил все-таки использовать библиотеку StdPeriph_Lib последней версии 3.1.0, скачанную с сайта ST. В ее составе идет файл помощи, на одной из страничек указано, как применять библиотеку. Особых сложностей нет - разобраться с предложенными структурами и функциями, и вызывать их по мере необходимости. Не обязательно все файлы забрасывать в свой проект, просто в опциях проекта нужно указать Include Path. Согласен, что функции работают не оптимально, зато, надеюсь, без ошибок. На примеры посматриваю. Doxygen скачал и установил. Создал шаблоны для заголовков файлов и функций, в виде, который понимает Doxygen. Пришлось слегка изменить своему стилю.

После компиляции в Keil запускаю отладчик-симулятор, и наблюдаю за периферийными устройствами. Что-то работает, как должно, что-то нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...