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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[youtube][/youtube][uquote="Frogfot",url="/forum/viewtopic.php?p=3358377#p3358377"]Народ, только начал юзать STM32F051R8 на Discovery под Keil - pls кому не в лом, киньте пример инициализации TIM2 или TIM3 с прерыванием и как оформляется прерывание, ато после AVR тяжко втыкать.[/uquote]
http://www.st.com/en/development-tools/stm32cubemx.html
Внизу кнопка "гэт софтвар", но надо зарегаться - это не больно.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Я бы не стал советовать начинать с куба. Уж лучше SPL.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="Мурик",url="/forum/viewtopic.php?p=3358414#p3358414"]Я бы не стал советовать начинать с куба. Уж лучше SPL.[/uquote]
Да чего уж там - даешь самопальные функции-инициализаторы периферии через регистры!
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Мурик писал(а):Я бы не стал советовать начинать с куба.
+
Ярослав555 писал(а):даешь самопальные функции-инициализаторы периферии через регистры!
Что же в этом плохого? Сплошные плюсы. Мне один уже заявил, узнав что я не использовал готовые библиотеки в неком проекте, что я от DMA отказался. А DMA совсем несложно настраивается, но вот для него нет, потому что есть автокоды и даже не пытался понимать что это видимо.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Простые и подробные примеры использования периферии STM32F0xx есть в CodeSnippets.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Ярослав555 писал(а):даешь самопальные функции-инициализаторы периферии через регистры!
Это потом, когда появится опыт работы с МК. А с начала лучше немного упростить задачу взяв SPL и заодно изучив как устроены ее функции.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Мурик писал(а):А с начала лучше немного упростить задачу взяв SPL
Для меня как-то SPL никак ничего не упростил. Я имею ввиду для понимания и изучения МК.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3358568#p3358568"]Для меня как-то SPL никак ничего не упростил. Я имею ввиду для понимания и изучения МК.[/uquote]
Проблема с stm32 и SPL состоит в том, что всю структуру периферии надо держать в голове - схему тактирования, взаимосвязи, распределение ножек и прочее. На настройку всего этого веселья уйдет вагон времени. Куб просто экономит время. Лично мне хватает секса с AD, 1-wire, синхронизацией всяких вычиток и прочей лабудой.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Дак пользуйтесь любыми средствами программирования, которые Вам нравятся, кто ж против то? Я про то, что автокоды и готовые библиотеки скорее мешают изучению МК, чем помогают, как магнитофон при обучении игре на рояле.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

Сообщение alexf58 »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3358364#p3358364"]В смысле читаете счетчик? Данные захватываются в специальный регистр, оттуда и читайте, это будет максимально точное значение.[/uquote]

Плохо выразился. Конечно читаю CCR1.

Посмотрел на PWM input mode. Попробую один канал пустить на capture, другой на slave mode reset. Спад импульса мне не нужен, только фронт, но наверное получится. Спасибо за наводку.
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

Народ, подскажите, какая последняя нормальная версия Keil для ARM и откуда лучше скачать вместе с таблеткой.

Добавлено after 46 minutes 17 seconds:
Народ, ещё подскажите - Keil пишет - ошибка записи в флеш, что может быть?
Error 1.jpg
(18.79 КБ) 407 скачиваний
Добавлено after 24 minutes 9 seconds:
Ошибку записи в флеш пофиксил, кому будет нужно - https://electronix.ru/forum/lofiversion ... 86983.html
Хорошему коту и в декабре - март :)
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

Благодарю всех откликнувшихся, но решил сделать старым дедовским методом - по даташиту - 1 раз разобраться, чтобы потом не искать ошибки в HAL/SPL/Cube, но не исключаю что попробую и HAL/SPL/Cube.
Хорошему коту и в декабре - март :)
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, не посещает удача при запуске АЦП от таймера stm32f303. Подскажите пожалуйста в каком моменте заблуждаюсь.

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

void ADC_Timer_Init(void)
{		
  RCC->APB2ENR |= RCC_APB2ENR_TIM15EN;

  TIM15->PSC  = 720 -1; //new clock = 100kHz
  TIM15->ARR  = 50 - 1; //period = 0.0005sec
  TIM15->CR2 |= TIM_CR2_MMS_1; //COUNTER_ENABLE signal to TIM15, used as trigger output (TRGO)
}

void ADC_Init(void)
{
   	RCC->AHBENR |= RCC_AHBENR_GPIODEN ;//разрешаем тактирование порта D
	GPIOD->MODER |= GPIO_MODER_MODER11;//настраиваем PD11(8chanel) для работы АЦП в режим аналогового входа
	GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR11;
	
	RCC->CFGR2 |= RCC_CFGR2_ADCPRE34_DIV1;//предделитель 1 для АЦП 
	ADC3_4_COMMON->CCR &= ~(ADC34_CCR_CKMODE);//тактируем от PLL
	RCC->AHBENR |= RCC_AHBENR_ADC34EN;//включаем тактирование АЦП
	
	
	ADC3->CR &= ~ADC_CR_ADVREGEN; 
	ADC3->CR |=  ADC_CR_ADVREGEN_0; 
	delay_us(100); 
	
	ADC3->CR &= ~ADC_CR_ADCALDIF;
	ADC3->CR |= ADC_CR_ADCAL;//Запуск калибровки АЦП
	while (ADC3->CR & ADC_CR_ADCAL);//Ожидание конца колибровки

	ADC3->SMPR1 &= ~ADC_SMPR1_SMP8;
	ADC3->SMPR1 |= ADC_SMPR1_SMP8_0;
	ADC3->SMPR1 |= ADC_SMPR1_SMP8_2;

	
	ADC3->CFGR	&= ~ADC_CFGR_ALIGN;//выравниваем результат преобразования по правому краю
	ADC3->CFGR	&= ~ADC_CFGR_RES;	//12bit
	ADC3->CFGR     &=  ~ADC_CFGR_CONT; //одиночное преобразование
	ADC3->CFGR     |=  ADC_CFGR_OVRMOD;
	
        ADC3->CFGR |=  ADC_CFGR_EXTSEL;   // запуск преобразования по TIM15_TRGO event
	ADC3->CFGR &= ~ADC_CFGR_EXTSEL_0; 
	ADC3->CFGR &= ~ADC_CFGR_EXTEN;// включаем софтовый запуск						

	//длина последовательности по умолчанию равна 1,
	ADC3->SQR1 = ADC_SQR1_SQ1_3;									//(PD11 - 8 канал)
	
	ADC3->CR  |=  ADC_CR_ADEN;//включаем АЦП
	while(ADC3->ISR & ADC_ISR_ADRD);//ждём его готовности
	delay_us(100);

}


