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

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

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

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

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

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


 
Опции темы
Непрочитано 22.03.2017, 10:31  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Да, инжекционные (инжекторные, инжектированные - блин, че за название? если по переводу, то ближе к "введенные". странное название. куда "введенные"? кароч, "regular" - тут понятнее, можно перевести как "обычные", а "injected" - тут как бы засада с названием, больше подходит "раздельные", "separated")... вобщем, эти самые "введенные-разделённые", да, результат так же можно получать по ДМА, для этого у него есть инкремент адресов периферии, бит PINC.
Реклама:
NewWriter вне форума  
Непрочитано 22.03.2017, 14:45  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

stm32f103c8t6 и Keil 5
Чего то я запутался немного. Хочу запустить ADC1 один канал от таймера1 по второму каналу.
Таймер срабатывает и попадает у меня по прерыванию второго канала,а вот толи нет сигнала TRGO или неправильно настроил АЦП1 на прием сигнала.
Как можно увидеть сигнал TRGO от таймера в отладчике ?
Вручную запускал АЦП1 все нормально,измерение было.
инициализация таймера 1
Код:
//-------------------------------------------------------------------------
	//Инициализация структур
	//-------------------------------------------------------------------------
	TIM_TimeBaseInitTypeDef TIM1_init;
	TIM_OCInitTypeDef TIM1_OCPWM;
	TIM_OCInitTypeDef TIM1_OC2_adc;
	GPIO_InitTypeDef GPIO_Init_Led;
	GPIO_InitTypeDef GPIO_Init_him;
	
	//-------------------------------------------------------------------------
	//Тактирование
	//-------------------------------------------------------------------------
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE)  ;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE  );
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE  );
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)  ;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE)  ;
	//-------------------------------------------------------------------------
	//Инициализация таймера 1 канал шим,2 сравнение для ацп
	//-------------------------------------------------------------------------
	TIM1_init.TIM_CounterMode=TIM_CounterMode_Up;
	TIM1_init.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM1_init.TIM_RepetitionCounter=0;
	TIM1_init.TIM_Period=2264; //0x8B8;       // 2264
	TIM1_init.TIM_Prescaler=0x0000;  // 32 kHz= 31,250 us
	
	TIM_TimeBaseInit(TIM1,&TIM1_init);
	
	TIM1_OCPWM.TIM_OCMode=TIM_OCMode_PWM1;
	TIM1_OCPWM.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM1_OCPWM.TIM_Pulse=0x00;      // 50%
	TIM1_OCPWM.TIM_OutputState=TIM_OutputState_Enable;
	
	TIM_OC1Init(TIM1,&TIM1_OCPWM);
	TIM_CtrlPWMOutputs(TIM1,ENABLE);
	TIM_OC1PreloadConfig(TIM1,ENABLE);
	
	//-------------------------------------------------------------------------
	// Инициализация для 2 канала сигнал для ацп TRGO
	//------------------------------------------------------------------------
	TIM1_OC2_adc.TIM_OCMode=TIM_OCMode_Active;
	TIM1_OC2_adc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM1_OC2_adc.TIM_Pulse=2260;      
	TIM1_OC2_adc.TIM_OutputState=TIM_OutputState_Disab  le;
	
	TIM_OC2Init(TIM1,&TIM1_OC2_adc);
	
	TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_OC2Ref  );
	
  //TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
	TIM_ITConfig(TIM1,TIM_IT_CC2,ENABLE);
	TIM_ITConfig(TIM1,TIM_IT_COM,ENABLE);
	TIM_ITConfig(TIM1,TIM_IT_Trigger,ENABLE);
	
	TIM_Cmd(TIM1,ENABLE);
	
	TIM1-›SR &= ~TIM_SR_CC2IF;
	TIM1-›SR &= ~TIM_SR_UIF;
	TIM1-›SR &= ~TIM_SR_COMIF;
	//NVIC_EnableIRQ(TIM1_UP_IRQn);
	NVIC_EnableIRQ(TIM1_TRG_COM_IRQn);
	NVIC_EnableIRQ(TIM1_CC_IRQn);
Инициализация АЦП1
Код:
GPIO_InitTypeDef GPIO_Init_ADC;
	ADC_InitTypeDef  ADC_Init_A5;
	
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE  );
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)  ;
	
	GPIO_Init_ADC.GPIO_Pin=GPIO_Pin_5;
	GPIO_Init_ADC.GPIO_Mode=GPIO_Mode_AIN;
	GPIO_Init_ADC.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_Init_ADC);
	
	ADC_Init_A5.ADC_Mode=ADC_Mode_Independent;
	ADC_Init_A5.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_Init_A5.ADC_ContinuousConvMode=DISABLE;
	ADC_Init_A5.ADC_ExternalTrigConv=ADC_ExternalTrigC  onv_T1_CC2;
	ADC_Init_A5.ADC_ScanConvMode=DISABLE;
	ADC_Init_A5.ADC_NbrOfChannel=1;
	
	ADC_Init(ADC1,&ADC_Init_A5);
	
	ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_  SampleTime_13Cycles5);
	
	NVIC_EnableIRQ(ADC1_2_IRQn);
	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
	
	ADC_ExternalTrigConvCmd(ADC1,ENABLE);
	ADC_Cmd(ADC1,ENABLE);
	
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1)==SET);
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1)==SET);
Прерывания в main.c
Срабатывает только прерывание TIM1_CC_IRQHandler
Код:
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
void TIM1_UP_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM1,TIM_IT_Update)==!RESET)
	{
		//TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
		TIM1-›SR &= ~TIM_SR_UIF;	
	}
}

