Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 19.07.2013, 10:35  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

В некоторых чипах епром таки есть. А в тех где нет можно писать прямо во флеш. Ну или поставить внешний епром, если позволяют габариты устройства и финансы.

Насчет приоритетов читай раздел про группы и подгруппы
http://eugenemcu.ru/publ/13-1-0-76

Разделение на число групп/подгрупп делаешь сам где нибудь в начале вызовом NVIC_PriorityGroupConfig()
Реклама:
Hives вне форума  
Непрочитано 19.07.2013, 10:56  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

В стм32л есть ЕЕПРОМ данных, в остальных лучше вешать память снаружи, если данные часто меняются - у флеш-памяти контроллера слишком маленький ресурс. Но пару раз за время жизни устройства можно и во флеш
niXto вне форума  
Непрочитано 19.07.2013, 11:23  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,033
Сказал спасибо: 2,559
Сказали Спасибо 11,882 раз(а) в 5,959 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от niXto Посмотреть сообщение
В стм32л есть ЕЕПРОМ данных, в остальных лучше вешать память снаружи, если данные часто меняются - у флеш-памяти контроллера слишком маленький ресурс. Но пару раз за время жизни устройства можно и во флеш
Алаверды. Скажем, эталонировочные данные, которые индивидуальны и меняются один-два раза в год, а то и вообще - на всю оставшуюся жизнь записываются.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 21.07.2013, 17:04  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от anton_1000 Посмотреть сообщение
чип стм32ф100с4
Под F0 . Вырвался на 10 минут, нет времени совершено.
Даже времени объяснять .

Код:
	   void Init_disp(void)
		{
      RCC-›AHBENR|=RCC_AHBENR_GPIOAEN;
			RCC-›APB1ENR|=RCC_APB1ENR_TIM6EN;
			RCC-›AHBENR|=RCC_AHBENR_DMA1EN;
			GPIOA-›MODER|=
			   //GPIO_MODER_MODER0_1 |
			 GPIO_MODER_MODER1_0 |
			 GPIO_MODER_MODER2_0 |
			 GPIO_MODER_MODER3_0 |
			 GPIO_MODER_MODER4_0 |
			 GPIO_MODER_MODER5_0 |
			 GPIO_MODER_MODER6_0 |
			 GPIO_MODER_MODER7_0 |
			 GPIO_MODER_MODER8_0 |
			 GPIO_MODER_MODER9_0 |
			 GPIO_MODER_MODER10_0 |
			 GPIO_MODER_MODER11_0 |
			 GPIO_MODER_MODER12_0 ;
			
				GPIOA-›OTYPER=0;
				GPIOA-›PUPDR=0;
				GPIOA-›OSPEEDR=0;			
				GPIOA-›ODR=0xFF;
				
				TIM6-›CR1=0;
				TIM6-›CR2=0;
				TIM6-›PSC=320-1;
				TIM6-›ARR=500-1;
				TIM6-›SR&=~TIM_SR_UIF;
				TIM6-›DIER|=TIM_DIER_UDE;
				TIM6-›CR1|=TIM_CR1_CEN;
				
			
			
			  DMA1_Channel3-›CCR =
				DMA_CCR_MSIZE_0|
				DMA_CCR_PSIZE_0| 
				DMA_CCR_MINC |
				DMA_CCR_DIR |
				DMA_CCR_PL|
				DMA_CCR_CIRC;
						
				 DMA1_Channel3-›CNDTR=0x04;
				 DMA1_Channel3-›CPAR =(uint32_t)&GPIOA-›ODR; 
				 DMA1_Channel3-›CMAR =(uint32_t)disp_buf;
				 DMA1_Channel3-›CCR |=DMA_CCR_EN;	
				}

				
				
   	 void Set_disp(uint8_t pos, uint8_t data)
		{
			
			disp_buf[pos]= (disp_buf[pos] & (~(((uint16_t)SEG_MASK)‹‹SEG_OFFSET) )) | ((((uint16_t)seg_table[data])& SEG_MASK)‹‹SEG_OFFSET);
			
			
		}
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 21.07.2013, 21:50  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Добрый день. Понемногу разбираюсь с FSMC. В процессе возникла проблема, не передаются данные по DMA во внешнюю память.
Код следующий:
Код:
//объявление переменной по начальному адресу SRAM памяти
vu16 flasharray[500] __attribute__((at(0x68000000)));
...
int main(void)
{
           //инициализация SRAM
	SRAM_Init();
           //инициализация DMA и ADC
	ADC1_CH6_DMA_Config();
           //начало преобразования
	ADC_SoftwareStartConv(ADC1);
...
}
void ADC1_CH6_DMA_Config(void)
{
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  DMA_InitTypeDef       DMA_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  /* DMA2 Stream0 channe0 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;       DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1-›DR;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&flasharray;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = 500;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA2_Stream0, &DMA_InitStructure);
  DMA_Cmd(DMA2_Stream0, ENABLE);

  /* Configure ADC1 Channel6 pin as analog input ******************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* ADC Common Init **************************************************  ********/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC1 Init **************************************************  **************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 2;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channe6 configuration *************************************/
  ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_3Cycles);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_3Cycles);
 /* Enable DMA request after last transfer (Single-ADC mode) */
  ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

  /* Enable ADC3 DMA */
  ADC_DMACmd(ADC1, ENABLE);

  /* Enable ADC3 */
  ADC_Cmd(ADC1, ENABLE);
}