Таймер тикает, но преобразование не запускает.
Включаю его в другом месте.
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

Народ, разбираюсь с SPI STM32F051, передачу и приём запустил, не разобрался с формированием Chip Select, сделано сильно заморочено в сравнении с АВР8 - поясните, как его формировать и переключать.

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

  RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;        // Enable Clock SPI1

  SPI1->CR1  = SPI_CR1_MSTR |  // Master configuration
               SPI_CR1_BR   |  // Baud rate control = 111 : fPCLK/256
               SPI_CR1_SSI  |  // SSI: Internal slave select
               SPI_CR1_SSM;    // SSM: Software slave management enabled

  SPI1->CR2  = SPI_CR2_DS_0   |
            	 SPI_CR2_DS_1   |
		 SPI_CR2_DS_2; //  | // Data Size 8 bit
//              SPI_CR2_TXEIE;   // Tx buffer empty interrupt enable
//              SPI_CR2_RXNEIE;  // Rx buffer empty interrupt enable
//       	 SPI_CR2_SSOE;    // SS Output Enable
							
  SPI1->CR1 |= SPI_CR1_SPE;     // Enable SPI1
Пробовал подключать 8 разрядный 7-сегментник на MAX7219 и TFT 1,8" на ST7735, не получилось, сделал через софтовый SPI.
Хорошему коту и в декабре - март :)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Frogfot",url="/forum/viewtopic.php?p=3364687#p3364687"]Народ, разбираюсь с SPI STM32F051, передачу и приём запустил, не разобрался с формированием Chip Select[/uquote]
Смотри бит NSSP в CR2.
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="Reflector",url="/forum/viewtopic.php?p=3364700#p3364700"][uquote="Frogfot",url="/forum/viewtopic.php?p=3364687#p3364687"]Народ, разбираюсь с SPI STM32F051, передачу и приём запустил, не разобрался с формированием Chip Select[/uquote]
Смотри бит NSSP в CR2.[/uquote]
Т.е. выставить NSSP=1 и SSOE=1 в CR2, и контроллер автоматом будет дёргать Chip Select?

А SSI и SSM в CR1 не трогать? Пока не вкурил что это за биты.
Хорошему коту и в декабре - март :)
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

2 Reflector спасибо, запустил аппаратный SPI на STM32F051, TFT 1.8" 160х128 на ST7735 просто летает
Хорошему коту и в декабре - март :)
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

Народ, пытаюсь прочитать RAM STM32F051 - адрес 0x20000000 читается, дальше пытаюсь прочитать несколько последующих байтов - идёт прерывание вызова функции чтения? Что может быть?

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

uint32_t memory_read (uint32_t address)
{return (*(__IO uint32_t*) address);}

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

uint32_t Adress_RAM = 0x20000000;

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

Data_RAM = memory_read (Adress_RAM);
Хорошему коту и в декабре - март :)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Frogfot",url="/forum/viewtopic.php?p=3366889#p3366889"]Народ, пытаюсь прочитать RAM STM32F051 - адрес 0x20000000 читается, дальше пытаюсь прочитать несколько последующих байтов - идёт прерывание вызова функции чтения? Что может быть?[/uquote]
M0, в отличие от M3 и выше, не поддерживает невыровненный доступ, т.е. байт может лежать где угодно, но если идет обращение к 16-ти или 32-х битным переменным, то они должны быть выровнены по границам 2 или 4-х байт.
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="Reflector",url="/forum/viewtopic.php?p=3366895#p3366895"][uquote="Frogfot",url="/forum/viewtopic.php?p=3366889#p3366889"]Народ, пытаюсь прочитать RAM STM32F051 - адрес 0x20000000 читается, дальше пытаюсь прочитать несколько последующих байтов - идёт прерывание вызова функции чтения? Что может быть?[/uquote]
M0, в отличие от M3 и выше, не поддерживает невыровненный доступ, т.е. байт может лежать где угодно, но если идет обращение к 16-ти или 32-х битным переменным, то они должны быть выровнены по границам 2 или 4-х байт.[/uquote]
Благодарю, вкурил - я как раз пытался прочитать 4 первых байта по очереди в 32-битную переменную - как раз 0x20000000 читается, 3 последующих глючат, 0x20000004 и 0x20000008 значит должны прочитаться.
Хорошему коту и в декабре - март :)
Ответить

Вернуться в «ARM»