void TIM1_TRG_COM_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM1,TIM_IT_COM)==!RESET)
	{
		//TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
		TIM1-›SR &= ~TIM_SR_COMIF;
	}
}

void TIM1_CC_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM1,TIM_IT_CC2)==!RESET)
	{
		//TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
		TIM1-›SR &= ~TIM_SR_CC2IF;	
	}
}
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
void ADC1_2_IRQHandler(void)
{
	if(ADC_GetITStatus(ADC1,ADC_IT_EOC)== SET)
	{
		adc=ADC_GetConversionValue(ADC1);
		ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
	}
}

//-------------------------------------------------------------------------
__________________
Глаза боятся,а руки делают.

Последний раз редактировалось CERGEI1982; 22.03.2017 в 14:49.
CERGEI1982 вне форума  
Непрочитано 23.03.2017, 08:35  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А вот по TIM3_TRGO event получилось запустить ADC1
Код:
//-------------------------------------------------------------------------
	// Инициализация структур
	//-------------------------------------------------------------------------
	TIM_TimeBaseInitTypeDef TIM3_init;
//	TIM_OCInitTypeDef TIM1_OC1_adc;
	GPIO_InitTypeDef GPIO_Init_Led;
	
	//-------------------------------------------------------------------------
	// Тактирование
	//-------------------------------------------------------------------------
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE)  ;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE  );
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE  );
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)  ;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE)  ;
	//-------------------------------------------------------------------------
	// Настройка TIM3 для ацп1
	//-------------------------------------------------------------------------
	TIM3_init.TIM_CounterMode=TIM_CounterMode_Up;
	TIM3_init.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM3_init.TIM_RepetitionCounter=0;
	TIM3_init.TIM_Period=2264; //0x8B8;       // 2264
	TIM3_init.TIM_Prescaler=0x0000;  // 32 kHz= 31,250 us
	
	TIM_TimeBaseInit(TIM3,&TIM3_init);
	
	
	//-------------------------------------------------------------------------
	// Захват по сравнению
	//------------------------------------------------------------------------
//	TIM1_OC1_adc.TIM_OCMode=TIM_OCMode_Active;
//	TIM1_OC1_adc.TIM_OCPolarity=TIM_OCPolarity_High;
//	TIM1_OC1_adc.TIM_Pulse=2260;      
//	TIM1_OC1_adc.TIM_OutputState=TIM_OutputState_Disab  le;
//	
//	TIM_OC2Init(TIM1,&TIM1_OC1_adc);
	
	TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update  );
	
  TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
	//TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE);
	//TIM_ITConfig(TIM1,TIM_IT_COM,ENABLE);
	//TIM_ITConfig(TIM1,TIM_IT_Trigger,ENABLE);
	
	TIM_Cmd(TIM3,ENABLE);
	
	TIM3-›SR &= ~TIM_SR_CC1IF;
	TIM3-›SR &= ~TIM_SR_CC2IF;
	TIM3-›SR &= ~TIM_SR_CC3IF;
	TIM3-›SR &= ~TIM_SR_CC4IF;
	TIM3-›SR &= ~TIM_SR_UIF;
	TIM3-›SR &= ~TIM_SR_COMIF;
	NVIC_EnableIRQ(TIM3_IRQn);
Код:
GPIO_InitTypeDef GPIO_Init_ADC;
	ADC_InitTypeDef  ADC_Init_A5;
	
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE  );
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)  ;
	
	GPIO_Init_ADC.GPIO_Pin=GPIO_Pin_5;
	GPIO_Init_ADC.GPIO_Mode=GPIO_Mode_AIN;
	GPIO_Init_ADC.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_Init_ADC);
	
	ADC_Init_A5.ADC_Mode=ADC_Mode_AlterTrig;
	ADC_Init_A5.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_Init_A5.ADC_ContinuousConvMode=DISABLE;
	ADC_Init_A5.ADC_ExternalTrigConv=ADC_ExternalTrigC  onv_T3_TRGO;
	ADC_Init_A5.ADC_ScanConvMode=ENABLE;
	ADC_Init_A5.ADC_NbrOfChannel=1;
	
	ADC_Init(ADC1,&ADC_Init_A5);
	
	ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_  SampleTime_13Cycles5);
	
	NVIC_EnableIRQ(ADC1_2_IRQn);
	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
	
	ADC_ExternalTrigConvCmd(ADC1,ENABLE);
	ADC_Cmd(ADC1,ENABLE);