void SRAM_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure; 
  
  /* Enable GPIOs clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF |
                         RCC_AHB1Periph_GPIOG, ENABLE);

  /* Enable FSMC clock */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); 
  
...

/*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_AddressSetupTime = 8;//7
  p.FSMC_AddressHoldTime = 0;//0
  p.FSMC_DataSetupTime = 10;//7
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStru  ct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 

  /*!‹ Enable FSMC Bank1_SRAM2 Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE); 

}
При выполнении программы данные с АЦП в массив заносятся только один раз, дальше не переносятся. Как если бы был настроен DMA в режиме DMA_Mode_Normal. При использовании обычного массива, не во внешней SRAM, данные передаются постоянно. Подскажите, из-за чего может быть такая проблема?

Добавлено:
Проблема решилась. Поставил старт преобразования после всех инициализаций(экран, тачскрин, кнопки).

Теперь вопрос в другом как запускать DMA по требованию? т.е. в определенный момент запустить DMA заново. Второй раз инициализировал - все равно не стартует...

Последний раз редактировалось swat24; 21.07.2013 в 23:26.
swat24 вне форума  
Непрочитано 21.07.2013, 23:21  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вообще то ERRATA крайне не советует делать DMA для Int‹-›Ext, из за недоделок чипа возможны нехорошие последствия.
Hives вне форума  
Непрочитано 21.07.2013, 23:36  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Hives, т.е. не желательно использовать DMA для общения со внешней памятью через FSMC, правильно я Вас понял?
В моем случае, вроде, заработало...
swat24 вне форума  
Непрочитано 22.07.2013, 01:44  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Ага. Там написано что лазить по FSMC можно только в монопольном режиме, т.е. или только DMA или только проц. Если запросы наложатся - улетит в исключение или глюканет DMA. А поскольку создать такую ситуацию получится не часто - вот пока "все и работает". А потом упадет как бы на ровном месте.
Hives вне форума  
Непрочитано 22.07.2013, 07:47  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от swat24 Посмотреть сообщение
Теперь вопрос в другом как запускать DMA по требованию? т.е. в определенный момент запустить DMA заново. Второй раз инициализировал - все равно не стартует...
Запиши единицу в бит EN в DMA_SCR
niXto вне форума  
Непрочитано 22.07.2013, 09:54  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Hives, у меня в готовом проекте такого быть не должно. Т.е. я включаю АЦП с ДМА и заполняю всю внешнюю память. После прерывания о завершении я останавливаю АЦП с ДМА и начинаю обрабатывать оцифрованные данные.

niXto, Добрый день. А как лучше останавливать поток DMA или запускать по требованию преобразование АЦП?
Хотя может лучше будет для меня для АЦП внешний запуск по таймеру и включать/отключать сам таймер при необходимости работы/остановки оцифровки. В общем как смогу попробую что получится.

Странно, что ДМА нужно через небольшую задержку включать после инициализации FSMC. Еще странее, что без задержки массив заполняется только один раз и все... Если бы не проходила инициализация, или нужна бы была обязательная задержка, то массив бы не заполнялся бы и первый раз, а не только все последующие...
swat24 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 19:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot