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

Кто любит RISC в жизни, заходим, не стесняемся.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

По сути, критичные по таймингам там только три процедуры: сброса, записи бита в линию и чтения бита с линии. Все задержки в них можно жестко задавать таймером и быть стопроцентно уверенным, что в линию они уйдут именно таким образом. Нет там каких-то сигналов, которые бы требовали изучения с помощью ЛА. Я в свое время писал oneWire с нуля и не припоминаю, чтобы с ним возникли какие-то трудности.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

a5021 писал(а): Нет там каких-то сигналов, которые бы требовали изучения с помощью ЛА.
Мы все прекрасно помним во что выливаются расчеты ардуиноклоуна-теоретика.
И если он начнет настаивать, можем снова ткнуть носом... :)))
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Не с вашими талантами.
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

BenTech писал(а):Что подразумевается под to 256kB? Можно расширить штатную флеш до 256 кбайт с помощью внешней флешки, которая будет висеть на шине данных?
у STM32F030F4 флеш реально 32К
Реклама
Эиком - электронные компоненты и радиодетали
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

И с каких это пор?
Реклама
Аватара пользователя
Jeka_M
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

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

Сообщение Jeka_M »

a5021 писал(а):И с каких это пор?
Это недокументированный "бонус" без каких либо гарантий - http://we.easyelectronics.ru/pteriks/re ... stm32.html
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Спасибо за инфу. На досуге возьмусь как-нибудь проверить.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

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

Сообщение baghear »

Добрый день, стараюсь запустить шим на 1 канале 4 таймера на stm32f103vet6

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


		RCC->APB2ENR |= RCC_APB2ENR_IOPDEN | RCC_APB2ENR_AFIOEN; 
		RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
		  
   //PD12 push-pull
	GPIOD->CRH &= ~GPIO_CRH_CNF12;
	GPIOD->CRH |= GPIO_CRH_CNF12_1;

	GPIOD->CRH	&= ~GPIO_CRH_MODE12;
	GPIOD->CRH	|= GPIO_CRH_MODE12_1;
	GPIOD->CRH	|= GPIO_CRH_MODE12_1;
	

	TIM4->PSC = 72;

        TIM4->ARR = 204;

	TIM4->CCR1 = 102;

	TIM4->CCER |= TIM_CCER_CC1E;

	TIM4->CCER &=  ~TIM_CCER_CC1P;

	TIM4->BDTR |= TIM_BDTR_MOE;

  TIM4->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; 

	TIM4->CR1 &= ~TIM_CR1_DIR;

	TIM4->CR1 &= ~TIM_CR1_CMS;

	TIM4->CR1 |= TIM_CR1_CEN;

В чём может быть ошибка?
Последний раз редактировалось baghear Вс сен 13, 2015 21:51:04, всего редактировалось 2 раза.
Аватара пользователя
Jeka_M
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

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

Сообщение Jeka_M »

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

		RCC->APB1ENR |= RCC_APB1ENR_TIM4EN | | RCC_APB2ENR_IOPDEN;

Это что за конструкция такая? Не считая синтаксической ошибки, Таймер и GPIO ведь на разных шинах висят (APB1, APB2), поэтому GPIO не затактируется.

RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // Включаем тактирование TIM4
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN; // Включаем тактирование GPIOD

К тому же, если используются альтернативные функции ввода-вывода (AFIO), надо затактировать блок альтернативных функций.
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

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

		  
 //PD12 push-pull

Почему PD12? TIM4_CH1 по-умолчанию на ножке PB6. На PD12 надо делать remap.
AFIO->MAPR |= AFIO_MAPR_TIM4_REMAP;

Зачем-то два раза записали GPIOD->CRH |= GPIO_CRH_MODE12_1; (хоть на функционирование и не влияет, но лишнее)

P.S. Если что, я сам только недавно начал осваивать STM32.
Последний раз редактировалось Jeka_M Вс сен 13, 2015 21:54:04, всего редактировалось 2 раза.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

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

Сообщение baghear »

Код:
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN | RCC_APB2ENR_IOPDEN;


Это что за конструкция такая? Не считая синтаксической ошибки, Таймер и GPIO ведь на разных шинах висят (APB1, APB2).
Вы правы, но у меня в другом месте, раньше, включается тактирование порта и альтернативных функций.
Да надо делать ремап, спасибо!!!
http://prntscr.com/8fz3r8
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Приветствую всех!
Ребят, а кто-нибудь делал распознование речи на STM32? Реально ли? А то нашел только одну статью с STM34F4Discovery, но и там говорилось мол "задача не простая, поэтому применяем Google".
Цель такая: сделать распознование определенного количества фраз - около 50.
P.S. Пока интересуюсь чисто теоретически :) ...
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

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

Сообщение es131245 »

При распознании речи железо это самая меньшая из проблем.
Осознать и написать алгоритм объёмная работенка.
Я бы попробовал где нить этот алгоритм позаимствовать - так быстрей.
Можно глянуть сайты - если ли у кого алгоритмы опознавания речи на клиентской стороне или исходники приложении опознавания.
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

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

Сообщение es131245 »

Что то на STM32F407 шумит АЦП. Прыгает макс-мин ~ 5*16
Настройки чисел в инициации не дали ничего.
Резики на землю и кондеры есть.
Посмотрел питания осцилом - вроде чисто всё. Наверно надо делать усреднение, но тут HAL как всегда.
Что нить имел с этим дело?

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

init:

 ADC_ChannelConfTypeDef sConfig;
 hadc1.Instance=ADC1;
 hadc1.Init.ClockPrescaler=ADC_CLOCKPRESCALER_PCLK_DIV2;
 hadc1.Init.Resolution=ADC_RESOLUTION12b;
 hadc1.Init.ScanConvMode=DISABLE;
 hadc1.Init.ContinuousConvMode=ENABLE;
 hadc1.Init.DiscontinuousConvMode=DISABLE;
 hadc1.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONV_T1_CC1;
 hadc1.Init.DataAlign=ADC_DATAALIGN_RIGHT;
 hadc1.Init.NbrOfConversion=1;
 hadc1.Init.DMAContinuousRequests=ENABLE;
 hadc1.Init.EOCSelection=DISABLE;
 HAL_ADC_Init(&hadc1);
 sConfig.Channel=ADC_CHANNEL_1;
 sConfig.Rank=1;
 sConfig.SamplingTime=ADC_SAMPLETIME_28CYCLES;
 HAL_ADC_ConfigChannel(&hadc1,&sConfig);
 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adcData,1);

MSP:

void HAL_ADC_MspInit(ADC_HandleTypeDef*hadc)
{GPIO_InitTypeDef GPIO_InitStruct;
 static DMA_HandleTypeDef  hdma;
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_ADC1_CLK_ENABLE();
 __HAL_RCC_DMA2_CLK_ENABLE();
 GPIO_InitStruct.Pin=GPIO_PIN_1;
 GPIO_InitStruct.Mode=GPIO_MODE_ANALOG;
 GPIO_InitStruct.Pull=GPIO_NOPULL;
 HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
 hdma.Instance=DMA2_Stream4;
 hdma.Init.Channel=DMA_CHANNEL_0;
 hdma.Init.Direction=DMA_PERIPH_TO_MEMORY;
 hdma.Init.PeriphInc=DMA_PINC_DISABLE;
 hdma.Init.MemInc=DMA_MINC_ENABLE;
 hdma.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
 hdma.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
 hdma.Init.Mode=DMA_CIRCULAR;
 hdma.Init.Priority=DMA_PRIORITY_HIGH;
 hdma.Init.FIFOMode=DMA_FIFOMODE_DISABLE;         
 hdma.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_HALFFULL;
 hdma.Init.MemBurst=DMA_MBURST_SINGLE;
 hdma.Init.PeriphBurst=DMA_PBURST_SINGLE; 
 HAL_DMA_Init(&hdma);
 __HAL_LINKDMA(hadc,DMA_Handle,hdma);
 HAL_NVIC_SetPriority(DMA2_Stream4_IRQn,4,4);
 HAL_NVIC_EnableIRQ(DMA2_Stream4_IRQn);}

pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Здравствуйте, подскажите кто как подключает термодатчик DS18B20 по 1-wire.
Просто у меня основной критерий что бы он не мешал работе основной программе своими дурацкими задержками, по этому смотрю в сторону подключения через USART. Есть ещё какие-нибудь оригинальные способы подключения ?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Я как-то писал обмен по 1-wire при помощи CapCom канала таймера. По мне, так даже проще USART-а.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

a5021,Благодарю за помощь позже может разберусь, жаль что код на с плюсами там я ни в зуб ногой =(.

Блин теперь таймер начал барахлить работал работал потом бац перестал в таймер не лез в главном цикле всё делал.
всё убрал оставил только инициализацию таймера, и всё равно в отладке в обработчик TIM3_IRQHandler не заходит.
Уже такое было откатился назад там по химичил заработало вернулся обратно работает. Вот опять обработчик отвалился.

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

void timer_init(void){
	TIM_TimeBaseInitTypeDef TIM_InitStructure;
	//-------------------- таймера 2 для delay_ms--------------------------
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	TIM2->PSC     =48000-1;               //настроить делитель для формирования миллисекунд  было 16000
	TIM2->CR1     = TIM_CR1_OPM;          //режим одного импульса
	//-----------------------------------------------
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//-----------------------------------------------
	TIM_InitStructure.TIM_Prescaler = 48-1; // Тактовая частота 48MHz/48=частота 1MHz
	TIM_InitStructure.TIM_Period = 1000; 	// 1ms
	TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
	TIM_Cmd(TIM3, ENABLE);
	NVIC_EnableIRQ(TIM3_IRQn);
}

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

void TIM3_IRQHandler(void){
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){

        servic_timer();

		 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
	}
}
Может это из за того что в стратапе свою функцию воткнул?

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

       PUBWEAK Reset_Handler
        SECTION .text:CODE:REORDER(2)
Reset_Handler
        LDR     R0, =init_rcc
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0
               
        PUBWEAK NMI_Handler
        SECTION .text:CODE:REORDER(1)
NMI_Handler
Спойлер

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

void init_rcc(void){
	__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

	RCC_DeInit();
    // Enable HSE
    RCC_HSEConfig(RCC_HSE_ON);

do{
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }

  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer */
    //RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4); //70Mhz  =10*7
	//---------------------------------------------------------------HSI--PLL
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10); //8/2MHz  =(8/2)*10=40 MHz

    RCC_PLLCmd(ENABLE);

    //RCC_PLLI2SConfig(2,2);
    //RCC_PLLI2SCmd(ENABLE);
    //RCC_ClockSecuritySystemCmd(ENABLE);

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                  //SYSCLK(64)
    // делим SYSCLK(64)  на 4  =16  на RCC_APB1_APB2_Clock_Source
    RCC_PCLK1Config(RCC_HCLK_Div1);       //      RCC_HCLK_Div4
    //---------------------------------------------------------
    debug_RCC();
    //---------------------------------------------------------
  }else{
	  while(1){
		RED_LED_ON;
	  }
  }
}
Galizin
Мучитель микросхем
Сообщения: 477
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

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

Сообщение Galizin »

Возможно конфликтуют вот эти строчки
TIM2->CR1 = TIM_CR1_OPM; //режим одного импульса
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Приветствую всех)
STM продолжает удивлять меня способностью создавать сложности и жопости в простых вещах :) .На сей раз предметом стал АЦП.
В кровь бьюсь пытаясь заставить работать два канала. Хочу попробовать скомпенсировать шум (+-2 единицы на 12 битах) проверяя два канала - один с сигналом, а второй без, и затем вычислить шум с пустого канала с полученных результатов на первом канале.
МК STM32f030 - регистр данных один, каналов несколько. Читал RM, нашел бит выбора канала - CHSEL (изменять нужно при ADSTART=0). Считываю первые данные с ADC_DR, сбрасываю ADSTART, сбрасываю предыдущий канал в CHSEL и ставлю нужный, запускаю ADSTART считываю второй результат (и так по кругу) - в результате полная херня ахинея в переменных с данными. Один канал опрашивается нормально...
Может я не то что-то делаю? :dont_know:
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

isx писал(а):Хочу попробовать скомпенсировать шум (+-2 единицы на 12 битах) проверяя два канала - один с сигналом, а второй без, и затем вычислить шум с пустого канала с полученных результатов на первом канале.
МК STM32f030 - регистр данных один, каналов несколько.
Ты осознаешь, что ADC один ? На входе тупо мултиплексер.
Поэтому и регистр данных один. И шум никакой не 'вычислишь'.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Satyr писал(а):Ты осознаешь, что ADC один ? На входе тупо мултиплексер.
Это понятно. Шум в самом МК (от перефирии и питания скорее всего ). Его я таким образом и хочу компенсировать.
А что с алгоритмом опроса, верный?
Ответить

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