__________________
Глаза боятся,а руки делают.

Последний раз редактировалось CERGEI1982; 23.03.2017 в 08:40.
CERGEI1982 вне форума  
Непрочитано 23.03.2017, 08:41  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

У кого нибудь получалось запустить ADC1 от TIM1_CC1 event ? В чем ошибся при настройке ?
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 09.04.2017, 19:39  
Unknown
Прописка
 
Регистрация: 23.02.2005
Сообщений: 166
Сказал спасибо: 203
Сказали Спасибо 46 раз(а) в 27 сообщении(ях)
Unknown на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Всем доброго!
Не хочу ради малого вопроса тему создавать, спрошу здесь.
Сам не сильно программист, потому туплю и никак не соображу:

Как максимально быстро вывести число в порт по маске?

Конкретно.
Есть МК F103, нужно быстро выводить 8-разрядное целое число (например, OutPort) в порт B, на пины PB3...PB10 (8 выводов), не затрагивая при этом другие пины.

Понятно, что если забить на другие выводы, можно использовать классический вариант:
GPIOB-›ODR = (OutPort ‹‹ 3);

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

Тогда придётся его считывать и модифицировать выводимое число.
Как это сделать быстро, без лишних команд?

Как вариант ещё использовать битовый вывод (BSRR, BRR), но тогда перевод пинов в 1 и в 0 будет сдвинут по времени, что нежелательно, т.к. к упомянутым выводам подключена через драйверы и мосфеты резистивная матрица, своего рода мощный АЦП на десятки ампер, и могут возникнуть нежелательные иглы и провалы.

Желательно выводить число единовременно на все 8 выводов.

Кто что посоветует?
Unknown вне форума  
Непрочитано 09.04.2017, 19:49  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

GPIOB-›BSRR = 0xFF‹‹(16+3) | OutPort‹‹3
За разъяснениями обращаемся к описанию регистра BSRR.
При одновременном присутствии 1 в битах BS и BR приоритет будет иметь именнно установка бита.
NewWriter вне форума  
Эти 2 пользователя(ей) сказали Спасибо NewWriter за это сообщение:
H4LF (09.04.2017), Unknown (09.04.2017)
Непрочитано 09.04.2017, 22:41  
Unknown
Прописка
 
Регистрация: 23.02.2005
Сообщений: 166
Сказал спасибо: 203
Сказали Спасибо 46 раз(а) в 27 сообщении(ях)
Unknown на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от NewWriter Посмотреть сообщение
GPIOB-›BSRR = 0xFF‹‹(16+3) | OutPort‹‹3
За разъяснениями обращаемся к описанию регистра BSRR.
При одновременном присутствии 1 в битах BS и BR приоритет будет иметь именнно установка бита.
Благодарю, завтра опробую!

То, что можно использовать одновременно обе части регистра BSRR, BS и BR, я догадывался, но как это сделать просто и быстро, и как получается столь лаконичная запись, пока пытаюсь понять..
Unknown вне форума  
Непрочитано 10.04.2017, 00:16  
Sl_
Частый гость
 
Регистрация: 08.05.2011
Сообщений: 25
Сказал спасибо: 12
Сказали Спасибо 7 раз(а) в 4 сообщении(ях)
Sl_ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от NewWriter Посмотреть сообщение
GPIOB-›BSRR = 0xFF‹‹(16+3) | OutPort‹‹3
За разъяснениями обращаемся к описанию регистра BSRR.
При одновременном присутствии 1 в битах BS и BR приоритет будет иметь именнно установка бита.
А так не достаточно?
GPIOB-›BSRR = OutPort‹‹3;
Sl_ вне форума  
Непрочитано 10.04.2017, 00:28  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Sl_ Посмотреть сообщение
А так не достаточно?
GPIOB-›BSRR = OutPort‹‹3;
Если все эти 8 линий сброшены, то достаточно. Но если нужно записать так, чтобы не влияло предыдущее состояние портов, то надо именно так:
GPIOB-›BSRR = 0xFF‹‹(16+3) | OutPort‹‹3
Здесь все восемь сбрасываются, кроме тех, что устанавливаются в BS части, у неё приоритет. Удобно. Из RM:
Цитата:
Note: If both BSx and BRx are set, BSx has priority.

Последний раз редактировалось H4LF; 10.04.2017 в 02:55.
H4LF вне форума  
Непрочитано 10.04.2017, 08:54  
Unknown
Прописка
 
Регистрация: 23.02.2005
Сообщений: 166
Сказал спасибо: 203
Сказали Спасибо 46 раз(а) в 27 сообщении(ях)
Unknown на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Unknown Посмотреть сообщение
пока пытаюсь понять..
А, так что ж тут понимать-то??
Наверное, я вчера спал уже...
Смещаем 8 единиц на 16+3 разрядов и они попадают в BR3...BR10, а само число, смещенное на 3 разряда - в регистры BS!
Unknown вне форума  
 

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

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

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, время: 07:37.


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